0 txs
109 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
approvedAddress
viewfunction approvedAddress(address) view returns (bool)
assetToSmartcoin
viewfunction assetToSmartcoin(address) view returns (address)
awardedUMJA
viewfunction awardedUMJA() view returns (uint256)
baseRate
viewfunction baseRate() view returns (uint256)
burnNonce
viewfunction burnNonce(uint256) view returns (bool)
burnRateMultiplier
viewfunction burnRateMultiplier() view returns (uint256)
canMintAtomic
viewfunction canMintAtomic() view returns (bool)
canMintBurn
viewfunction canMintBurn() view returns (bool)
currentEmissionCapUMJA
viewfunction currentEmissionCapUMJA() view returns (uint256)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getBurnFee
viewfunction getBurnFee(uint256 USDValue) view returns (uint256)
getMintReward
viewfunction getMintReward(uint256 USDValue, bool isHalving) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSigner
viewfunction getSigner(tuple data, uint8 v, bytes32 r, bytes32 s) view returns (address _signer)
getTypedDataHash
viewfunction getTypedDataHash(tuple data) view returns (bytes32 hash)
hashData
purefunction hashData(tuple data) pure returns (bytes32 hash)
hasPending
viewfunction hasPending(address, address) view returns (uint256 nonce, uint256 expirationDate, uint8 status)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isAsset
viewfunction isAsset(address) view returns (bool)
isOtherMinter
viewfunction isOtherMinter(address) view returns (bool)
isSmartcoin
viewfunction isSmartcoin(address) view returns (bool)
maxDollarMintAmt
viewfunction maxDollarMintAmt() view returns (uint256)
maxSpread
viewfunction maxSpread() view returns (uint256)
mintNonce
viewfunction mintNonce(uint256) view returns (bool)
mintRateMultiplier
viewfunction mintRateMultiplier() view returns (uint256)
mintRequests
viewfunction mintRequests(uint256) view returns (address user, address smartCoin, uint256 assetAmt, uint256 smartcoinAmt, bytes32 externalHash, uint256 USDValueOfAsset, bool isResolved)
nextHalvingAtInUmja
viewfunction nextHalvingAtInUmja() view returns (uint256)
nextHalvingAtInUSD
viewfunction nextHalvingAtInUSD() view returns (uint256)
OWNER_ROLE
viewfunction OWNER_ROLE() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
REQUEST_DATA_HASH
viewfunction REQUEST_DATA_HASH() view returns (bytes32)
requests
viewfunction requests(uint256) view returns (address user, address assetAddress, address smartCoin, uint256 assetAmt, bytes32 externalHash, bool isExternal, bool isResolved)
signer
viewfunction signer() view returns (address)
smartcoinToAsset
viewfunction smartcoinToAsset(address, address) view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timeOffset
viewfunction timeOffset() view returns (uint256)
totalUSDSpent
viewfunction totalUSDSpent() view returns (uint256)
treasury
viewfunction treasury() view returns (address)
UMJA
viewfunction UMJA() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
USD_BRACKET
viewfunction USD_BRACKET() view returns (uint256)
adjustExternalMinter
nonpayablefunction adjustExternalMinter(address minter, bool status)
adjustMaxDollarMint
nonpayablefunction adjustMaxDollarMint(uint256 _maxDollarMint)
adjustMaxSpread
nonpayablefunction adjustMaxSpread(uint256 newSpread)
adjustRateMultipliers
nonpayablefunction adjustRateMultipliers(uint256 mintMultiplier, uint256 burnMultiplier)
adminSmartCoinBurn
nonpayablefunction adminSmartCoinBurn(address smartcoinAddress, uint256 amount, address from)
adminSmartCoinMint
nonpayablefunction adminSmartCoinMint(address smartcoinAddress, uint256 amount, address to)
asyncSettleMintRequest
nonpayablefunction asyncSettleMintRequest(uint256 nonce, bytes32 externalHash)
burnSmartCoinRequest
nonpayablefunction burnSmartCoinRequest(tuple requestData, uint8 v, bytes32 r, bytes32 s)
changeSigner
nonpayablefunction changeSigner(address _signer)
changeTimeOffset
nonpayablefunction changeTimeOffset(uint256 newTime)
changeTreasury
nonpayablefunction changeTreasury(address treasuryAddr)
disableMintBurn
nonpayablefunction disableMintBurn()
enableMintBurn
nonpayablefunction enableMintBurn(uint256 _totalUmjaReward, uint256 initialBracketUMJA)
flipAtomicMint
nonpayablefunction flipAtomicMint()
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
handleReward
nonpayablefunction handleReward(uint256 USDValue, address user)
initialize
nonpayablefunction initialize(address _owner, address _signer, address _treasury, uint256 _maxDollarMintAmt, address rewardUmja)
mintRequest
nonpayablefunction mintRequest(tuple requestData, uint8 v, bytes32 r, bytes32 s)
modifySmartcoinAssetPair
nonpayablefunction modifySmartcoinAssetPair(address assetAddress, address smartcoinAddress, bool isAdded)
modifyWhitelist
nonpayablefunction modifyWhitelist(address userAddress, bool isWL)
processBurnRequest
nonpayablefunction processBurnRequest(uint256 nonce, bytes32 externalHash)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdrawAsset
nonpayablefunction withdrawAsset(address asset, uint256 amt)
events
AtomicMintChanged
event AtomicMintChanged(bool status)
BurnRequestFulfilled
event BurnRequestFulfilled(address user, address asset, uint256 assetToReturn, uint256 nonce)
BurnRequestFulfilledOffChain
event BurnRequestFulfilledOffChain(address user, address asset, uint256 assetToReturn, bytes32 externalHash, uint256 nonce)
BurnSmartcoinRequest
event BurnSmartcoinRequest(address user, address asset, uint256 assetToReturn, address smartcoin, uint256 smartcoinBurned, uint256 umjaBurned, uint256 nonce)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint64 version)
ManualBurn
event ManualBurn(address user, address smartcoin, uint256 amount)
ManualMint
event ManualMint(address user, address smartcoin, uint256 amount)
MaxDollarMintChange
event MaxDollarMintChange(uint256 max)
MintBurnDisabled
event MintBurnDisabled(bool status)
MintBurnEnabled
event MintBurnEnabled(uint256 totalReward)
MintRequestCanceled
event MintRequestCanceled(address user, uint256 nonce)
MintRequestCreated
event MintRequestCreated(address user, address smartcoin, uint256 assetAmt, uint256 smartcoinAmt, uint256 nonce)
MintSmartcoin
event MintSmartcoin(address user, address asset, uint256 assetAmt, address smartcoin, uint256 smartcoinAmt, uint256 umjaReward, uint256 nonce)
MultipliersUpdate
event MultipliersUpdate(uint256 mintMult, uint256 burnMult)
NewMaxSpread
event NewMaxSpread(uint256 spread)
OtherMinterChange
event OtherMinterChange(address minter, bool status)
ResolveMintSmartcoin
event ResolveMintSmartcoin(address user, bytes32 txhash, address smartcoin, uint256 assetAmt, uint256 smartcoinAmt, uint256 umjaReward, uint256 nonce)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SignerChange
event SignerChange(address newSigner)
SmartcoinAssetPair
event SmartcoinAssetPair(address smartcoin, address asset, bool isAdded)
TimeOffsetChange
event TimeOffsetChange(uint256 newTime)
TreasuryChange
event TreasuryChange(address newTreasury)
Upgraded
event Upgraded(address indexed implementation)
WLModified
event WLModified(address user, bool status)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressNotApproved
error AddressNotApproved()
AlreadyEnabled
error AlreadyEnabled()
AlreadyResolved
error AlreadyResolved()
AssetAlreadyExists
error AssetAlreadyExists()
CannotMintAsync
error CannotMintAsync()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExceedMaxSpread
error ExceedMaxSpread(bool)
FailedCall
error FailedCall()
IncorrectAction
error IncorrectAction()
INSUFFICIENT_PROFIT
error INSUFFICIENT_PROFIT()
INVALID_CHAINID
error INVALID_CHAINID()
INVALID_SIGNATURE
error INVALID_SIGNATURE()
InvalidAssetAddress
error InvalidAssetAddress()
InvalidAssetToSmartCoin
error InvalidAssetToSmartCoin()
InvalidInitialization
error InvalidInitialization()
InvalidNonce
error InvalidNonce()
InvalidSender
error InvalidSender()
InvalidSmartcoinAddress
error InvalidSmartcoinAddress()
InvalidSmartCoinToAsset
error InvalidSmartCoinToAsset()
MintAmountExceedsLimit
error MintAmountExceedsLimit()
MintBurnDisabled
error MintBurnDisabled()
NotInitializing
error NotInitializing()
PendingRequestExists
error PendingRequestExists()
RequestDoesNotExist
error RequestDoesNotExist()
RequestExpired
error RequestExpired()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SpreadInvalid
error SpreadInvalid()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a080604052346100ea57306080527ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c166100d9576002600160401b03196001600160401b03821601610073575b6040516143c190816100f08239608051818181611ca50152611d760152f35b6001600160401b0319166001600160401b039081177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005581527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a13880610054565b63f92ee8a960e01b60005260046000fd5b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816249fb61146132c45750806301ffc9a71461326d578063060d206e146131ee57806307e7432e146131af57806309bafb25146131105780631053e05e146130e95780631186ecef146130c35780631aa2ff14146130825780631f68f20a146130645780631f6eeb6814613041578063238ac933146130145780632485f64714612ee0578063248a9ca314612ec15780632ce2dfef1461283d5780632f2ff15d1461280b5780633160fe58146127a057806336568abe1461275b57806338e4f0641461268a5780633e2857f51461266c5780633ec6d68914612612578063424e65751461259157806346e55d3a1461257357806349d29acf146125525780634d48e89b14611f475780634f1ef28614611cfa57806352d1902d14611c92578063530b97a4146115c557806353d0e9fc1461157757806355b095a61461152e578063572ee29c1461131f5780635a72432b146113015780635d36984c146112e3578063615a0188146112c557806361d027b31461129c5780636373ace414611080578063660be5e014610ec15780636a85f2c314610e825780636e214f0d14610de057806375b238fc14610db7578063796e8f9014610d995780637f8d57c214610d5e578063819a814214610d4057806381d12c5814610cb457806384b0196e14610b65578063854e7adf14610b365780638683f7d714610a655780638faa8eaa14610a4757806391d14854146109ee578063a217fddf146109d2578063a438b0e5146109b4578063aa91f16914610928578063aacf1fb2146108d8578063aad2b72314610840578063ad20d2e614610821578063ad3cb1cc146107d4578063af1b723514610795578063b14f2a3914610713578063c87fa42a146106d4578063cd23ebf014610686578063d0d8fee214610665578063d547741f1461062a578063dddbc538146105e2578063de8cbf64146105bb578063e079764e146104c3578063e58378bb1461049a578063eb81023a14610362578063f09ce8e31461032c5763fa5ec5aa1461030c57600080fd5b346103295780600319360112610329576020600b54604051908152f35b80fd5b50346103295761016036600319011261032957602061035a61035561035036613412565b613765565b613f73565b604051908152f35b50346103295761037136613367565b61037c9291926138bd565b6001600160a01b038216801561048b576001600160a01b038216801561047c578552600e60205260ff6040862054161561046d578085913b15610469576040516340c10f1960e01b81526001600160a01b0384166004820152602481018690529082908290604490829084905af1801561045e57610445575b5050604080516001600160a01b0392831681529290911660208301528101919091527f6de547f9e15aa8eb4e186426345d83ce982c2e4a1f811761da74ff56a2a237319080606081015b0390a180f35b8161044f916133f0565b61045a5783386103f5565b8380fd5b6040513d84823e3d90fd5b5080fd5b63657e998b60e11b8552600485fd5b63d92e233d60e01b8652600486fd5b63d92e233d60e01b8552600485fd5b503461032957806003193601126103295760206040516000805160206142cc8339815191528152f35b5034610329576020366003190112610329576004356104e06138bd565b600a811015806105b0575b156105a157600754600654829181811115610556579061050a91613625565b116105425760207f9a1d7ab27ee9b3031252400e5398b51364dc35a75280ff0fa3f91794911c5ef0915b80600855604051908152a180f35b631c70d4b760e01b82526001600452602482fd5b61055f91613625565b1161058d5760207f9a1d7ab27ee9b3031252400e5398b51364dc35a75280ff0fa3f91794911c5ef091610534565b631c70d4b760e01b82526004829052602482fd5b63211037df60e11b8252600482fd5b5060328111156104eb565b5034610329578060031936011261032957546040516001600160a01b039091168152602090f35b503461032957602061061861060f61060a6103556105ff366134cc565b949192939093613765565b61408a565b90929192614113565b6040516001600160a01b039091168152f35b50346103295760403660031901126103295761066160043561064a61330b565b9061065c610657826136c0565b61391d565b613cde565b5080f35b50346103295780600319360112610329576020604051655af3107a40008152f35b5034610329576020366003190112610329577fa6b42eb67e5f025b60b5ca100e3c016c02b2d538396def4014db2ec60a6898fd60206004356106c66138bd565b80600255604051908152a180f35b50346103295760203660031901126103295760209060ff906040906001600160a01b036106ff6132f0565b168152600f84522054166040519015158152f35b50346103295760203660031901126103295761072d6132f0565b61073561385d565b6001600160a01b03168015610786576020817f1ac54af2084ba0e4b86b7bc54b978ce7dd4ca046d3dec89d7c8963873820c0bb926001600160601b0360a01b6004541617600455604051908152a180f35b63d92e233d60e01b8252600482fd5b50346103295760203660031901126103295760209060ff906040906001600160a01b036107c06132f0565b168152601084522054166040519015158152f35b50346103295780600319360112610329575061081d6040516107f76040826133f0565b60058152640352e302e360dc1b60208201526040519182916020835260208301906135bb565b0390f35b503461032957602036600319011261032957602061035a60043561383e565b50346103295760203660031901126103295761085a6132f0565b61086261385d565b6001600160a01b0381169081156108c9576003805462010000600160b01b03191660109290921b62010000600160b01b03169190911790556040519081527f1d4fc2100fc6a16b01f961ed088b79195c405adc33f92ae3a76e70662cb2096f90602090a180f35b63d92e233d60e01b8352600483fd5b50346103295780600319360112610329576108f161385d565b60ff19600354166003557f4c63c608b8ebe4a697c7c237552c8fc18a09b82d2b3ea2c16ef684a5a8e154af6020604051838152a180f35b50346103295760403660031901126103295760406109446132f0565b61094c61330b565b9060018060a01b03168352601360205281832060009160018060a01b031682526020522080549060ff600260018301549201541690604051928352602083015260038110156109a057606092506040820152f35b634e487b7160e01b83526021600452602483fd5b50346103295780600319360112610329576020600d54604051908152f35b5034610329578060031936011261032957602090604051908152f35b5034610329576040366003190112610329576040610a0a61330b565b91600435815260008051602061432c833981519152602052209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b50346103295780600319360112610329576020600254604051908152f35b503461032957610a7436613351565b610a7c6138bd565b80821115610ae657610a8e8183613625565b60085410610ad2577f50f57ce7974881aa1a50d0320e8dc0cb518714abfa33034e601f796a5f03d3a8916040915b816007558060065582519182526020820152a180f35b631c70d4b760e01b83526001600452602483fd5b610af08282613625565b60085410610b22577f50f57ce7974881aa1a50d0320e8dc0cb518714abfa33034e601f796a5f03d3a891604091610abc565b631c70d4b760e01b83526004839052602483fd5b50346103295760203660031901126103295760ff60406020926004358152601484522054166040519015158152f35b50346103295780600319360112610329577fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100541580610c8b575b15610c4e57610bf290610bb0613df1565b90610bb9613ec2565b906020610c0060405193610bcd83866133f0565b8385526000368137604051968796600f60f81b885260e08589015260e08801906135bb565b9086820360408801526135bb565b904660608601523060808601528260a086015284820360c08601528080855193848152019401925b828110610c3757505050500390f35b835185528695509381019392810192600101610c28565b60405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606490fd5b507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015415610b9f565b503461032957602036600319011261032957604060e091600435815260166020522060ff60018060a01b038254169160018060a01b036001820154169060018060a01b0360028201541660038201549060056004840154930154936040519687526020870152604086015260608501526080840152818116151560a084015260081c16151560c0820152f35b50346103295780600319360112610329576020600754604051908152f35b503461032957806003193601126103295760206040517faec0f4ec72cf24359a5f7b2fab181c43d5d0cb5077a1e67d488fd974cde1e47c8152f35b50346103295780600319360112610329576020600854604051908152f35b5034610329578060031936011261032957602060405160008051602061434c8339815191528152f35b503461032957604036600319011261032957610dfa6132f0565b90610e03613335565b6001600160a01b0383169283156108c9577f4b6a3db197dc26845bb6b92c60c5bc2e4b5ee8636153c3953e8dfd13587f6fd29293610e3f61385d565b84526018602052610e5f82604086209060ff801983541691151516179055565b604080516001600160a01b0390921682529115156020820152908190810161043f565b50346103295760203660031901126103295760209060ff906040906001600160a01b03610ead6132f0565b168152600e84522054166040519015158152f35b503461032957606036600319011261032957610edb6132f0565b610ee361330b565b90604435918215159182840361107c57610efb6138bd565b6001600160a01b031690811561048b576001600160a01b031692831561048b5715610fed57808452600f60205260ff604085205416610fde5791606091837f3e5c66c98aff3b653fd95f1ec9c8771a73979a6ab88809e6a0a00cfaf68043c9948652600f60205260408620600160ff19825416179055828652601060205260408620600160ff19825416179055808652601160205260408620836001600160601b0360a01b825416179055828652601260205260408620816000526020526040600020600160ff198254161790555b60405192835260208301526040820152a180f35b63dc0d0aab60e01b8452600484fd5b91606091837f3e5c66c98aff3b653fd95f1ec9c8771a73979a6ab88809e6a0a00cfaf68043c9948652600f6020526040862060ff19815416905582865260106020526040862060ff19815416905582865260126020526040862081600052602052604060002060ff1981541690558086526011602052604086206001600160601b0360a01b8154169055610fca565b8480fd5b50346103295761108f36613351565b906110986138bd565b8083526016602052604083209160058301805460ff8160081c1661128d5784546001600160a01b031690811561127e5761ff00191661010017825580865260136020908152604080882060028801546001600160a01b03166000818152919093522054851480611231575b9060ff9392916111fd575b505054161561117c576004830181905582546001840154600390940154604080516001600160a01b03938416815295909216602086015290840152606083015260808201527fb1a256fbcd79e70015832a2f9b930923d5b352303eba0a7ec540060d416b4dea9060a090a180f35b5060018201805460045484546003860180547fe86233d8ae1b40fd6706cf14ff8a66ecf31b4a04add53a7c2fe0bd9d3d9a94919760809795929490936111d1936001600160a01b039182169282169116613967565b5492549054604080516001600160a01b039586168152949092166020850152908301526060820152a180f35b60406002916000938a526013602052818a20849160018060a01b03168252602052208281558260018201550155388061110e565b5081875260136020526040872060018060a01b03821660005260205260ff60026040600020015416600381101561126a57600214611103565b634e487b7160e01b88526021600452602488fd5b637037cbb560e11b8752600487fd5b6336ab81e160e11b8652600486fd5b50346103295780600319360112610329576004546040516001600160a01b039091168152602090f35b50346103295780600319360112610329576020600654604051908152f35b50346103295780600319360112610329576020600954604051908152f35b50346103295780600319360112610329576020600c54604051908152f35b50346103295761132e36613351565b6113366138bd565b81835260176020526040832091600683019182549260ff841661128d5784546001600160a01b031693841561127e576004860183905560ff1916600190811790915583865260136020908152604080882092870180546001600160a01b03166000818152949093529220549194918414806114f5575b6114c1575b50506113cb600585015460018060a01b03865416906139ba565b8354855460038701805490979394939289926001600160a01b0391821692911690823b1561045a576040516340c10f1960e01b81526001600160a01b0392909216600483015260248201529082908290604490829084905af1801561045e5761149e575b50937fd171a5c27b4cdb70b61598878ce21a16b7e3faad145d37500bcc884f4e5de3999360e093888894600260018060a01b038254169660018060a01b03905416910154915492604051968752602087015260408601526060850152608084015260a083015260c0820152a180f35b816114ae919796959493976133f0565b6114bd5790919293863861142f565b8680fd5b604060029160009389526013602052818920849160018060a01b0316825260205220828155826001820155015538806113b1565b5081875260136020526040872060018060a01b03821660005260205260ff60026040600020015416600381101561126a576001146113ac565b50346103295760403660031901126103295761154861330b565b338252601860205260ff6040832054161561156957610661906004356139ba565b6282b42960e81b8252600482fd5b5034610329576020366003190112610329577fb650e121b1037bd7a6e028a6726d7491518432f2902241f1451208fd22c05b6d60206004356115b761385d565b80600d55604051908152a180f35b50346103295760a0366003190112610329576115df6132f0565b6115e761330b565b6044356001600160a01b0381169081900361045a576084356001600160a01b038116929083900361107c5760008051602061436c833981519152549260ff8460401c16159367ffffffffffffffff811680159081611c8a575b6001149081611c80575b159081611c77575b50611c685767ffffffffffffffff19811660011760008051602061436c8339815191525584611c3b575b506001600160a01b0385161561047c576001600160a01b0382161561047c57821561047c57801561047c5760409485516116b687826133f0565b601481527329b6b0b93a31b7b4b71021b7b73a3937b63632b960611b60208201528651906116e488836133f0565b60018252603160f81b60208301526116fa61405c565b61170261405c565b80519067ffffffffffffffff8211611c2757819061172e6000805160206142ac83398151915254613db7565b601f8111611bac575b50602090601f8311600114611b2d578b92611b22575b50508160011b916000199060031b1c1916176000805160206142ac833981519152555b80519067ffffffffffffffff8211611b0e5761179a6000805160206142ec83398151915254613db7565b601f8111611a9e575b50602090601f8311600114611a1b576118489392918a9183611a10575b50508160011b916000199060031b1c1916176000805160206142ec833981519152555b877fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10055877fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1015561183161405c565b61183961405c565b61184281613ab7565b50613b79565b5060008051602061434c833981519152865260008051602061432c8339815191526020526000805160206142cc8339815191526001868820015460008051602061434c833981519152885260008051602061432c833981519152602052816001888a20015560008051602061434c8339815191527fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8980a46000805160206142cc833981519152865260008051602061432c8339815191526020526000805160206142cc8339815191526001868820015481885260008051602061432c833981519152602052816001888a200155817fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff8980a46001600160601b0360a01b8654161785556003549062010000600160b01b039060101b169062010000600160b01b031916176003556064356002556001600160601b0360a01b6004541617600455610e10600d556119b7575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29168ff00000000000000001960008051602061436c833981519152541660008051602061436c833981519152555160018152a180f35b0151905038806117c0565b6000805160206142ec8339815191528a52818a209190601f1984168b5b818110611a86575091600193918561184897969410611a6d575b505050811b016000805160206142ec833981519152556117e3565b015160001960f88460031b161c19169055388080611a52565b92936020600181928786015181550195019301611a38565b6000805160206142ec8339815191528a527f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b75601f840160051c81019160208510611b04575b601f0160051c01905b818110611af957506117a3565b8a8155600101611aec565b9091508190611ae3565b634e487b7160e01b89526041600452602489fd5b01519050388061174d565b6000805160206142ac8339815191528c52818c209250601f1984168c5b818110611b945750908460019594939210611b7b575b505050811b016000805160206142ac83398151915255611770565b015160001960f88460031b161c19169055388080611b60565b92936020600181928786015181550195019301611b4a565b6000805160206142ac8339815191528c529091507f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d601f840160051c81019160208510611c1d575b90601f859493920160051c01905b818110611c0f5750611737565b8c8155849350600101611c02565b9091508190611bf4565b634e487b7160e01b8a52604160045260248afd5b68ffffffffffffffffff1916680100000000000000011760008051602061436c833981519152553861167c565b63f92ee8a960e01b8752600487fd5b90501538611652565b303b15915061164a565b869150611640565b50346103295780600319360112610329577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163003611ceb57602060405160008051602061430c8339815191528152f35b63703e46dd60e11b8152600490fd5b50604036600319011261032957611d0f6132f0565b6024359067ffffffffffffffff8211611f435736602383011215611f435781600401359083611d3d8361359f565b93611d4b60405195866133f0565b83855260208501933660248284010111611f4357806024602093018637850101526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016308114908115611f20575b50611f1157611dae61385d565b6040516352d1902d60e01b81526001600160a01b0382169390602081600481885afa869181611edd575b50611df157634c9c8ce360e01b86526004859052602486fd5b938460008051602061430c833981519152879603611ecb5750823b15611eb95760008051602061430c83398151915280546001600160a01b031916821790558491907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8380a2805115611e9e576106619382915190845af43d15611e96573d91611e7a8361359f565b92611e8860405194856133f0565b83523d85602085013e61419b565b60609161419b565b5050505034611eaa5780f35b63b398979f60e01b8152600490fd5b634c9c8ce360e01b8552600452602484fd5b632a87526960e21b8652600452602485fd5b9091506020813d602011611f09575b81611ef9602093836133f0565b810103126114bd57519038611dd8565b3d9150611eec565b63703e46dd60e11b8452600484fd5b60008051602061430c833981519152546001600160a01b03161415905038611da1565b8280fd5b503461032957611f56366134cc565b90919260035460ff8116156125435781516001600160a01b0316330361253457602082019260018060a01b038451168752600f60205260ff6040882054168015612513575b1561250457604083810180516001600160a01b0316895260106020529088205490959060ff16156124f55760c084015142116124e65760e084019687518952601460205260ff60408a2054166124d757916120019161200a949361060a61035588613765565b90939193614113565b60101c6001600160a01b039081169116036124c85761010081015146036124b9576101408101516124aa5781516001600160a01b0316612435575b80516001600160a01b0390811686526013602090815260408088208651909316600090815292909152902060010154156123a25780516001600160a01b0390811686526013602090815260408088208651909316600090815292909152902060010154421115612393575b6120bd60a082015161383e565b845160018060a01b03835116875260136020526040872060018060a01b0386511660018060a01b031660005260205260406000205560018060a01b03825116865260136020526040862060018060a01b0385511660018060a01b03166000526020526002604060002001600260ff1982541617905560018060a01b03825116865260136020526040862060018060a01b0385511660018060a01b03166000526020528560016040600020015560018060a01b038251169260018060a01b038151168661224f600560018060a01b03895116978b60608901998a51906101208b0151151597604051946121ae866133a1565b855260208086019182526040808701938452606087019485526080870186815260a088019b8c5260c088018781529a5187526016909252909420945185546001600160a01b039182166001600160a01b03199182161787559151600187018054918316918416919091179055915160028601805491909316911617905551600383015551600482015593519301805460ff191693151560ff16939093178355565b51815461ff00191690151560081b61ff001617905585518752601460205260408720805460ff19166001179055865487906001600160a01b0316803b1561046957604051632770a7eb60e21b8152336004820152602481018590529082908290604490829084905af1801561045e5761237e575b508551608094909401805190946001600160a01b0316803b15611f4357604051632770a7eb60e21b8152336004820152602481019290925282908290604490829084905af1801561045e57612363575b50505192519351915194516040517f63b896c06e4d3a7f6896fc1064669ec22879847468078582bcd8eb2d17428221969095869561043f959394936001600160a01b039081169291163388613723565b8161237191959493956133f0565b6114bd5790918638612313565b81612388916133f0565b6114bd5786386122c3565b631685ecdd60e31b8552600485fd5b80516001600160a01b03908116865260136020908152604080882086519093166000908152929091529020546123935780516001600160a01b039081168652601360209081526040808820865190931660009081529290915290206002015460ff16600381101561242157156120b057631685ecdd60e31b8552600485fd5b634e487b7160e01b86526021600452602486fd5b82516001600160a01b039081168652601260209081526040808820855190931660009081529290915290205460ff161561249c5781516001600160a01b03908116865260116020526040862054845182169116146120455763f39ae17b60e01b8552600485fd5b62aafa8760e31b8552600485fd5b633fc85f2d60e01b8552600485fd5b63029b6e5760e41b8552600485fd5b631468054760e31b8552600485fd5b633ab3447f60e11b8952600489fd5b637f780e6960e11b8852600488fd5b63743b3aa560e11b8852600488fd5b630ccd248560e21b8752600487fd5b5083516001600160a01b0316158015611f9b57506101208301511515611f9b565b636edaef2f60e11b8652600486fd5b63e657976d60e01b8652600486fd5b50346103295761016036600319011261032957602061035a61035036613412565b50346103295780600319360112610329576020600154604051908152f35b503461032957602036600319011261032957604060e091600435815260176020522060018060a01b038154169060018060a01b03600182015416906002810154600382015460048301549160ff600660058601549501541694604051968752602087015260408601526060850152608084015260a0830152151560c0820152f35b503461032957604036600319011261032957604061262e6132f0565b9161263761330b565b9260018060a01b031681526012602052209060018060a01b0316600052602052602060ff604060002054166040519015158152f35b50346103295780600319360112610329576020600a54604051908152f35b5034610329576040366003190112610329576126a46132f0565b602435906126b06138bd565b6001600160a01b031680156108c9576040516370a0823160e01b8152306004820152602081602481855afa8015612750578391859161271b575b501061270c5760045461270992916001600160a01b0390911690613d7e565b80f35b63388a17cd60e11b8352600483fd5b9150506020813d602011612748575b81612737602093836133f0565b8101031261045a57829051386126ea565b3d915061272a565b6040513d86823e3d90fd5b50346103295760403660031901126103295761277561330b565b336001600160a01b038216036127915761066190600435613cde565b63334bd91960e11b8252600482fd5b50346103295780600319360112610329576127b961385d565b7fb1da2f815319e8fd3543624c50d36b5c1375f3f303f13814c4403ea9abc5b030602060035461ff0060ff8260081c161560081b169061ff001916178060035560ff6040519160081c1615158152a180f35b50346103295760403660031901126103295761066160043561282b61330b565b90612838610657826136c0565b613c35565b50346103295736600319016101c081126104695761016013610329576101643560ff811681036104695760035460ff811615612eb2576001600160a01b036128836136e1565b163303612ea3576001600160a01b0361289a6136f7565b168352601060205260ff60408420541615612e945760c43590428210612e855760a435906002548211612e765760e43593848652601560205260ff604087205416612e675790612001612900926101a43590610184359061060a61035561035036613412565b60101c6001600160a01b03908116911603612e5857466101043503612e49576101443580159081158103612e455750612e36576001600160a01b036129436136e1565b1684526013602052604084206129576136f7565b6001600160a01b03166000908152602091909152604090206001015415612d8b576001600160a01b036129886136e1565b16845260136020526040842061299c6136f7565b60018060a01b031660005260205260406000206001429101541015612d7c575b828452601560205260408420805460ff1916600117905561012435801515810361107c5715612bae57907ff48730a514cba16c0296e2e0a68540305fa4676cfd0be83ac78ae23c1adf190c9260a092612b21612a166136f7565b93612af060643595600686608435968c60405194612a33866133a1565b33865260208601906001808f1b03168152604086018c815260608701918b83526040608089019480865260a08a0196875260c08a01978189528152601760205220978f600180911b039060a0600180911b03905116168f6001600160601b03901b89541617885560018f81901b0390511660018801908f600180911b03168f6001600160601b03901b82541617905551600287015551600386015551600485015551600584015551151591019060ff801983541691151516179055565b338852601360205260408820612b046136f7565b600180891b031660005260205283604060002055600d5490613632565b338752601360205260408720612b356136f7565b600180881b0316600052602052600160406000200155338652601360205260408620612b5f6136f7565b600180871b03166000526020526002604060002001600160ff19825416179055612b876136f7565b9260405193338552600180871b03166020850152604084015260608301526080820152a180f35b905060ff60035460081c1615612d6d576001600160a01b03612bce61370d565b168352600f60205260ff60408420541615612d5e576001600160a01b03612bf36136f7565b168352601260205260408320612c0761370d565b60018060a01b031660005260205260ff6040600020541615612d50576001600160a01b03612c3361370d565b168352601160205260408320546001600160a01b0390811690612c546136f7565b1603612d4157612c659033906139ba565b6001600160a01b03612c7561370d565b6004546064359392612c959285926001600160a01b031691339116613967565b6001600160a01b03612ca56136f7565b16908460843592803b15610469576040516340c10f1960e01b8152336004820152602481018590529082908290604490829084905af1801561045e57612d2c575b50507f6d1528f7969d78eeb6f300efedbb90714664fdc8490dd4d6f99a39e6f433902b9361043f91612d1661370d565b93612d1f6136f7565b6040519687963388613723565b81612d36916133f0565b61107c578438612ce6565b63f39ae17b60e01b8352600483fd5b62aafa8760e31b8352600483fd5b630ccd248560e21b8352600483fd5b63206509f760e01b8352600483fd5b631685ecdd60e31b8452600484fd5b6001600160a01b03612d9b6136e1565b168452601360205260408420612daf6136f7565b60018060a01b0316600052602052604060002054612d7c576001600160a01b03612dd76136e1565b168452601360205260408420612deb6136f7565b60018060a01b031660005260205260ff600260406000200154166003811015612e2257156129bc57631685ecdd60e31b8452600484fd5b634e487b7160e01b85526021600452602485fd5b633fc85f2d60e01b8452600484fd5b8580fd5b63029b6e5760e41b8452600484fd5b631468054760e31b8452600484fd5b633ab3447f60e11b8652600486fd5b631ac96ca960e21b8552600485fd5b637f780e6960e11b8452600484fd5b63743b3aa560e11b8352600483fd5b636edaef2f60e11b8352600483fd5b63e657976d60e01b8352600483fd5b503461032957602036600319011261032957602061035a6004356136c0565b503461032957612eef36613367565b612efb939291936138bd565b6001600160a01b0382168015613005576001600160a01b038216801561048b578452600e60205260ff60408520541615612ff657803b1561045a57604051632770a7eb60e21b81526001600160a01b0383166004820152602481018690529084908290604490829084905af1801561275057612fc0575b50604080516001600160a01b039283168152929091166020830152810192909252907f9e38b42c5de67232f3f971f43bbf00ccf326d1850ac0e60fb4a5059188eb955f90806060810161043f565b83612fef7f9e38b42c5de67232f3f971f43bbf00ccf326d1850ac0e60fb4a5059188eb955f9561043f936133f0565b9350612f72565b63657e998b60e11b8452600484fd5b63d92e233d60e01b8452600484fd5b503461032957806003193601126103295760035460405160109190911c6001600160a01b03168152602090f35b5034610329578060031936011261032957602060ff600354166040519015158152f35b50346103295780600319360112610329576020600554604051908152f35b5034610329576020366003190112610329576020906001600160a01b036130a76132f0565b16815260118252604060018060a01b0391205416604051908152f35b5034610329578060031936011261032957602060ff60035460081c166040519015158152f35b503461032957604036600319011261032957602061035a613108613335565b60043561363f565b50346103295761311f36613351565b61312761385d565b600a546131a0577f69ca28ad535e14dd9904bc222c933043c5b590863a9c65fe7eec7ec3aecb168091655af3107a400060209281600a5580600b5580600c55600160ff1960035416176003550460055583600955836001556131968160018060a01b0386541630903390613967565b604051908152a180f35b637952fbad60e11b8352600483fd5b50346103295760203660031901126103295760209060ff906040906001600160a01b036131da6132f0565b168152601884522054166040519015158152f35b5034610329576040366003190112610329576132086132f0565b90613211613335565b61321961385d565b6001600160a01b0383169283156108c95782937f6a64c39a645bd86e1b41ffe2643657b1f3db2310e31cfc67ccc5d338362546d09352600e602052610e5f82604086209060ff801983541691151516179055565b50346103295760203660031901126103295760043563ffffffff60e01b811680910361046957602090637965db0b60e01b81149081156132b3575b506040519015158152f35b6301ffc9a760e01b149050826132a8565b9050346104695760203660031901126104695760ff604060209360043581526015855220541615158152f35b600435906001600160a01b038216820361330657565b600080fd5b602435906001600160a01b038216820361330657565b35906001600160a01b038216820361330657565b60243590811515820361330657565b3590811515820361330657565b6040906003190112613306576004359060243590565b6060906003190112613306576004356001600160a01b03811681036133065790602435906044356001600160a01b03811681036133065790565b60e0810190811067ffffffffffffffff8211176133bd57604052565b634e487b7160e01b600052604160045260246000fd5b610160810190811067ffffffffffffffff8211176133bd57604052565b90601f8019910116810190811067ffffffffffffffff8211176133bd57604052565b610160906003190112613306576040519061342c826133d3565b816004356001600160a01b03811681036133065781526024356001600160a01b03811681036133065760208201526044356001600160a01b03811681036133065760408201526064356060820152608435608082015260a43560a082015260c43560c082015260e43560e0820152610104356101008201526101243580151581036133065761012082015261014435908115158203613306576101400152565b6101c0600319820112613306576101606004809203126133065761357d610140604051926134f9846133d3565b61350281613321565b845261351060208201613321565b602085015261352160408201613321565b6040850152606081013560608501526080810135608085015260a081013560a085015260c081013560c085015260e081013560e08501526101008101356101008501526135716101208201613344565b61012085015201613344565b610140820152906101643560ff81168103613306579061018435906101a43590565b67ffffffffffffffff81116133bd57601f01601f191660200190565b919082519283825260005b8481106135e7575050826000602080949584010152601f8019910116010190565b806020809284010151828286010152016135c6565b8181029291811591840414171561360f57565b634e487b7160e01b600052601160045260246000fd5b9190820391821161360f57565b9190820180921161360f57565b61364e606491600754906135fc565b0490156136b4576136a190600c546001548082116000146136a4576136796136909161369b93613625565b925b61368a600a5460095490613625565b90613625565b60055460011c6135fc565b90613632565b90565b505061369b61369060009261367b565b6136a1906005546135fc565b60005260008051602061432c83398151915260205260016040600020015490565b6004356001600160a01b03811681036133065790565b6044356001600160a01b03811681036133065790565b6024356001600160a01b03811681036133065790565b6001600160a01b0391821681529181166020830152604082019290925291166060820152608081019190915260a081019190915260c081019190915260e00190565b60018060a01b038151169060018060a01b036020820151169060018060a01b03604082015116906060810151608082015160a083015160c08401519060e0850151926101008601519461014061012088015115159701511515976040519960208b019b7faec0f4ec72cf24359a5f7b2fab181c43d5d0cb5077a1e67d488fd974cde1e47c8d5260408c015260608b015260808a015260a089015260c088015260e087015261010086015261012085015261014084015261016083015261018082015261018081526138386101a0826133f0565b51902090565b613859613850606492600654906135fc565b600554906135fc565b0490565b3360009081527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd602052604090205460ff161561389657565b63e2517d3f60e01b600052336004526000805160206142cc83398151915260245260446000fd5b3360009081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16156138f657565b63e2517d3f60e01b6000523360045260008051602061434c83398151915260245260446000fd5b600081815260008051602061432c8339815191526020908152604080832033845290915290205460ff161561394f5750565b63e2517d3f60e01b6000523360045260245260446000fd5b6040516323b872dd60e01b60208201526001600160a01b03928316602482015292909116604483015260648201929092526139b8916139b382608481015b03601f1981018452836133f0565b613ff5565b565b6139cc606491939293600754906135fc565b04600954926139db8483613632565b90600a54809211600014613a9857600c5460015480821115613a8657613a12613a0c613a0a613a239385613625565b985b86613625565b9661369b60055460011c98896135fc565b95600555655af3107a4000830180931161360f576139b893613a57613a63928895600a55600b5460011c9081600b55613632565b600c555b600954613632565b600955613a7282600154613632565b6001556000546001600160a01b0316613d7e565b50613a23613a12613a0c600098613a0c565b613a639450829150613aaf6139b8936005546135fc565b948592613a5b565b6001600160a01b03811660009081527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd602052604090205460ff16613b73576001600160a01b031660008181527fc32d4dc01d07c436ad8a6f9a20eadd61263c71fe16f6b5956005ba3b341f51dd60205260408120805460ff191660011790553391906000805160206142cc833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b50600090565b6001600160a01b03811660009081527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c602052604090205460ff16613b73576001600160a01b031660008181527fb16e88c42fd4e48df2dd6a2eabd6bc9aec654ec170056b470819f8892cc6431c60205260408120805460ff1916600117905533919060008051602061434c833981519152907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b600081815260008051602061432c833981519152602090815260408083206001600160a01b038616845290915290205460ff16613cd757600081815260008051602061432c833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19166001179055339291907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9080a4600190565b5050600090565b600081815260008051602061432c833981519152602090815260408083206001600160a01b038616845290915290205460ff1615613cd757600081815260008051602061432c833981519152602090815260408083206001600160a01b0395909516808452949091528120805460ff19169055339291907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080a4600190565b60405163a9059cbb60e01b60208201526001600160a01b03909216602483015260448201929092526139b8916139b382606481016139a5565b90600182811c92168015613de7575b6020831014613dd157565b634e487b7160e01b600052602260045260246000fd5b91607f1691613dc6565b604051906000826000805160206142ac8339815191525491613e1283613db7565b8083529260018116908115613ea35750600114613e36575b6139b8925003836133f0565b506000805160206142ac833981519152600090815290917f42ad5d3e1f2e6e70edcf6d991b8a3023d3fca8047a131592f9edb9fd9b89d57d5b818310613e875750509060206139b892820101613e2a565b6020919350806001915483858901015201910190918492613e6f565b602092506139b894915060ff191682840152151560051b820101613e2a565b604051906000826000805160206142ec8339815191525491613ee383613db7565b8083529260018116908115613ea35750600114613f06576139b8925003836133f0565b506000805160206142ec833981519152600090815290917f5f9ce34815f8e11431c7bb75a8e6886a91478f7ffc1dbb0a98dc240fddd76b755b818310613f575750509060206139b892820101613e2a565b6020919350806001915483858901015201910190918492613f3f565b604290613f7e6141fc565b613f86614266565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152613fd760c0826133f0565b519020906040519161190160f01b8352600283015260228201522090565b906000602091828151910182855af115614050576000513d61404757506001600160a01b0381163b155b6140265750565b635274afe760e01b60009081526001600160a01b0391909116600452602490fd5b6001141561401f565b6040513d6000823e3d90fd5b60ff60008051602061436c8339815191525460401c161561407957565b631afcd79f60e31b60005260046000fd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411614107579160209360809260ff60009560405194855216868401526040830152606082015282805260015afa15614050576000516001600160a01b038116156140fb5790600090600090565b50600090600190600090565b50505060009160039190565b9190916004811015614185578061412957509050565b6000600182036141445763f645eedf60e01b60005260046000fd5b5060028103614162578263fce698f760e01b60005260045260246000fd5b9091600360009214614172575050565b6335e2f38360e21b825260045260249150fd5b634e487b7160e01b600052602160045260246000fd5b906141c157508051156141b057805190602001fd5b63d6bda27560e01b60005260046000fd5b815115806141f3575b6141d2575090565b639996b31560e01b60009081526001600160a01b0391909116600452602490fd5b50803b156141ca565b614204613df1565b8051908115614214576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1005480156142415790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b61426e613ec2565b805190811561427e576020012090565b50507fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d101548015614241579056fea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102b19546dff01e856fb3f010c267a7b1c60363cf8a4664e21cc89c26224620214ea16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a264697066735822122071792a77d9fc10a238444afbf648c775477f85a827547aefadb05e638ddb562b64736f6c634300081a0033