0 txs
3 calls
constructor
constructor(address _ibcHandler, address _weth, address _erc20Impl)
functions
authority
viewfunction authority() view returns (address)
channelBalance
viewfunction channelBalance(uint32, uint256, address) view returns (uint256)
ERC20_IMPL
viewfunction ERC20_IMPL() view returns (address)
EXEC_MIN_GAS
viewfunction EXEC_MIN_GAS() view returns (uint256)
getBucket
viewfunction getBucket(address token) view returns (tuple)
gitRev
purefunction gitRev() pure returns (string)
IBC_HANDLER
viewfunction IBC_HANDLER() view returns (address)
ibcAddress
viewfunction ibcAddress() view returns (address)
inFlightPacket
viewfunction inFlightPacket(bytes32) view returns (uint32 sourceChannelId, uint32 destinationChannelId, bytes data, uint64 timeoutHeight, uint64 timeoutTimestamp)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
paused
viewfunction paused() view returns (bool)
predictWrappedToken
viewfunction predictWrappedToken(uint256 path, uint32 channel, bytes token) view returns (address, bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
tokenOrigin
viewfunction tokenOrigin(address) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
WETH
viewfunction WETH() view returns (address)
execute
nonpayablefunction execute(address caller, tuple ibcPacket, address relayer, bytes relayerMsg) returns (bytes)
initialize
nonpayablefunction initialize(address _authority)
onAcknowledgementPacket
nonpayablefunction onAcknowledgementPacket(address caller, tuple ibcPacket, bytes ack, address relayer)
onChanCloseConfirm
nonpayablefunction onChanCloseConfirm(address, uint32, address)
onChanCloseInit
nonpayablefunction onChanCloseInit(address, uint32, address)
onChanOpenAck
nonpayablefunction onChanOpenAck(address, uint32 channelId, uint32, string counterpartyVersion, address)
onChanOpenConfirm
nonpayablefunction onChanOpenConfirm(address, uint32 channelId, address)
onChanOpenInit
nonpayablefunction onChanOpenInit(address, uint32, uint32, string version, address)
onChanOpenTry
nonpayablefunction onChanOpenTry(address, uint32, uint32, uint32, string version, string counterpartyVersion, address)
onRecvIntentPacket
nonpayablefunction onRecvIntentPacket(address, tuple, address, bytes) returns (bytes)
onRecvPacket
nonpayablefunction onRecvPacket(address caller, tuple packet, address relayer, bytes relayerMsg) returns (bytes)
onTimeoutPacket
nonpayablefunction onTimeoutPacket(address caller, tuple ibcPacket, address relayer)
pause
nonpayablefunction pause()
send
nonpayablefunction send(uint32 channelId, uint64 timeoutHeight, uint64 timeoutTimestamp, bytes32 salt, tuple instruction)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
setBucketConfig
nonpayablefunction setBucketConfig(address token, uint256 capacity, uint256 refillRate, bool reset)
unpause
nonpayablefunction unpause()
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityUpdated
event AuthorityUpdated(address authority)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
EnforcedPause
error EnforcedPause()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ErrAsyncMultiplexUnsupported
error ErrAsyncMultiplexUnsupported()
ErrBatchMustBeSync
error ErrBatchMustBeSync()
ErrInfiniteGame
error ErrInfiniteGame()
ErrInvalidAssetDecimals
error ErrInvalidAssetDecimals()
ErrInvalidAssetName
error ErrInvalidAssetName()
ErrInvalidAssetOrigin
error ErrInvalidAssetOrigin()
ErrInvalidAssetSymbol
error ErrInvalidAssetSymbol()
ErrInvalidBatchInstruction
error ErrInvalidBatchInstruction()
ErrInvalidFillType
error ErrInvalidFillType()
ErrInvalidForwardDestinationChannelId
error ErrInvalidForwardDestinationChannelId()
ErrInvalidForwardInstruction
error ErrInvalidForwardInstruction()
ErrInvalidHops
error ErrInvalidHops()
ErrInvalidIBCVersion
error ErrInvalidIBCVersion()
ErrInvalidMultiplexSender
error ErrInvalidMultiplexSender()
ErrMinimumExecutionGasNotRespected
error ErrMinimumExecutionGasNotRespected()
ErrNotIBC
error ErrNotIBC()
ErrNotImplemented
error ErrNotImplemented()
ErrOnlyMaker
error ErrOnlyMaker()
ErrTokenBucketRateLimitExceeded
error ErrTokenBucketRateLimitExceeded()
ErrTokenBucketZeroCapacity
error ErrTokenBucketZeroCapacity()
ErrTokenBucketZeroRefillRate
error ErrTokenBucketZeroRefillRate()
ErrUnauthorized
error ErrUnauthorized()
ErrUnknownOpcode
error ErrUnknownOpcode()
ErrUnsupportedVersion
error ErrUnsupportedVersion()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101003461018e57601f61563738819003918201601f19168301916001600160401b038311848410176101925780849260609460405283398101031261018e578051906001600160a01b038216820361018e576020810151906001600160a01b038216820361018e5760400151916001600160a01b038316830361018e57306080525f5160206156175f395f51905f525460ff8160401c1661017f576002600160401b03196001600160401b03821601610129575b5060a05260c05260e05260405161547090816101a78239608051818181610d400152610f5a015260a0518181816102aa015281816103c101528181611c0901528181611e1f0152818161234801526138da015260c0518181816109640152614c85015260e051818181610321015261410d0152f35b6001600160401b0319166001600160401b039081175f5160206156175f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f6100b4565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c80630d27062c146113fc57806310cac648146109eb578063168ce11c1461139d578063172d9c48146111d85780632cd66b6f146113115780633f4ba83a1461123457806340380c61146111d85780634f1ef28614610f1c5780635101edc414610e2c57806352a06c5814610db857806352d1902d14610d265780635c975abb14610ce5578063667b822e14610ca4578063696a9bf4146103a25780636f10483014610c6157806370e771a714610c455780637a35b79614610c0d5780637a9e5e4b14610b525780638456cb5914610a9b5780638fb3603714610a08578063a6071af9146109eb578063ad3cb1cc14610988578063ad5c464814610945578063b46630bc146108e8578063b6fa058814610868578063b826cab11461078a578063bf7e214f14610745578063c346c2f51461069f578063c4d66de814610419578063ce650d39146103e5578063e079e299146103a2578063ea10e2fd14610345578063f066293c146103025763ff0d7c2f0361000e57346102fe5760a06003193601126102fe576101ad61151d565b6024359067ffffffffffffffff821682036102fe576044359167ffffffffffffffff831683036102fe576084359167ffffffffffffffff83116102fe5760606003198460040194360301126102fe5761029d6102695f9461020c612397565b610217818786612d88565b61025f60405160208101903360601b825260643560348201526034815261023f605482611686565b51902091604051926102508461166a565b835287602084015236906121ef565b6040820152612eac565b60405195869485947fe5cbff7900000000000000000000000000000000000000000000000000000000865260048601612308565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f3576102d857005b610018903d805f833e6102eb8183611686565b81019061226e565b6040513d5f823e3d90fd5b5f80fd5b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe5760606003193601126102fe5761035e6114e4565b60443567ffffffffffffffff81116102fe5760409161038461038d923690600401611541565b91600435612d01565b6001600160a01b038351921682526020820152f35b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe5760606003193601126102fe576103fe6114a2565b506104076114e4565b506104106114b8565b5061001861233d565b346102fe5760206003193601126102fe576104326114a2565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460ff8160401c16159167ffffffffffffffff821680159081610697575b600114908161068d575b159081610684575b5061065c57818360017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006104f09516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610607575b506104e36142d3565b6104eb6142d3565b612bc8565b6104f86142d3565b6105006142d3565b6105086142d3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005561057457005b7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00557fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602060405160018152a1005b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055836104da565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b90501584610483565b303b15915061047b565b849150610471565b346102fe5760206003193601126102fe576106b86114a2565b5f60606040516106c7816115e9565b82815282602082015282604082015201526001600160a01b036106e8612ca0565b91165f52602052608060405f20604051610701816115e9565b815491828252600181015460208301908152606060036002840154936040860194855201549301928352604051938452516020840152516040830152516060820152f35b346102fe575f6003193601126102fe5760206001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416604051908152f35b346102fe5760806003193601126102fe576107a36114a2565b6024356044356064359283151584036102fe576107c0363361283d565b8215610840578115610818576001600160a01b036107dc612ca0565b91165f5260205260405f209082825560028201556003810192835415908115610810575b5061080757005b60010155429055005b905084610800565b7f7b3231e1000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fca686b24000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760206003193601126102fe576004355f52600160205263ffffffff60405f2080549067ffffffffffffffff6108d260026108a9600185016117f7565b93015492604051958581889716875260201c16602086015260a0604086015260a085019061147d565b91818116606085015260401c1660808301520390f35b346102fe5760606003193601126102fe5761090161151d565b63ffffffff61090e6114b8565b91165f52600360205260405f206024355f526020526001600160a01b0360405f2091165f52602052602060405f2054604051908152f35b346102fe575f6003193601126102fe5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fe575f6003193601126102fe576109e76040516109a9604082611686565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061147d565b0390f35b346102fe576100186109fc3661156f565b949390939291926118c8565b346102fe575f6003193601126102fe577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005460a01c60ff1615610a935760207f8fb36037000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60205f610a69565b346102fe575f6003193601126102fe57610ab5363361283d565b610abd612397565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346102fe5760206003193601126102fe57610b6b6114a2565b6001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054163303610be157803b15610bac5761001890612bc8565b6001600160a01b03907fc2f31e5e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f068ca9d8000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b346102fe5760206003193601126102fe576001600160a01b03610c2e6114a2565b165f526002602052602060405f2054604051908152f35b346102fe575f6003193601126102fe57602060405161c3508152f35b346102fe57610c6f3661172a565b5050505050610c7c61233d565b7f68b3ecb6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe576109e7610cd1610cb83661172a565b93610cc493919361233d565b610ccc612397565b611f9b565b60405191829160208352602083019061147d565b346102fe575f6003193601126102fe57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346102fe575f6003193601126102fe576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610d905760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe57610dc63661172a565b93919092303303610e04576109e794610cd194610de6604084018461192c565b5093843593610dfe6020870135966040810190611ad0565b96612aa8565b7fcc12cef6000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760e06003193601126102fe57610e456114a2565b50610e4e6114e4565b50610e576114f7565b50610e6061150a565b5060843567ffffffffffffffff81116102fe57610e81903690600401611541565b60a43567ffffffffffffffff81116102fe57610ea4610ebf913690600401611541565b939092610eaf6114ce565b50610eb861233d565b36916116d6565b60208151910120610ece6118ef565b03610ef457610ede9136916116d6565b60208151910120610eed6118ef565b03610ef457005b7f3e3aa254000000000000000000000000000000000000000000000000000000005f5260045ffd5b60406003193601126102fe57610f306114a2565b60243567ffffffffffffffff81116102fe57610f5090369060040161170c565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168030149081156111a3575b50610d9057610f94363361283d565b6001600160a01b038216916040517f52d1902d000000000000000000000000000000000000000000000000000000008152602081600481875afa5f918161116f575b5061100757837f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8592036111445750813b1561111957807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28151156110e8575f8083602061001895519101845af46110e2611ea9565b91614fb4565b5050346110f157005b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7faa1d49a4000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9091506020813d60201161119b575b8161118b60209383611686565b810103126102fe57519085610fd6565b3d915061117e565b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416141583610f85565b346102fe5760606003193601126102fe576111f16114a2565b506111fa6114e4565b506112036114b8565b5061120c61233d565b7ff1c8ae4a000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe575f6003193601126102fe5761124e363361283d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff8116156112e9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b346102fe5760806003193601126102fe5761132a6114a2565b6024359067ffffffffffffffff82116102fe5760a060031983360301126102fe5760443567ffffffffffffffff81116102fe5761136b903690600401611541565b90606435926001600160a01b03841684036102fe576100189461138c61233d565b611394612397565b60040190611cfe565b346102fe5760606003193601126102fe576113b66114a2565b60243567ffffffffffffffff81116102fe5760a060031982360301126102fe57610018916113e26114b8565b916113eb61233d565b6113f3612397565b60040190611b03565b346102fe575f6003193601126102fe576109e760405161141d606082611686565b602881527f326436636362616166386463623664323832653865343939353834646539333760208201527f663937313930363600000000000000000000000000000000000000000000000060408201526040519182916020835260208301905b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b600435906001600160a01b03821682036102fe57565b604435906001600160a01b03821682036102fe57565b60c435906001600160a01b03821682036102fe57565b6024359063ffffffff821682036102fe57565b6044359063ffffffff821682036102fe57565b6064359063ffffffff821682036102fe57565b6004359063ffffffff821682036102fe57565b359063ffffffff821682036102fe57565b9181601f840112156102fe5782359167ffffffffffffffff83116102fe57602083818601950101116102fe57565b9060a06003198301126102fe576004356001600160a01b03811681036102fe579160243563ffffffff811681036102fe579160443563ffffffff811681036102fe57916064359067ffffffffffffffff82116102fe576115d191600401611541565b90916084356001600160a01b03811681036102fe5790565b6080810190811067ffffffffffffffff82111761160557604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60a0810190811067ffffffffffffffff82111761160557604052565b6040810190811067ffffffffffffffff82111761160557604052565b6060810190811067ffffffffffffffff82111761160557604052565b90601f601f19910116810190811067ffffffffffffffff82111761160557604052565b604051906116b8602083611686565b565b67ffffffffffffffff811161160557601f01601f191660200190565b9291926116e2826116ba565b916116f06040519384611686565b8294818452818301116102fe578281602093845f960137010152565b9080601f830112156102fe57816020611727933591016116d6565b90565b9060806003198301126102fe576004356001600160a01b03811681036102fe579160243567ffffffffffffffff81116102fe5760a060031982840301126102fe57600401916044356001600160a01b03811681036102fe57916064359067ffffffffffffffff82116102fe576117a291600401611541565b9091565b90600182811c921680156117ed575b60208310146117c057565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916117b5565b9060405191825f82549261180a846117a6565b8084529360018116908115611873575060011461182f575b506116b892500383611686565b90505f9291925260205f20905f915b8183106118575750509060206116b8928201015f611822565b602091935080600191548385890101520191019091849261183e565b602093506116b89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f611822565b359067ffffffffffffffff821682036102fe57565b505050906118d99250610eb861233d565b602081519101206118e86118ef565b03610ef457565b600c6020604051611901604082611686565b828152017f75637330332d7a6b676d2d30000000000000000000000000000000000000000081522090565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fe570180359067ffffffffffffffff82116102fe576020019181360383136102fe57565b91909160a0818403126102fe576040519061199782611632565b81936119a282611530565b83526119b060208301611530565b602084015260408201359067ffffffffffffffff82116102fe57826119de608094926119fa9486940161170c565b60408601526119ef606082016118b3565b6060860152016118b3565b910152565b818110611a0a575050565b5f81556001016119ff565b60025f9182815560018101611a2a81546117a6565b9081611a37575b50500155565b81601f869311600114611a4e5750555b5f80611a31565b81835260208320611a6a91601f0160051c8101906001016119ff565b8082528160208120915555611a47565b9063ffffffff825116815263ffffffff6020830151166020820152608067ffffffffffffffff81611aba604086015160a0604087015260a086019061147d565b9482606082015116606086015201511691015290565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156102fe570190565b919091611b13604084018461192c565b50917fc0de00000000000000000000000000000000000000000000000000000000babe8084351614611b5c575b6116b8936020611b536040860186611ad0565b9401359261258b565b611b6e611b69368661197d565b612450565b93845f52600160205260405f2094600260405196611b8b88611632565b63ffffffff81548181168a5260201c166020890152611bac600182016117f7565b6040890152015467ffffffffffffffff808216918260608a015260401c168060808901521590811591611cd4575b50611be757509350611b40565b93505050505f526001602052611bff60405f20611a15565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611c58604051611c3b602082611686565b5f815260405190611c4b8261164e565b5f82526020820152612554565b823b156102fe57611cb992611ca75f8094604051968795869485937f9f18077b000000000000000000000000000000000000000000000000000000008552604060048601526044850190611a7a565b9060031984830301602485015261147d565b03925af180156102f357611cca5750565b5f6116b891611686565b905015155f611bda565b601f8260209493601f1993818652868601375f8582860101520116010190565b9392909193611d10604084018461192c565b50938435927fc0de00000000000000000000000000000000000000000000000000000000babe80851614611d75575b50916116b89593918593611d5860406001980186611ad0565b936020611d678189018961192c565b999098351496013592612708565b611d82611b69368761197d565b90815f52600160205260405f2091600260405193611d9f85611632565b63ffffffff8154818116875260201c166020860152611dc0600182016117f7565b6040860152015467ffffffffffffffff8082169182606087015260401c168060808601521590811591611e9f575b50611dfa575050611d3f565b94509450945050505f526001602052611e1560405f20611a15565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156102fe57611e8d5f8094611cb9604051978896879586947f9f18077b000000000000000000000000000000000000000000000000000000008652604060048701526044860190611a7a565b91600319858403016024860152611cde565b905015155f611dee565b3d15611ed3573d90611eba826116ba565b91611ec86040519384611686565b82523d5f602084013e565b606090565b929192611ee4826116ba565b91611ef26040519384611686565b8294818452818301116102fe578281602093845f96015e010152565b9080601f830112156102fe57815161172792602001611ed8565b906020828203126102fe57815167ffffffffffffffff81116102fe576117279201611f0e565b60405190611f5d604083611686565b600482527fdeadc0de000000000000000000000000000000000000000000000000000000006020830152565b611f91611f4e565b6020815191012090565b919061c3505a106121b957604051916001600160a01b0360208401947f52a06c580000000000000000000000000000000000000000000000000000000086521660248401526080604484015263ffffffff611ff583611530565b1660a484015263ffffffff61200c60208401611530565b1660c484015260408201357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1833603018112156102fe578201916020833593019067ffffffffffffffff84116102fe5783360382136102fe575f9788976001600160a01b03879567ffffffffffffffff6120b9608061209e6120f5996121039c60a060e48e01526101448d0191611cde565b97836120ac606083016118b3565b166101048c0152016118b3565b166101248801521660648601527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc858403016084860152611cde565b03601f198101835282611686565b519082305af1612111611ea9565b90156121a7578060208061212a93518301019101611f28565b8051156121925780516020820120612140611f4e565b602081519101201461216a576040516117279161215c8261164e565b600182526020820152612554565b7f3717ba2c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040516121a1602082611686565b5f815290565b50611727604051611c3b602082611686565b7fdaf0ae29000000000000000000000000000000000000000000000000000000005f5260045ffd5b359060ff821682036102fe57565b91906060838203126102fe57604051906122088261166a565b8193612213816121e1565b8352612221602082016121e1565b602084015260408101359167ffffffffffffffff83116102fe576040926119fa920161170c565b519063ffffffff821682036102fe57565b519067ffffffffffffffff821682036102fe57565b6020818303126102fe5780519067ffffffffffffffff82116102fe570160a0818303126102fe57604051916122a283611632565b6122ab82612248565b83526122b960208301612248565b602084015260408201519167ffffffffffffffff83116102fe576122e4608092612300948301611f0e565b60408501526122f560608201612259565b606085015201612259565b608082015290565b90611727949367ffffffffffffffff60809463ffffffff8294168552166020840152166040820152816060820152019061147d565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000160361236f57565b7fe54f8f9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166123c257565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff81116116055760051b60200190565b80511561240f5760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805182101561240f5760209160051b010190565b6040908151906124608383611686565b60018252601f1983015f5b81811061252057505061247d82612402565b5261248781612402565b508151908160208101938101916020855280518093526060820192602060608260051b8501019201935f905b8282106124d6575050506124d0925003601f198101835282611686565b51902090565b91936020612510857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0839460019698030186528851611a7a565b96019201920185939194926124b3565b602090855161252e81611632565b5f81525f838201526060878201525f60608201525f60808201528282870101520161246b565b61172760208251920151916120f56040519384926020840152604080840152606083019061147d565b3560ff811681036102fe5790565b90929160208501600360ff61259f8361257d565b160361262357505050600160ff6125b58561257d565b16036125fb576125cc8360406116b895019061192c565b50906125d8828061192c565b6125e8604085949394018561192c565b939092606060e087013596013596613193565b7fbcdf6cca000000000000000000000000000000000000000000000000000000005f5260045ffd5b600260ff612634839794959761257d565b1603612663575060ff6126468661257d565b166125fb5761265c8560406116b897019061192c565b5093613149565b60ff61266e8261257d565b166126a557509091506126896126838561257d565b60ff1690565b6125fb5761269e8460406116b896019061192c565b50926130c2565b60ff6126b260019261257d565b16036126e0576126c46126838661257d565b6125fb576126d98560406116b897019061192c565b5093612f77565b7f44c1c60d000000000000000000000000000000000000000000000000000000005f5260045ffd5b91979695949793909360208901600360ff6127228361257d565b160361277f5750505050600160ff6127398861257d565b16036125fb576127508660406116b898019061192c565b509061275c828061192c565b61276c604085949394018561192c565b939092606060e0870135960135966133c3565b600260ff6127928398949597969861257d565b16036127c1575060ff6127a48a61257d565b166125fb576127ba8960406116b89b019061192c565b5094613334565b60ff6127d0829593949561257d565b166127ff5750506127e36126838961257d565b6125fb576127f88860406116b89a019061192c565b5093613314565b600191945061280f60ff9161257d565b16036126e0576128216126838961257d565b6125fb576128368860406116b89a019061192c565b50936131ab565b7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054916001600160a01b03831692816004116102fe575f5f9060405f8151966001600160a01b0360208901917fb700961300000000000000000000000000000000000000000000000000000000835216978860248201523060448201527fffffffff000000000000000000000000000000000000000000000000000000008335166064820152606481526128f2608482611686565b828052826020525190895afa612a95575b15612910575b5050505050565b63ffffffff1615612a69577fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055823b156102fe576020925f92836040518096819582947f94c7d7ee000000000000000000000000000000000000000000000000000000008452600484015260406024840152601f19601f6044850192808452808786860137868582860101520116010103925af180156102f357612a59575b507fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054167ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00555f80808080612909565b5f612a6391611686565b5f6129e8565b827f068ca9d8000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b50505f516020518060201c150290612903565b95949392919060208801600360ff612abf8361257d565b1603612af657509091929350600160ff612ad88961257d565b16036125fb57612aef87604061172799019061192c565b5095613dc9565b600260ff612b038361257d565b1603612b32575060ff612b158961257d565b166125fb57612b2b8860406117279a019061192c565b5096613cc5565b60ff612b47829a98979a99969594939961257d565b16612b83575050505050612b5d6126838361257d565b6125fb5761172793612b7c612b718461257d565b93604081019061192c565b50936137ba565b6001919395969850612b9a60ff919893959861257d565b16036126e057612bac6126838861257d565b6125fb57612bc187604061172799019061192c565b50956134f9565b60206001600160a01b037f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9216807fffffffffffffffffffffffff00000000000000000000000000000000000000007ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055604051908152a1565b91908203918211612c7357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0060405160208101907e41cb3e7b0b86ce90b22c42dea05cf50e53bc41e9561326e5a8ff0de494deb7825260208152612cfa604082611686565b5190201690565b92906120f563ffffffff93612d3393604051958694602086019889521660408501526060808501526080840191611cde565b51902090604051305f5260ff600b53826020527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f6040526055600b2060145260405261d6945f5260016034536017601e209190565b9060208301600360ff612d9a8361257d565b1603612dcc5750600160ff612dae8561257d565b16036125fb57612dc58360406116b895019061192c565b50916144f4565b600260ff612dd98361257d565b1603612e08575060ff612deb8461257d565b166125fb57612e018360406116b895019061192c565b5091614422565b905060ff612e158261257d565b16612e435750612e276126838361257d565b6125fb57612e3c8260406116b894019061192c565b5090614399565b60019150612e5260ff9161257d565b16036126e057612e646126838261257d565b6125fb57612e798160406116b893019061192c565b5061432a565b90606060406117279360ff815116845260ff6020820151166020850152015191816040820152019061147d565b61172781516120f560406020850151940151604051948593602085015260408401526060808401526080830190612e7f565b3580151581036102fe5790565b3563ffffffff811681036102fe5790565b3567ffffffffffffffff811681036102fe5790565b919091357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169260148110612f45575050565b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000929350829060140360031b1b161690565b93909192612f8760208301612ede565b612f92575050505050565b6130359167ffffffffffffffff61302f9281612fad87612eeb565b96612fe3612fbd60208301612eeb565b93612fcb604088018861192c565b612fdb60608a949394018a61192c565b93909261490c565b63ffffffff6130006080612ff960608601612efc565b9401612efc565b94816040519b61300f8d611632565b168b521660208a015260408901521660608701521660808501528061192c565b90612f11565b60601c803b156102fe576001600160a01b035f61309395819583604051988997889687957f168ce11c000000000000000000000000000000000000000000000000000000008752166004860152606060248601526064850190611a7a565b9116604483015203925af180156102f3576130b2575b80808080612909565b5f6130bc91611686565b5f6130a9565b916116b893916130d88335936060810190611ad0565b9361258b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156102fe570180359067ffffffffffffffff82116102fe57602001918160051b360383136102fe57565b9082101561240f576117279160051b810190611ad0565b92919061315685806130de565b9590505f5b86811061316b5750505050505050565b61318b6131828261317c85806130de565b90613132565b8686868a61258b565b60010161315b565b906131a66116b898979695949392612eeb565b614948565b969394959290919580613302575b6131c7575b50505050505050565b61323b9467ffffffffffffffff61302f9281856131e661325b97612eeb565b9263ffffffff6132166131fb60208501612eeb565b92613206898061192c565b612fdb60608c949394018c61192c565b9181613230608061322960608801612efc565b9601612efc565b966040519e8f611632565b168d521660208c015260408b01521660608901521660808701528061192c565b60601c91823b156102fe576132bf955f956001600160a01b036132d1819589956040519b8c9a8b998a987f2cd66b6f000000000000000000000000000000000000000000000000000000008a52166004890152608060248901526084880190611a7a565b91600319878403016044880152611cde565b9116606483015203925af180156102f3576132f2575b8080808080806131be565b5f6132fc91611686565b5f6132e7565b5061330f60208601612ede565b6131b9565b92916116b8979695949161332e8335936060810190611ad0565b94612708565b9396959492919098979861334884806130de565b9890505f5b89811061336257505050505050505050509050565b888c89613395575b61338d91835f52846020528a8a8a8a8a8a61332e8a61317c60405f2096806130de565b60010161334d565b50506133a189806130de565b82101561240f576133bb61338d918360051b81019061192c565b90915061336a565b9599509596979392975f146134e5575050813562b0cad081036133eb575b5050505050505050565b63d1cec45e036134bd5761340961302f83602061341295019061192c565b60601c95612f11565b60601c9415613498575050823b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b039290921660048301526024820152905f908290604490829084905af180156102f357613488575b505b5f808080808080806133e1565b5f61349291611686565b5f613479565b82856134b896936134ae6134b394979697612eeb565b6149c9565b614a06565b61347b565b7f14134d32000000000000000000000000000000000000000000000000000000005f5260045ffd5b91949092506131a66116b898969794612eeb565b92919095949360609561351261302f604083018361192c565b871c9661352160208301612ede565b613643575061355661353e60206135378b612eeb565b9a01612eeb565b91613549818061192c565b929091606081019061192c565b9290938a3b156102fe576040519b8c9a8b9a7f0bf1e375000000000000000000000000000000000000000000000000000000008c526001600160a01b031660048c015260248b015263ffffffff1660448a015263ffffffff1660648901526084880161010090526101048801906135cc92611cde565b908682036003190160a48801526135e292611cde565b916001600160a01b031660c48501528382036003190160e485015261360692611cde565b03815a5f948591f180156102f357613633575b506040516001602082015260208152611727604082611686565b5f61363d91611686565b5f613619565b90919761364f81612eeb565b9661365c60208301612eeb565b93613667818061192c565b9290918581016136769161192c565b9261368294919261490c565b61368d828401612efc565b9160800161369a90612efc565b93604051986136a88a611632565b63ffffffff16895263ffffffff166020890152604088015267ffffffffffffffff169086015267ffffffffffffffff16608085015260405195869485947f667b822e0000000000000000000000000000000000000000000000000000000086526001600160a01b0316600486015260248501608090526084850161372b91611a7a565b916001600160a01b0316604485015283820360031901606485015261374f92611cde565b03815a5f948591f19081156102f3575f91613798575b508051156137705790565b7f78f5010f000000000000000000000000000000000000000000000000000000005f5260045ffd5b6137b491503d805f833e6137ac8183611686565b810190611f28565b5f613765565b93929091928035918260201c63ffffffff8085169460401c91169160208801968563ffffffff6137e98a612eeb565b1603613c55575f9585856138cd95610269956040516138078161166a565b8b81528b6020820152606060408201525081158b14613b955750506138aa61383f61383860606138af95018b611ad0565b36906121ef565b935b613859604061385260208d01612efc565b9b01612efc565b9b8b527f3f21ffffffffffffffffffffffffffffffffffffffffffffffffffffffff454160208c20167fc0de00000000000000000000000000000000000000000000000000000000babe1795614a65565b614a65565b604051926138bc8461166a565b835260208301526040820152612eac565b0381836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165af180156102f357613913915f91613b7b575b50612450565b604051602081019160048352604082015260408152613933606082611686565b5190205f52600160205260405f209063ffffffff61395084612eeb565b167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000067ffffffff00000000613986855494612eeb565b60201b16921617178155600181016139a1604084018461192c565b9067ffffffffffffffff8211611605576139bb83546117a6565b601f8111613b40575b505f90601f8311600114613ab4579282600293613a5d96936080965f92613aa9575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555b019267ffffffffffffffff613a2f60608301612efc565b167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000085541617845501612efc565b7fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b1691161790556040516121a1602082611686565b013590505f806139e6565b601f19831691845f5260205f20925f5b818110613b28575093613a5d9693608096936001938360029810613af0575b505050811b019055613a18565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690555f8080613ae3565b91936020600181928787013581550195019201613ac4565b613b6b90845f5260205f20601f850160051c81019160208610613b71575b601f0160051c01906119ff565b5f6139c4565b9091508190613b5e565b613b8f91503d805f833e6102eb8183611686565b5f61390d565b83613c326138aa936120f5613baf60206138af9901612efc565b9167ffffffffffffffff80613bff613bd7613bcc60408a01612efc565b986060810190611ad0565b60405194613be4866115e9565b855282602086019716875282604086019916895236906121ef565b928360608201525194511695511660405195869460208601526040850152606084015260808084015260a0830190612e7f565b60ff60405192613c418461166a565b1682528b6020830152604082015293613841565b7f73c52935000000000000000000000000000000000000000000000000000000005f5260045ffd5b90613c87826123ea565b613c946040519182611686565b828152601f19613ca482946123ea565b01905f5b828110613cb457505050565b806060602080938501015201613ca8565b919493909592613cd588806130de565b969050613ce187613c7d565b975f5b888110613d09575050505050505050506117279150613d016116a9565b908152614b7f565b613d36613d1a8261317c8e806130de565b88613d2c8b855f5260205260405f2090565b888888888d612aa8565b613d40828c61243c565b52613d4b818b61243c565b50613d56818b61243c565b5151613d84577f197f22eb000000000000000000000000000000000000000000000000000000005f5260045ffd5b613d9c613d91828c61243c565b516020815191012090565b613da4611f89565b14613db157600101613ce4565b98975050505050505050613dc5925061243c565b5190565b9394909492919260206060960191613df7613de384612eeb565b613df060408b018b61192c565b9184612d01565b98613e0961302f61010083018361192c565b995f9a8a1c613e1e61302f602085018561192c565b8b1c9a8301359561012084013598898810159b6001600160a01b0387169c8d8514806142cc575b156141fb57505050509160c091613e60898098979695614dc2565b613e6988612eeb565b93613e77608084018461192c565b93909163ffffffff613e98613e8f60a085018561192c565b9890940161257d565b913b1615614000575b5050505050505050613eb5613ebb93612eeb565b50612c66565b9381613f8b575b505082613eff575b5050506117279060405190613ee0602083611686565b815260405190613eef8261164e565b62b0cad082526020820152612554565b813b15613f87576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602481019290925282908290604490829084905af18015613f7c57613f64575b8080613eca565b613f6f828092611686565b613f79575f613f5d565b80fd5b6040513d84823e3d90fd5b8380fd5b833b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0391909116600482015260248101919091525f8160448183875af180156102f357613feb575b80613ec2565b613ff89194505f90611686565b5f925f613fe5565b61417e93949596979950906140f29160ff6140dd6102a89560405199614029602089018c611686565b878b5260208b019761519389396140ad6001600160a01b037ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416966040519d8e987f8420ce990000000000000000000000000000000000000000000000000000000060208b015260248a01523060448a015260a060648a015260c4890191611cde565b917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc878403016084880152611cde565b911660a483015203601f198101875286611686565b60206040519561414d8761413f848201936001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168552604080840152606083019061147d565b03601f198101895288611686565b60405196879383850197518091895e840190838201905f8252519283915e01015f815203601f198101855284611686565b6f67363d3d37363d34f03d5260086018f35f526010805ff59081156141ee57815f9291839260145261d69483526001603453826017601e209551925af1903b02156141ee57613ebb936141d5613eb5928795614a65565b885f52600260205260405f2055935f8080808080613ea1565b63301164255f526004601cfd5b94509491969c9a9b50945060e0919c509695960135151590816142c4575b50156142b157505050908661424d6142478561424161425d9661423c8387614dc2565b612eeb565b94612c66565b97614f18565b6142578886614a58565b926149c9565b806142a0575b50508161428f575b50505061172760405161427f602082611686565b5f815260405190613eef8261164e565b61429892614a06565b5f808061426b565b6142aa9185614a06565b5f80614263565b9250925092955061172796939450614c12565b90505f614219565b5080613e45565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561430257565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b61433a610eb861436a928061192c565b604051903360601b602083015260148252614356603483611686565b906020815191012090602081519101201490565b1561437157565b7f55b77827000000000000000000000000000000000000000000000000000000005f5260045ffd5b606082019160ff6143b560206143af8685611ad0565b0161257d565b1660018114908115614417575b811561440c575b50156143e4576143de6116b893823592611ad0565b91612d88565b7f1dbb3218000000000000000000000000000000000000000000000000000000005f5260045ffd5b60029150145f6143c9565b6003811491506143c2565b91909161442f82806130de565b9390505f5b848110614442575050505050565b60ff61445760206143af8461317c89806130de565b16600181149081156144b2575b501561448a5761448261447b8261317c87806130de565b8385612d88565b600101614434565b7f746a20f8000000000000000000000000000000000000000000000000000000005f5260045ffd5b60039150145f614464565b6020818303126102fe5780519067ffffffffffffffff82116102fe57019080601f830112156102fe57815161172792602001611ed8565b604083019061450661302f838661192c565b60601c9261451a610eb860a087018761192c565b604051907f06fdde030000000000000000000000000000000000000000000000000000000082525f82600481895afa9081156102f357614570925f926148c0575b50906020815191012090602081519101201490565b156148e457614585610eb8608087018761192c565b604051907f95d89b410000000000000000000000000000000000000000000000000000000082525f82600481895afa9081156102f3576145da925f926148c05750906020815191012090602081519101201490565b15614898576145eb60c0860161257d565b6040517f313ce567000000000000000000000000000000000000000000000000000000008152602081600481895afa9081156102f3575f9161485b575b5060ff80911691160361483357610eb891845f52600260205261467360405f2054946146cc8861468f63ffffffff61468261467b6146658c614e2f565b98909561010081019061192c565b908a87612d01565b5093614f18565b881496169788948c61192c565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000006040519260601b16602083015260148252614356603483611686565b9183614823575b50508161481b575b501561476e57505060e08301350361474657803b156102fe576040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526060929092013560248301525f908290604490829084905af180156102f357611cca5750565b7f508df138000000000000000000000000000000000000000000000000000000005f5260045ffd5b9291509260e0810135614746576116b893614808936060614816930135915f52600360205260405f20905f5260205260405f206001600160a01b0384165f5260205260405f206147bf828254614a58565b90556040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230604482015260648101919091529283906084820190565b03601f198101845283611686565b614f47565b90505f6146db565b63ffffffff16149150835f6146d3565b7fe575497b000000000000000000000000000000000000000000000000000000005f5260045ffd5b90506020813d602011614890575b8161487660209383611686565b810103126102fe575160ff811681036102fe5760ff614628565b3d9150614869565b7f072a62fa000000000000000000000000000000000000000000000000000000005f5260045ffd5b6148dd9192503d805f833e6148d58183611686565b8101906144bd565b905f61455b565b7f4a9fab1d000000000000000000000000000000000000000000000000000000005f5260045ffd5b919392611727936149366120f5936040519788966020880152606060408801526080870191611cde565b91601f19858403016060860152611cde565b926134099061495c93989692959798612f11565b60601c94156149ba575050823b156102fe576040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b0390921660048301526024820152905f90829081838160448101611cb9565b82856116b896936134b3939695965b63ffffffff165f52600360205260405f20905f526020526001600160a01b0360405f2091165f52602052614a0260405f20918254612c66565b9055565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000060208201526001600160a01b03909216602483015260448201929092526116b8916148168260648101614808565b91908201809211612c7357565b908115614b7457614afd827f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b831560081b1783811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b60051c9060018201809211612c735760078211614b4c577f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82168203612c735763ffffffff169060051b1b1790565b7f053a4d9c000000000000000000000000000000000000000000000000000000005f5260045ffd5b63ffffffff91501690565b516040519081604081019160208083015280518093526060820192602060608260051b8501019201935f905b828210614bc857505050611727925003601f198101835282611686565b91936020614c02857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa083946001969803018652885161147d565b9601920192018593919492614bab565b9491949390935f9383614c52575b505050505090614c486117279260405192614c3a8461164e565b63d1cec45e845236916116d6565b6020820152612554565b6001600160a01b031673f0000000000000000000000000000000000000018103614d8e5750614cae836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169230908461500e565b15614d8057803b156102fe575f80916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528860048401525af180156102f357614d6b575b50814710614d3b578280926001600160a01b038293165af1614d1c611ea9565b9015614d36575090614c48611727925b91925f8080614c20565b61515b565b60448383477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b614d789193505f90611686565b5f915f614cfc565b505050505050611727611f4e565b91614da794506001600160a01b0390969596169161500e565b15614db857614c4861172792614d2c565b5050611727611f4e565b8115614e2b57614dd1816150ac565b6001600160a01b03614de1612ca0565b91165f52602052600160405f200190815490808210614e0357614a0291612c66565b7fb539f099000000000000000000000000000000000000000000000000000000005f5260045ffd5b5050565b908115614f1157614ec7827f07060605060205040602030205040301060502050303040105050304000000006f8421084210842108cc6318c6db6d54be826fffffffffffffffffffffffffffffffff1060071b831560081b1783811c67ffffffffffffffff1060061b1783811c63ffffffff1060051b1783811c61ffff1060041b1783811c60ff1060031b1792831c1c601f161a1790565b8060051c92836008039160088311612c73578260051b928304602014856008141715612c7357601f19169380850460201490151715612c7357818163ffffffff931b901c931c1690565b5f91508190565b5f9160015b15614f3e575b614f37614f305f93614e2f565b9094614a65565b9291614f1d565b81614f23579050565b905f602091828151910182855af1156102f3575f513d614fab57506001600160a01b0381163b155b614f765750565b6001600160a01b03907f5274afe7000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60011415614f6f565b90614fbf575061515b565b81511580615005575b614fd0575090565b6001600160a01b03907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15614fc8565b92905f9161506d6020946120f5604051938492888401967f23b872dd000000000000000000000000000000000000000000000000000000008852602485016001600160a01b036040929594938160608401971683521660208201520152565b519082855af1903d5f519083615084575b50505090565b919250906150a257506001600160a01b03163b15155b5f808061507e565b600191501461509a565b6001600160a01b036150bc612ca0565b91165f5260205260405f20600181018054825490818110156151505760038401937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600261510b875442612c66565b9201548281029281840414901517011780615127575050505050565b81019081105f0317808210156151485750905b554290555f80808080612909565b90509061513a565b505050600342910155565b80511561516a57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffdfe60806040526102a88038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b604051608d908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea2646970667358221220bca8d305d4ad18104b74d9557d72bb7f598aa8225077008016e98244a161551c64736f6c634300081b0033a26469706673582212209aeadf01ebc34f7083c4f3250e920e2cf256da2c461b931ee1b4304486d02efd64736f6c634300081b0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000ee4ea8d358473f0fcebf0329feed95d56e8c04d7000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000006e3139c1048d2b9d5a4cb1d9f436d7e3b448dacb