0 txs
6k calls
constructor
constructor(address _ibcHandler)
functions
authority
viewfunction authority() view returns (address)
getClientState
viewfunction getClientState(uint32 clientId) view returns (bytes)
getConsensusState
viewfunction getConsensusState(uint32 clientId, uint64 height) view returns (bytes)
getLatestHeight
viewfunction getLatestHeight(uint32 clientId) view returns (uint64)
getTimestampAtHeight
viewfunction getTimestampAtHeight(uint32 clientId, uint64 height) view returns (uint64)
gitRev
purefunction gitRev() pure returns (string)
IBC_HANDLER
viewfunction IBC_HANDLER() view returns (address)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
isFrozen
viewfunction isFrozen(uint32 clientId) view returns (bool)
paused
viewfunction paused() view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
createClient
nonpayablefunction createClient(address, uint32 clientId, bytes clientStateBytes, bytes consensusStateBytes, address) returns (tuple update, string counterpartyChainId)
initialize
nonpayablefunction initialize(address authority)
misbehaviour
nonpayablefunction misbehaviour(address, uint32 clientId, bytes clientMessageBytes, address)
pause
nonpayablefunction pause()
setAuthority
nonpayablefunction setAuthority(address newAuthority)
unpause
nonpayablefunction unpause()
updateClient
nonpayablefunction updateClient(address, uint32 clientId, bytes clientMessageBytes, address) returns (tuple)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
verifyMembership
nonpayablefunction verifyMembership(uint32 clientId, uint64 height, bytes proof, bytes path, bytes value) returns (bool)
verifyNonMembership
nonpayablefunction verifyNonMembership(uint32 clientId, uint64 height, bytes proof, bytes path) returns (bool)
events
AuthorityUpdated
event AuthorityUpdated(address authority)
CreateLensClient
event CreateLensClient(uint32 indexed clientId, uint32 indexed l1ClientId, uint32 indexed l2ClientId, string l2ChainId)
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()
ErrClientFrozen
error ErrClientFrozen()
ErrInvalidInitialConsensusState
error ErrInvalidInitialConsensusState()
ErrInvalidL1Proof
error ErrInvalidL1Proof()
ErrInvalidMisbehaviour
error ErrInvalidMisbehaviour()
ErrNotIBC
error ErrNotIBC()
ExpectedPause
error ExpectedPause()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c03461012c57601f613ebf38819003918201601f19168301916001600160401b038311848410176101305780849260209460405283398101031261012c57516001600160a01b038116810361012c57306080525f516020613e9f5f395f51905f525460ff8160401c1661011d576002600160401b03196001600160401b038216016100c7575b5060a052604051613d5a908161014582396080518181816107600152610952015260a051818181610d1e015281816115e101528181611fef015261241f0152f35b6001600160401b0319166001600160401b039081175f516020613e9f5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610086565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630d27062c146101745780632886a3a31461016f578063384a3c301461016a5780633f4ba83a146101655780633fd413de146101605780634f1ef2861461015b57806352d1902d1461015657806355393174146101515780635c975abb1461014c5780636d6f2120146101475780637a9e5e4b146101425780638456cb591461013d5780638f2a4930146101385780638fb3603714610133578063a9f9396e1461012e578063ad3cb1cc14610129578063b4b5250814610124578063b6719c891461011f578063bf7e214f1461011a578063c4d66de814610115578063e079e299146101105763e9946fc31461010b575f80fd5b611605565b6115b5565b61134e565b6112fc565b6112c3565b611276565b6111f2565b611155565b6110c2565b610c94565b610bae565b610ad5565b610a81565b610a40565b6109f5565b61092b565b6106ff565b6104b1565b6103b7565b610323565b610250565b6101ac565b5f91031261018357565b5f80fd5b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b34610183575f600319360112610183576102316040516101cd60608261066c565b602881527f326436636362616166386463623664323832653865343939353834646539333760208201527f66393731393036360000000000000000000000000000000000000000000000006040820152604051918291602083526020830190610187565b0390f35b63ffffffff81160361018357565b359061024e82610235565b565b346101835760206003193601126101835763ffffffff60043561027281610235565b165f525f602052602067ffffffffffffffff600160405f20015460401c16604051908152f35b73ffffffffffffffffffffffffffffffffffffffff81160361018357565b9181601f840112156101835782359167ffffffffffffffff8311610183576020838186019501011161018357565b80610313608092610320959467ffffffffffffffff604080928051855260208101516020860152015116910152565b8160608201520190610187565b90565b346101835760a06003193601126101835760043561034081610298565b6024359061034d82610235565b60443567ffffffffffffffff81116101835761036d9036906004016102b6565b926064359367ffffffffffffffff8511610183576103926103a79536906004016102b6565b939092608435956103a287610298565b611a8e565b90610231604051928392836102e4565b34610183575f600319360112610183576103d1363361214f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff81161561046c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b7f8dfc202b000000000000000000000000000000000000000000000000000000005f5260045ffd5b67ffffffffffffffff81160361018357565b359061024e82610494565b34610183576080600319360112610183576004356104ce81610235565b602435906104db82610494565b60443567ffffffffffffffff8111610183576104fb9036906004016102b6565b5060643567ffffffffffffffff81116101835761051c9036906004016102b6565b909161052661203f565b61052f846123bd565b6105be57610231946105a7600161057b63ffffffff6105ac981693845f525f602052600260405f200154945f528260205260405f209067ffffffffffffffff165f5260205260405f2090565b015491610599610589611c62565b9560405197889360208501611caa565b03601f19810186528561066c565b612572565b60405190151581529081906020820190565b7fb3e34670000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761062f57604052565b6105e6565b60a0810190811067ffffffffffffffff82111761062f57604052565b6040810190811067ffffffffffffffff82111761062f57604052565b90601f601f19910116810190811067ffffffffffffffff82111761062f57604052565b6040519061024e60608361066c565b6040519061024e60408361066c565b67ffffffffffffffff811161062f57601f01601f191660200190565b9291926106d5826106ad565b916106e3604051938461066c565b829481845281830111610183578281602093845f960137010152565b60406003193601126101835760043561071781610298565b60243567ffffffffffffffff81116101835736602382011215610183576107489036906024816004013591016106c9565b9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168030149081156108e9575b506108c15761079a363361214f565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381610890575b5061082f577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8303610863576108619250612b5b565b005b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b6108b391945060203d6020116108ba575b6108ab818361066c565b8101906125ce565b925f6107e8565b503d6108a1565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61078b565b34610183575f6003193601126101835773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036108c15760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b6080600319820112610183576004356109ba81610298565b916024356109c781610235565b916044359067ffffffffffffffff8211610183576109e7916004016102b6565b909160643561032081610298565b3461018357610a03366109a2565b5050505050610a10611fd8565b610a1861203f565b7fb1333bc8000000000000000000000000000000000000000000000000000000005f5260045ffd5b34610183575f60031936011261018357602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b346101835760206003193601126101835763ffffffff600435610aa381610235565b165f525f602052610231610ac1610abc60405f20611ceb565b6125dd565b604051918291602083526020830190610187565b3461018357602060031936011261018357600435610af281610298565b73ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054163303610b8257803b15610b40576108619061264e565b73ffffffffffffffffffffffffffffffffffffffff907fc2f31e5e000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f068ca9d8000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b34610183575f60031936011261018357610bc8363361214f565b610bd061203f565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416177fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b61024e90929192606081019367ffffffffffffffff604080928051855260208101516020860152015116910152565b3461018357610ca2366109a2565b50509150610cae611653565b50610cb7611fd8565b610cbf61203f565b610cd68163ffffffff165f525f60205260405f2090565b6001810180546040517fdea5a72300000000000000000000000000000000000000000000000000000000815263ffffffff8216600482018190529593909290916020846024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa93841561108c575f94611091575b50610d6d85611671565b93610d7b604087018761167b565b9260201c63ffffffff16956020880196610d9488611671565b610d9d916126f9565b99604051809b6020820190610db59160209181520190565b03601f1981018c52610dc7908c61066c565b606089019a610dd68c8b61167b565b3690610de1926106c9565b805190602001209060405180926020820190610e009160209181520190565b03601f1981018352610e12908361066c565b6040517fa9f9396e0000000000000000000000000000000000000000000000000000000081529687958695610e4a9560048801611e48565b039173ffffffffffffffffffffffffffffffffffffffff1691815a6020945f91f190811561108c575f9161105d575b501561103557610faf610fa9610fa4610fb494610f8e610f85610f6a9a6020610f10988b6102319f610eae90610fd69f61167b565b5091610eb982611671565b67ffffffffffffffff610ee8610edb845467ffffffffffffffff9060401c1690565b67ffffffffffffffff1690565b911611610fe2575b50610f2c90610f16610f108663ffffffff165f52600160205260405f2090565b91611671565b67ffffffffffffffff165f5260205260405f2090565b9d8e610f3783611671565b67ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b013560018d015563ffffffff165f52600260205260405f2090565b610f1689611671565b610f974261196d565b8155600143910155611ceb565b612092565b95611e9c565b6120a5565b90610fbd61068f565b938452602084015267ffffffffffffffff166040830152565b60405191829182610c65565b610fee61102e92611671565b7fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055565b8b5f610ef0565b7f5b39c7c1000000000000000000000000000000000000000000000000000000005f5260045ffd5b61107f915060203d602011611085575b611077818361066c565b810190611e30565b5f610e79565b503d61106d565b611e25565b6110b491945060203d6020116110bb575b6110ac818361066c565b810190611e10565b925f610d63565b503d6110a2565b34610183575f600319360112610183577ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005460a01c60ff161561114d5760207f8fb36037000000000000000000000000000000000000000000000000000000005b7fffffffff0000000000000000000000000000000000000000000000000000000060405191168152f35b60205f611123565b346101835760a06003193601126101835760043561117281610235565b60243561117e81610494565b60443567ffffffffffffffff81116101835761119e9036906004016102b6565b91909260643567ffffffffffffffff8111610183576111c19036906004016102b6565b906084359467ffffffffffffffff861161018357610231966111ea6105ac9736906004016102b6565b969095611ec4565b34610183575f6003193601126101835761023160405161121360408261066c565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610187565b60031960409101126101835760043561126981610235565b9060243561032081610494565b3461018357610231610ac16112be6112b963ffffffff61129536611251565b91165f52600160205260405f209067ffffffffffffffff165f5260205260405f2090565b611e9c565b612740565b346101835760206003193601126101835760206112f26004356112e581610235565b6112ed61203f565b6123bd565b6040519015158152f35b34610183575f60031936011261018357602073ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416604051908152f35b346101835760206003193601126101835760043561136b81610298565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549067ffffffffffffffff6113ba60ff604085901c16156113ac565b1590565b9367ffffffffffffffff1690565b16801590816115ad575b60011490816115a3575b15908161159a575b5061157257611457908261144e60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6114f757611f3f565b61145d57005b6114c87fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b61156d680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b611f3f565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f6113d6565b303b1591506113ce565b8391506113c4565b34610183575f60031936011261018357602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461018357602067ffffffffffffffff61164963ffffffff61162636611251565b91165f526001845260405f209067ffffffffffffffff165f5260205260405f2090565b5416604051908152f35b6040519061166082610613565b5f6040838281528260208201520152565b3561032081610494565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610183570180359067ffffffffffffffff82116101835760200191813603831361018357565b90600182811c92168015611713575b60208310146116e657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f16916116db565b601f821161172a57505050565b5f5260205f20906020601f840160051c83019310611762575b601f0160051c01905b818110611757575050565b5f815560010161174c565b9091508190611743565b3561032081610235565b90611781818061167b565b9067ffffffffffffffff821161062f576117a58261179f86546116cc565b8661171d565b5f90601f83116001146118885782608093600295936117d8935f9261187d575b50505f198260011b9260031b1c19161790565b84555b611876600185016118226117f16020850161176c565b829063ffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000825416179055565b61186a6118316040850161176c565b82547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff1660209190911b67ffffffff0000000016178255565b610fee60608401611671565b0135910155565b013590505f806117c5565b601f1983169161189b865f5260205f2090565b925f5b8181106118df575092600192859260809660029896106118c6575b505050811b0184556117db565b5f1960f88560031b161c199101351690555f80806118b9565b9193602060018192878701358155019501920161189e565b906020600191611876813561190b81610494565b859067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b90633b9aca00820291808304633b9aca00149015171561198957565b611940565b8181029291811591840414171561198957565b601f8260209493601f1993818652868601375f8582860101520116010190565b9160206103209381815201916119a1565b91909160a08184031261018357604051906119ec82610634565b8193813567ffffffffffffffff81116101835782019181601f8401121561018357611a216080939283602086953591016106c9565b8452611a2f60208201610243565b6020850152611a4060408201610243565b6040850152611a51606082016104a6565b60608501520135910152565b919082604091031261018357604051611a7581610650565b60208082948035611a8581610494565b84520135910152565b5093509194935050611a9e611653565b50611aa7611fd8565b611aaf61203f565b606081019067ffffffffffffffff611ac683611671565b16158015611c4f575b611c2757611c1a611c209284611afe84611af96103209863ffffffff165f525f60205260405f2090565b611776565b611b2b88611b26611b1d8463ffffffff165f52600160205260405f2090565b610f1686611671565b6118f7565b611b74611b374261196d565b611b3f61069e565b908152436020820152611b63611b1d8463ffffffff165f52600260205260405f2090565b906020600191805184550151910155565b611b806020850161176c565b90611bd77f349a1a93f38692eaae48ffbdb3739dd4d706d84c77bee098e211ed96b146227f63ffffffff611bb66040890161176c565b611bc0898061167b565b8380604097939751958695169916971695836119c1565b0390a4611bf8610f10610faf611bf0610fa436886119d2565b993690611a5d565b90611c0161068f565b978852602088015267ffffffffffffffff166040870152565b8061167b565b36916106c9565b7f920ed63f000000000000000000000000000000000000000000000000000000005f5260045ffd5b50611c5c610edb86611671565b15611acf565b60405190611c7160408361066c565b600482527f7761736d000000000000000000000000000000000000000000000000000000006020830152565b908092918237015f815290565b909280926022947f0300000000000000000000000000000000000000000000000000000000000000845260018401525f60218401528483013701015f815290565b90604051611cf881610634565b80926040515f8254611d09816116cc565b8084529060018116908115611dd05750600114611d96575b509181611d34600293608095038261066c565b8452611d8f611d7e6001830154611d5e611d518263ffffffff1690565b63ffffffff166020890152565b63ffffffff602082901c16604088015260401c67ffffffffffffffff1690565b67ffffffffffffffff166060860152565b0154910152565b5f848152602081209092505b818310611db6575050810160200181611d21565b600181602092949394548385880101520191019190611da2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660208086019190915291151560051b84019091019150829050611d21565b90816020910312610183575161032081610298565b6040513d5f823e3d90fd5b90816020910312610183575180151581036101835790565b949192610320969467ffffffffffffffff611e8e9563ffffffff611e809516895216602088015260a0604088015260a08701916119a1565b908482036060860152610187565b916080818403910152610187565b90604051611ea981610650565b60206001829467ffffffffffffffff81541684520154910152565b969594925090611ed261203f565b611edb876123bd565b6105be57611f316001611f2363ffffffff611f369a1694855f525f602052600260405f200154955f528260205260405f209067ffffffffffffffff165f5260205260405f2090565b015492610599610589611c62565b612cb9565b6113a881612736565b611f5890611f4b612d95565b611f53612d95565b61264e565b611f60612d95565b611f68612d95565b611f70612d95565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054167fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330055565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361201757565b7fe54f8f9d000000000000000000000000000000000000000000000000000000005f5260045ffd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300541661206a57565b7fd93c0665000000000000000000000000000000000000000000000000000000005f5260045ffd5b61209b906125dd565b6020815191012090565b61209b90612740565b906004116101835790600490565b919091357fffffffff00000000000000000000000000000000000000000000000000000000811692600481106120f0575050565b7fffffffff00000000000000000000000000000000000000000000000000000000929350829060040360031b1b161690565b60409073ffffffffffffffffffffffffffffffffffffffff610320959316815281602082015201916119a1565b6121ac6121907ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff1690565b6121a361219d855f6120ae565b906120bc565b9083309161276e565b90156121b757505050565b63ffffffff161561237c57612244740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055565b6122a16122886122887ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b91823b15610183576122e7925f808094604051968795869485937f94c7d7ee00000000000000000000000000000000000000000000000000000000855260048501612122565b03925af1801561108c57612362575b5061024e7fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff7ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0054167ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055565b806123705f6123769361066c565b80610179565b5f6122f6565b7f068ca9d8000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff1660045260245ffd5b60016123d96123e49263ffffffff165f525f60205260405f2090565b015463ffffffff1690565b6040517fdea5a72300000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152906020826024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa91821561108c5773ffffffffffffffffffffffffffffffffffffffff926020926124c4925f926124f3575b506040519485809481937fb6719c890000000000000000000000000000000000000000000000000000000083526004830191909163ffffffff6020820193169052565b0392165afa90811561108c575f916124da575090565b610320915060203d60201161108557611077818361066c565b61250b919250843d86116110bb576110ac818361066c565b905f612481565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8181360301821215610183570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b8135939291368190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa101851215610183576125bc946125b56020830183612512565b9101612834565b60128110156125c9571590565b612545565b90816020910312610183575190565b61032061262b9180519063ffffffff6020820151169063ffffffff60408201511690608067ffffffffffffffff6060830151169101519160405196879560a0602088015260c0870190610187565b9360408601526060850152608084015260a083015203601f19810183528261066c565b602073ffffffffffffffffffffffffffffffffffffffff7f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9216807fffffffffffffffffffffffff00000000000000000000000000000000000000007ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a005416177ff3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a0055604051908152a1565b9067ffffffffffffffff6040519163ffffffff6020840194600186521660408401521660608201526060815261273060808261066c565b51902090565b600911156125c957565b602067ffffffffffffffff82511691015160405191602083015260408201526040815261032060608261066c565b5f9060409295939582967fffffffff00000000000000000000000000000000000000000000000000000000849773ffffffffffffffffffffffffffffffffffffffff8751938160208601967fb7009613000000000000000000000000000000000000000000000000000000008852166024860152166044840152166064820152606481526127fd60848261066c565b8380528360205251915afa61280e57565b9150505f51906020518060201c150290565b600511156125c957565b600611156125c957565b9391929361284181612dec565b61284d81959295612820565b612b5057836128649261285e612e46565b90612ec4565b61286d81612736565b80612a00575061287c81613170565b61288881969296612820565b6129f6576128b892610599926128b361289f613241565b926040519586916020830160209181520190565b61326b565b6128c18161282a565b806128d55750036128d0575f90565b600990565b8092506128e2915061282a565b600181036128f05750600490565b6128f98161282a565b600281036129075750600590565b6129108161282a565b6003810361291e5750600690565b6129278161282a565b600481036129355750600790565b8061294160059261282a565b146129f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f766572696679436861696e65644e6f6e4d656d626572736869703a206e6f6e2060448201527f65786861757374697665207061747465726e206d61746368696e67206f6e205660648201527f65726966794e6f6e4578697374656e63654572726f7200000000000000000000608482015260a490fd5b600890565b5050505050600390565b9350505050612a0e81612736565b60018103612a1c5750600a90565b612a2581612736565b60038103612a335750600c90565b612a3c81612736565b60048103612a4a5750600d90565b612a5381612736565b60058103612a615750600e90565b612a6a81612736565b60068103612a785750600f90565b612a8181612736565b60078103612a8f5750601090565b80612a9b600892612736565b14612b4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f766572696679436861696e65644e6f6e4d656d626572736869703a206e6f6e2060448201527f65786861757374697665207061747465726e206d61746368696e67206f6e205660648201527f65726966794e6f6e4578697374656e63654572726f7200000000000000000000608482015260a490fd5b601190565b505050505050600390565b90813b15612c4a5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115612c1957612c16916132e1565b50565b505034612c2257565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b91949093612ccf612cca8480612512565b613170565b612cdb81969296612820565b612d8957612d0792612d01612cf08680612512565b93612cf9612e46565b9236916106c9565b9261326b565b612d108161282a565b80612d7b575091612d5f9391612d2d612d4c946020810190612512565b612d5a612d38613241565b926040519687916020830160209181520190565b03601f19810187528661066c565b61343d565b612d688161282a565b80612d7257505f90565b61032090613325565b925050506103209150613325565b50505050505050600290565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615612dc457565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b60208101612e02612dfd8284612512565b6134e1565b15612e3957506040810190612e1a612dfd8383612512565b15612e285750505f90600490565b612e3591612cca91612512565b9091565b612cca90612e3592612512565b612e4e611653565b50604051612e5b81610613565b6021815260046020820152600c604082015290565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610183570180359067ffffffffffffffff821161018357602001918160051b3603831361018357565b9092916020820190612ed9611c1a8385612512565b9190946040850195612eee611c1a8888612512565b949093612f016113a8612dfd898b612512565b6130da575b612f166113a8612dfd8b8b612512565b613064575b50801593848061305c575b61304d5785159586159182613036575b50506130285783159182613012575b505090506130075715612f98575050918183612f82612f70612f7a612f706113a897612f8a99612512565b6060810190612e70565b949093612512565b9390506137f4565b612f93575b5f90565b600690565b90929015612fd25750918183612fbd612f70612f7a612f706113a897612fc599612512565b939050613789565b612fcd575f90565b600790565b92612ffd93612ff5612f70612fed612f706113a89787612512565b939095612512565b939092613684565b15612f8f57600890565b505050505050600590565b61301e92505f9361355b565b1315805f80612f45565b505050505050505050600490565b5f925090613044918661355b565b12155f80612f36565b50505050505050505050600390565b508515612f26565b6130b990886130738b82612512565b918c6130b38d6130ab6130a161309761308f611c1a858a612512565b949098612512565b602081019061167b565b96909236916106c9565b9436916106c9565b9361343d565b6130c28161282a565b6130cc575f612f1b565b505050505050505050600290565b6131046130e7888a612512565b89838d6130b38c6130ab6130a161309761308f611c1a858a612512565b61310d8161282a565b15612f065750505050505050505050600190565b600311156125c957565b919081101561316b5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc181360301821215610183570190565b612c8c565b6040810161317e818361167b565b905015613238576131926131b3918361167b565b9061319d848061167b565b906131ab602087018761167b565b9490936138b7565b9190916131bf81613121565b61322f57606081016131d18183612e70565b9190505f925b8284106131e75750505050905f90565b9091929361320890613203866131fd8686612e70565b9061312b565b613980565b94909461321481613121565b613223576001019291906131d7565b50505050505f90600390565b50505f90600290565b50505f90600190565b613249611653565b5060405161325681610613565b60208152600160208201526001604082015290565b92909161327b611c20858061167b565b602081519101209060208151910120036132d95761329f611c20602085018561167b565b602081519101209060208151910120036132d2576132bc916139e3565b6132c581612820565b6132cd575f90565b600390565b5050600290565b505050600190565b5f8061032093602081519101845af43d1561331d573d91613301836106ad565b9261330f604051948561066c565b83523d5f602085013e613ae5565b606091613ae5565b61332e8161282a565b6001810361333c5750600390565b6133458161282a565b600281036133535750600490565b61335c8161282a565b6003810361336a5750600590565b6133738161282a565b600481036133815750600690565b8061338d60059261282a565b14612fcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f766572696679436861696e65644d656d626572736869703a206e6f6e2065786860448201527f61757374697665207061747465726e206d61746368696e67206f6e205665726960648201527f66794578697374656e63654572726f7200000000000000000000000000000000608482015260a490fd5b929390919361344f611c20858061167b565b602081519101209060208151910120036134d857613473611c20602085018561167b565b602081519101209060208151910120036134d05761349190826139e3565b61349a81612820565b6134c9576134a790613170565b6134b081612820565b6134c257036134bd575f90565b600590565b5050600490565b5050600390565b505050600290565b50505050600190565b6134eb818061167b565b9050613530576134fe602082018261167b565b905061353057613511604082018261167b565b905061353057806060613525920190612e70565b9050612f8f57600190565b505f90565b90815181101561316b570160200190565b901561316b5790565b9082101561316b570190565b805180841190841802831892918391905f5b838110613591575050511161358a5711613585575f90565b5f1990565b5050600190565b909192506135c86135a28285613535565b517fff000000000000000000000000000000000000000000000000000000000000001690565b7fff000000000000000000000000000000000000000000000000000000000000006136456136206135fa85898861354f565b357fff000000000000000000000000000000000000000000000000000000000000001690565b7fff000000000000000000000000000000000000000000000000000000000000001690565b91168181101561365b57505050505050505f1990565b1161366c576001019084929161356d565b5050505050600190565b905f19820191821161198957565b9293909161369181613676565b9261369b83613676565b935b6136ae611c20611c1a83868661312b565b602081519101206136c6611c20611c1a88888c61312b565b602081519101201480613752575b61373a576136fb6113a86136e983868661312b565b6136f488888c61312b565b9089613b88565b61372f5761370d926113a89287613789565b6137275761371e936113a8936137f4565b612f8f57600190565b505050505f90565b505050505050505f90565b61374661374c91613676565b94613676565b9361369d565b50613764611c2061309783868661312b565b6020815191012061377c611c2061309788888c61312b565b60208151910120146136d4565b8051906020810151820190818311611989576040810151830180931161198957511560011715611989575f5b8581106137c757505050505050600190565b6137dd5f84846137d8858a8a61312b565b613bdc565b156137ea576001016137b5565b5050505050505f90565b9190918051156001171561198957602081015160408201519151925f5b8681106138245750505050505050600190565b6138358585856137d885878c61312b565b1561372f57600101613811565b9061384c826106ad565b613859604051918261066c565b828152601f1961386982946106ad565b0190602036910137565b805191908290602001825e015f815290565b8593836138a39260209a9997956138b09995823701905f8252613873565b91823701905f8252613873565b9081520190565b9493909192938415613973578015613966575f6020916138de6138d988613c3d565b613842565b936138e98589613c5c565b506138f960405180938193611c9d565b039060025afa1561108c5760209461393b61395594613949935f978851926139226138d9613c21565b9261392c84613c9c565b506040519889978d8901613885565b03601f19810183528261066c565b60405191828092613873565b039060025afa1561108c575f805191565b5050505050505f90600290565b5050505050505f90600190565b6139556139a661394960205f9481809761399a838061167b565b9690938381019061167b565b80929188604051998a9787890137860192858401526040830137010186838201520301601f19810183528261066c565b9190820180921161198957565b90604082016139f2818461167b565b9050156132d957613a306135fa613a2a7fff00000000000000000000000000000000000000000000000000000000000000938661167b565b90613546565b166132d257613a4560408201518251906139d6565b6060830192613a548482612e70565b9490505f5b858110613a6a575050505050505f90565b613a78816131fd8486612e70565b84613a83828061167b565b9050602088015111918215613ac9575b8215613ab3575b5050613aa857600101613a59565b505050505050600290565b613abf9192508061167b565b905011845f613a9a565b9150613ade6136206135fa613a2a858061167b565b1591613a93565b90613b225750805115613afa57805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b81511580613b75575b613b33575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b15613b2b565b600211156125c957565b9190613b949083613cac565b91909260028310156125c9578261372757613bba91613bb291613cac565b919092613b7e565b613bc381613b7e565b613bd65760018201809211611989571490565b50505f90565b9190613be8838061167b565b905010908115613c0c575b50613bd657806020613c0692019061167b565b90501490565b9050613c18828061167b565b9050115f613bf3565b60015f805b613c2e575090565b60019091019060071c80613c26565b60019060071c805b613c4d575090565b60019091019060071c80613c45565b91909160205f9301607f8216915b60071c918215613c90576001918291608017815301930190607f81169093909193613c6a565b90600193949250530190565b5f91908290602090810190613c90565b5f5b60028110613cc0575050505f90600190565b613ccb82518261198e565b6020830151810180821161198957604084015182018092116119895782600103906001821161198957600192613d06613d0d9387519061198e565b9187613bdc565b151514613d1c57600101613cae565b915050905f9056fea26469706673582212200d16953f84a86a0c69ece90b262bdef9b19f18d59a134583d61ddad036f2215664736f6c634300081b0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00000000000000000000000000ee4ea8d358473f0fcebf0329feed95d56e8c04d7