459 txs
456 calls
constructor
No constructor.
functions
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
handleConsensus
nonpayablefunction handleConsensus(address host, bytes proof)
handleGetRequestTimeouts
nonpayablefunction handleGetRequestTimeouts(address host, tuple message)
handleGetResponses
nonpayablefunction handleGetResponses(address host, tuple message)
handlePostRequests
nonpayablefunction handlePostRequests(address host, tuple request)
handlePostRequestTimeouts
nonpayablefunction handlePostRequestTimeouts(address host, tuple message)
handlePostResponses
nonpayablefunction handlePostResponses(address host, tuple response)
handlePostResponseTimeouts
nonpayablefunction handlePostResponseTimeouts(address host, tuple message)
events
No events.
errors
ChallengePeriodNotElapsed
error ChallengePeriodNotElapsed()
ConsensusClientExpired
error ConsensusClientExpired()
DuplicateMessage
error DuplicateMessage()
HostFrozen
error HostFrozen()
InvalidMessageDestination
error InvalidMessageDestination()
InvalidProof
error InvalidProof()
MessageNotTimedOut
error MessageNotTimedOut()
MessageTimedOut
error MessageTimedOut()
StateCommitmentNotFound
error StateCommitmentNotFound()
UnknownMessage
error UnknownMessage()
creation bytecode
0x608060405234801561001057600080fd5b506154b7806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80639d38eb351161005b5780639d38eb35146100ef578063bb1689be14610102578063c96bdc1614610115578063e407f86b1461012857600080fd5b806301ffc9a71461008d578063089b174c146100b4578063191c872b146100c957806372becccd146100dc575b600080fd5b6100a061009b366004613ff8565b61013b565b604051901515815260200160405180910390f35b6100c76100c2366004614052565b610172565b005b6100c76100d7366004614052565b61072b565b6100c76100ea3660046140b3565b610cd9565b6100c76100fd3660046140b3565b61136a565b6100c76101103660046140f8565b611964565b6100c76101233660046140b3565b611e22565b6100c7610136366004614052565b612401565b60006001600160e01b03198216631a1ec69760e21b148061016c57506301ffc9a760e01b6001600160e01b03198316145b92915050565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d7919061417c565b905060018160038111156101ed576101ed61419d565b148061020a575060038160038111156102085761020861419d565b145b1561022857604051631c6d5f7760e31b815260040160405180910390fd5b60408051631a880a9360e01b8152602085013560048201529084013560248201526000906001600160a01b03861690631a880a93906044016020604051808303816000875af115801561027f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a391906141b3565b6102ad90426141e2565b90506000856001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031391906141b3565b9050801580159061032357508181115b156103415760405163048c969960e01b815260040160405180910390fd5b6040805163a70a8c4760e01b8152602087013560048201529086013560248201526000906001600160a01b0388169063a70a8c47906044016060604051808303816000875af1158015610398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103bc9190614304565b60408101519091506103e1576040516353ae552b60e11b815260040160405180910390fd5b60006103ed8780614320565b9050905060005b818110156107205760006104088980614320565b8381811061041857610418614369565b905060200281019061042a919061437f565b61043390614532565b8451909150610445906103e890614554565b61044e826129b0565b6001600160401b03161115610476576040516348e8dd2f60e11b815260040160405180910390fd5b6000610481826129e2565b604051630da2fd1960e21b8152600481018290529091506000906001600160a01b038d169063368bf464906024016040805180830381865afa1580156104cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ef9190614568565b60208101519091506001600160a01b031661051d5760405163f058bfd960e01b815260040160405180910390fd5b604080516001808252818301909252600091816020015b60608152602001906001900390816105345790505090506040518060400160405280600f81526020016e52657175657374526563656970747360881b8152508360405160200161058691815260200190565b60408051601f19818403018152908290526105a492916020016145c4565b6040516020818303038152906040528186815181106105c5576105c5614369565b6020026020010181905250600073449d18b3e5c65c96d1f289559af60417564d018b631475ff4589604001518f80606001906106019190614320565b866040518563ffffffff1660e01b8152600401610621949392919061469d565b600060405180830381865af415801561063e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261066691908101906147bc565b60008151811061067857610678614369565b602002602001015190508060200151516000146106a8576040516309bde33960e01b815260040160405180910390fd5b6040516325a377d560e11b81526001600160a01b038f1690634b46efaa906106d890889087908990600401614968565b600060405180830381600087803b1580156106f257600080fd5b505af1158015610706573d6000803e3d6000fd5b50505050505050505080610719906149ab565b90506103f4565b505050505050505050565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561076c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610790919061417c565b905060018160038111156107a6576107a661419d565b14806107c3575060038160038111156107c1576107c161419d565b145b156107e157604051631c6d5f7760e31b815260040160405180910390fd5b60408051631a880a9360e01b8152602085013560048201529084013560248201526000906001600160a01b03861690631a880a93906044016020604051808303816000875af1158015610838573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085c91906141b3565b61086690426141e2565b90506000856001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cc91906141b3565b905080158015906108dc57508181115b156108fa5760405163048c969960e01b815260040160405180910390fd5b6040805163a70a8c4760e01b8152602087013560048201529086013560248201526000906001600160a01b0388169063a70a8c47906044016060604051808303816000875af1158015610951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109759190614304565b604081015190915061099a576040516353ae552b60e11b815260040160405180910390fd5b60006109a68780614320565b9050905060005b818110156107205760006109c18980614320565b838181106109d1576109d1614369565b90506020028101906109e391906149c4565b6109ec90614b6c565b84519091506109fe906103e890614554565b610a07826129fb565b6001600160401b03161115610a2f576040516348e8dd2f60e11b815260040160405180910390fd5b6000610a3a82612a28565b604051630da2fd1960e21b8152600481018290529091506000906001600160a01b038d169063368bf464906024016040805180830381865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190614568565b60208101519091506001600160a01b0316610ad65760405163f058bfd960e01b815260040160405180910390fd5b604080516001808252818301909252600091816020015b6060815260200190600190039081610aed5790505090506040518060400160405280600f81526020016e52657175657374526563656970747360881b81525083604051602001610b3f91815260200190565b60408051601f1981840301815290829052610b5d92916020016145c4565b604051602081830303815290604052818681518110610b7e57610b7e614369565b6020026020010181905250600073449d18b3e5c65c96d1f289559af60417564d018b631475ff4589604001518f8060600190610bba9190614320565b866040518563ffffffff1660e01b8152600401610bda949392919061469d565b600060405180830381865af4158015610bf7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c1f91908101906147bc565b600081518110610c3157610c31614369565b60200260200101519050806020015151600014610c61576040516309bde33960e01b815260040160405180910390fd5b604051636d6c231360e01b81526001600160a01b038f1690636d6c231390610c9190889087908990600401614c48565b600060405180830381600087803b158015610cab57600080fd5b505af1158015610cbf573d6000803e3d6000fd5b50505050505050505080610cd2906149ab565b90506109ad565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e919061417c565b90506001816003811115610d5457610d5461419d565b1480610d7157506003816003811115610d6f57610d6f61419d565b145b15610d8f57604051631c6d5f7760e31b815260040160405180910390fd5b4260006001600160a01b038616631a880a93610dab8780614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016020604051808303816000875af1158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1791906141b3565b610e2190836141e2565b90506000866001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8791906141b3565b90508015801590610e9757508181115b15610eb55760405163048c969960e01b815260040160405180910390fd5b6000610ec46020880188614320565b905090506000816001600160401b03811115610ee257610ee26141f5565b604051908082528060200260200182016040528015610f2d57816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181610f005790505b50905060005b82811015611167576000610f4a60208b018b614320565b83818110610f5a57610f5a614369565b9050602002810190610f6c9190614c71565b610f7590614d06565b9050610f848160000151612a33565b6001600160401b03168710610fac57604051631676f4b360e01b815260040160405180910390fd5b805151600090610fbb906129e2565b604051630da2fd1960e21b8152600481018290529091506000906001600160a01b038e169063368bf464906024016040805180830381865afa158015611005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110299190614568565b60208101519091506001600160a01b0316611057576040516309bde33960e01b815260040160405180910390fd5b60006001600160a01b03168d6001600160a01b0316638856337e61107e8660000151612a60565b6040518263ffffffff1660e01b815260040161109c91815260200190565b6040805180830381865afa1580156110b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110dc9190614568565b602001516001600160a01b0316146111075760405163156a571760e11b815260040160405180910390fd5b604051806060016040528084604001518152602001846020015181526020016111338560000151612a60565b81525085858151811061114857611148614369565b602002602001018190525050505080611160906149ab565b9050610f33565b5060006001600160a01b038a1663a70a8c476111838b80614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016060604051808303816000875af11580156111cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ef9190614304565b60200151905080611213576040516353ae552b60e11b815260040160405180910390fd5b6000611279826112238c80614c5b565b611231906040810190614320565b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525088925061127091508f905080614c5b565b60600135612ac2565b905080611299576040516309bde33960e01b815260040160405180910390fd5b60005b8481101561135c5760006112b360208d018d614320565b838181106112c3576112c3614369565b90506020028101906112d59190614c71565b6112de90614d06565b90508c6001600160a01b031663ab013de182600001516112fb3390565b6040518363ffffffff1660e01b8152600401611318929190614db0565b600060405180830381600087803b15801561133257600080fd5b505af1158015611346573d6000803e3d6000fd5b505050505080611355906149ab565b905061129c565b505050505050505050505050565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cf919061417c565b905060018160038111156113e5576113e561419d565b1480611402575060038160038111156114005761140061419d565b145b1561142057604051631c6d5f7760e31b815260040160405180910390fd5b4260006001600160a01b038616631a880a9361143c8780614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016020604051808303816000875af1158015611484573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a891906141b3565b6114b290836141e2565b90506000866001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151891906141b3565b9050801580159061152857508181115b156115465760405163048c969960e01b815260040160405180910390fd5b60006115556020880188614320565b905090506000816001600160401b03811115611573576115736141f5565b6040519080825280602002602001820160405280156115be57816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816115915790505b50905060005b828110156117c55760006115db60208b018b614320565b838181106115eb576115eb614369565b90506020028101906115fd9190614c71565b61160690614dda565b905061167d8b6001600160a01b031663f437bc596040518163ffffffff1660e01b8152600401600060405180830381865afa158015611649573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116719190810190614e16565b82516020015190612ada565b61169a576040516390d4c20960e01b815260040160405180910390fd5b80516116a5906129b0565b6001600160401b031687106116cd57604051631676f4b360e01b815260040160405180910390fd5b60006116dc82600001516129e2565b604051630cb33d1f60e11b8152600481018290529091506000906001600160a01b038e16906319667a3e90602401602060405180830381865afa158015611727573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174b9190614e4a565b6001600160a01b0316146117725760405163156a571760e11b815260040160405180910390fd5b60405180606001604052808360400151815260200183602001518152602001828152508484815181106117a7576117a7614369565b60200260200101819052505050806117be906149ab565b90506115c4565b5060006001600160a01b038a1663a70a8c476117e18b80614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016060604051808303816000875af1158015611829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184d9190614304565b60200151905080611871576040516353ae552b60e11b815260040160405180910390fd5b6000611881826112238c80614c5b565b9050806118a1576040516309bde33960e01b815260040160405180910390fd5b60005b8481101561135c5760006118bb60208d018d614320565b838181106118cb576118cb614369565b90506020028101906118dd9190614c71565b6118e690614dda565b90508c6001600160a01b031663b85e6fbb82600001516119033390565b6040518363ffffffff1660e01b8152600401611920929190614e67565b600060405180830381600087803b15801561193a57600080fd5b505af115801561194e573d6000803e3d6000fd5b50505050508061195d906149ab565b90506118a4565b826000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c9919061417c565b905060018160038111156119df576119df61419d565b14806119fc575060038160038111156119fa576119fa61419d565b145b15611a1a57604051631c6d5f7760e31b815260040160405180910390fd5b6000856001600160a01b0316639a8425bc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7e91906141b3565b611a8890426141e2565b9050856001600160a01b031663d40784c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aec91906141b3565b8110611b0b5760405163040dc5c360e41b815260040160405180910390fd5b600080876001600160a01b0316632476132b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b709190614e4a565b6001600160a01b0316637d755598896001600160a01b031663bbad99d46040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bbc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611be49190810190614e16565b89896040518463ffffffff1660e01b8152600401611c0493929190614e7a565b6000604051808303816000875af1158015611c23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c4b9190810190614eaa565b604051630b4974cf60e41b815291935091506001600160a01b0389169063b4974cf090611c7c908590600401614f99565b600060405180830381600087803b158015611c9657600080fd5b505af1158015611caa573d6000803e3d6000fd5b505082519150600090505b81811015611e16576000838281518110611cd157611cd1614369565b6020026020010151905060008b6001600160a01b0316639c095f8683600001516040518263ffffffff1660e01b8152600401611d0f91815260200190565b602060405180830381865afa158015611d2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5091906141b3565b90508015801590611d645750808260200151115b15611e015760408051808201825283518152602080850151818301908152858401518451632acf7f4f60e11b81528451600482015291516024830152805160448301529182015160648201529201516084830152906001600160a01b038e169063559efe9e9060a401600060405180830381600087803b158015611de757600080fd5b505af1158015611dfb573d6000803e3d6000fd5b50505050505b50508080611e0e906149ab565b915050611cb5565b50505050505050505050565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e87919061417c565b90506001816003811115611e9d57611e9d61419d565b1480611eba57506003816003811115611eb857611eb861419d565b145b15611ed857604051631c6d5f7760e31b815260040160405180910390fd5b4260006001600160a01b038616631a880a93611ef48780614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016020604051808303816000875af1158015611f3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6091906141b3565b611f6a90836141e2565b90506000866001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd091906141b3565b90508015801590611fe057508181115b15611ffe5760405163048c969960e01b815260040160405180910390fd5b600061200d6020880188614320565b905090506000816001600160401b0381111561202b5761202b6141f5565b60405190808252806020026020018201604052801561207657816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816120495790505b50905060005b8281101561226257600061209360208b018b614320565b838181106120a3576120a3614369565b90506020028101906120b59190614c71565b6120be90614fac565b8051519091506000906120d090612a28565b604051630da2fd1960e21b8152600481018290529091506000906001600160a01b038e169063368bf464906024016040805180830381865afa15801561211a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213e9190614568565b60208101519091506001600160a01b031661216c5760405163f058bfd960e01b815260040160405180910390fd5b60405163442b19bf60e11b8152600481018390526000906001600160a01b038f1690638856337e906024016040805180830381865afa1580156121b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d79190614568565b602001516001600160a01b0316146122025760405163156a571760e11b815260040160405180910390fd5b6040518060600160405280846040015181526020018460200151815260200161222e8560000151612b0a565b81525085858151811061224357612243614369565b60200260200101819052505050508061225b906149ab565b905061207c565b5060006001600160a01b038a1663a70a8c4761227e8b80614c5b565b60405160e083901b6001600160e01b03191681528135600482015260209091013560248201526044016060604051808303816000875af11580156122c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ea9190614304565b6020015190508061230e576040516353ae552b60e11b815260040160405180910390fd5b600061231e826112238c80614c5b565b90508061233e576040516309bde33960e01b815260040160405180910390fd5b60005b8481101561135c57600061235860208d018d614320565b8381811061236857612368614369565b905060200281019061237a9190614c71565b61238390614fac565b90508c6001600160a01b031663fc8a341c82600001516123a03390565b6040518363ffffffff1660e01b81526004016123bd929190615122565b600060405180830381600087803b1580156123d757600080fd5b505af11580156123eb573d6000803e3d6000fd5b5050505050806123fa906149ab565b9050612341565b816000816001600160a01b031663054f7d9c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612442573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612466919061417c565b9050600181600381111561247c5761247c61419d565b1480612499575060038160038111156124975761249761419d565b145b156124b757604051631c6d5f7760e31b815260040160405180910390fd5b60408051631a880a9360e01b8152602085013560048201529084013560248201526000906001600160a01b03861690631a880a93906044016020604051808303816000875af115801561250e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253291906141b3565b61253c90426141e2565b90506000856001600160a01b031663f3f480d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a291906141b3565b905080158015906125b257508181115b156125d05760405163048c969960e01b815260040160405180910390fd5b6040805163a70a8c4760e01b8152602087013560048201529086013560248201526000906001600160a01b0388169063a70a8c47906044016060604051808303816000875af1158015612627573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264b9190614304565b6040810151909150612670576040516353ae552b60e11b815260040160405180910390fd5b600061267c8780614320565b9050905060005b818110156107205760006126978980614320565b838181106126a7576126a7614369565b90506020028101906126b99190614c71565b6126c2906151e0565b84519091506126d4906103e890614554565b6126dd82612a33565b6001600160401b03161115612705576040516348e8dd2f60e11b815260040160405180910390fd5b600061271082612a60565b604051632211f1dd60e01b8152600481018290529091506000906001600160a01b038d1690632211f1dd906024016040805180830381865afa15801561275a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061277e9190614568565b60208101519091506001600160a01b03166127ac5760405163f058bfd960e01b815260040160405180910390fd5b604080516001808252818301909252600091816020015b60608152602001906001900390816127c35790505090506040518060400160405280601081526020016f526573706f6e7365526563656970747360801b8152508360405160200161281691815260200190565b60408051601f198184030181529082905261283492916020016145c4565b60405160208183030381529060405281868151811061285557612855614369565b6020026020010181905250600073449d18b3e5c65c96d1f289559af60417564d018b631475ff4589604001518f80606001906128919190614320565b866040518563ffffffff1660e01b81526004016128b1949392919061469d565b600060405180830381865af41580156128ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128f691908101906147bc565b60008151811061290857612908614369565b60200260200101519050806020015151600014612938576040516309bde33960e01b815260040160405180910390fd5b604051630446fc4760e01b81526001600160a01b038f1690630446fc4790612968908890879089906004016151ec565b600060405180830381600087803b15801561298257600080fd5b505af1158015612996573d6000803e3d6000fd5b505050505050505050806129a9906149ab565b9050612683565b60008160a001516001600160401b03166000036129d557506001600160401b03919050565b5060a0015190565b919050565b60006129ed82612bff565b805190602001209050919050565b600081608001516001600160401b0316600003612a2057506001600160401b03919050565b506080015190565b60006129ed82612c50565b600081604001516001600160401b0316600003612a5857506001600160401b03919050565b506040015190565b6000612a6f8260000151612bff565b6020808401516040808601519051612a8793016151ff565b60408051601f1981840301815290829052612aa592916020016145c4565b604051602081830303815290604052805190602001209050919050565b6000612acf848484612d50565b909414949350505050565b60008151835114612aed5750600061016c565b825160208381018281209186019283209091145b95945050505050565b60408051602080820190925260008082529183015151825b81811015612bc2578285602001518281518110612b4157612b41614369565b60200260200101516000015186602001518381518110612b6357612b63614369565b602002602001015160200151604051602001612b809291906145c4565b60408051601f1981840301815290829052612b9e92916020016145c4565b60405160208183030381529060405292508080612bba906149ab565b915050612b22565b508351612bce90612c50565b82604051602001612be09291906145c4565b6040516020818303038152906040528051906020012092505050919050565b60608160000151826020015183604001518460a00151856060015186608001518760c00151604051602001612c3a9796959493929190615231565b6040516020818303038152906040529050919050565b6040805160208101909152600080825260a083015151606092915b81811015612cc757828560a001518281518110612c8a57612c8a614369565b6020026020010151604051602001612ca39291906145c4565b60405160208183030381529060405292508080612cbf906149ab565b915050612c6b565b508360000151846020015185604001518660c0015187608001518860600151604051602001612d0e919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f198184030181529082905260e08b0151612d389796959493928a91906020016152c8565b60405160208183030381529060405292505050919050565b6000816001148015612d63575082516001145b8015612d8d575082600081518110612d7d57612d7d614369565b6020026020010151602001516000145b15612db85782600081518110612da557612da5614369565b6020026020010151604001519050613017565b6000612dc38361301e565b90506000815190506000604051806040016040528060008152602001836001600160401b03811115612df757612df76141f5565b604051908082528060200260200182016040528015612e20578160200160208202803683370190505b509052604080518082019091526000808252602082018a905291925090805b84811015612f66576000868281518110612e5b57612e5b614369565b60200260200101519050806002612e72919061544e565b612e7c908461545a565b604080516000808252602082019092529194509081612ec3565b6040805160608101825260008082526020808301829052928201528252600019909201910181612e965790505b508b5190915015612edd57612ed88b856130c1565b9b5090505b8051600003612f1157845160208601515103612efa575050612f66565b612f0c86612f07876132c0565b6132f7565b612f5c565b80516001148015612f20575081155b15612f4d57612f0c8682600081518110612f3c57612f3c614369565b6020026020010151604001516132f7565b612f5c86612f07838886613327565b5050600101612e3f565b5082516000190183525b825115612ff0576000612f8284613504565b90506000612f8f85613504565b855160010186526040805160208101859052908101829052909150606001604051602081830303815290604052805190602001208560200151866000015181518110612fdd57612fdd614369565b6020026020010181815250505050612f70565b826020015160008151811061300757613007614369565b6020026020010151955050505050505b9392505050565b6040805181815261082081018252606091906000908260208201610800803683370190505090506000845b838210156130a55780156130a55760006130628261353c565b90508084848151811061307757613077614369565b602090810291909101015261308d81600261544e565b61309790836141e2565b915082600101925050613049565b60006130b183866141e2565b8451038452509195945050505050565b606080600080855190505b8082101561310b578582815181106130e6576130e6614369565b60200260200101516020015185111561310b5781613103816149ab565b9250506130cc565b60008215613119578261311c565b60005b90506000816001600160401b03811115613138576131386141f5565b60405190808252806020026020018201604052801561318357816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816131565790505b509050600061319283856141e2565b6001600160401b038111156131a9576131a96141f5565b6040519080825280602002602001820160405280156131f457816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816131c75790505b5082519091506000905b8082101561324e578a828151811061321857613218614369565b602002602001015184838151811061323257613232614369565b602002602001018190525081613247906149ab565b91506131fe565b60005b868310156132ac578b838151811061326b5761326b614369565b602002602001015184828151811061328557613285614369565b60200260200101819052508261329a906149ab565b92506132a5816149ab565b9050613251565b5092975090955050505050505b9250929050565b60008082602001518360000151815181106132dd576132dd614369565b602090810291909101015183516001019093525090919050565b80826020015183600001518151811061331257613312614369565b60209081029190910101525080516001019052565b6000606080613335866135d0565b925090506000846001600160401b03811115613353576133536141f5565b60405190808252806020026020018201604052801561338657816020015b60608152602001906001900390816133715790505b50905060005b858110156134ee5760006133a082886141e2565b6133ab90600261544e565b9050808551036133bb57506134ee565b60006133c68661374e565b905060006133d48288613850565b8051909150806001600160401b038111156133f1576133f16141f5565b60405190808252806020026020018201604052801561343657816020015b604080518082019091526000808252602082015281526020019060019003908161340f5790505b5086868151811061344957613449614369565b602002602001018190525060005b818110156134d357604051806040016040528084838151811061347c5761347c614369565b602002602001015181526020016134928e6132c0565b8152508787815181106134a7576134a7614369565b602002602001015182815181106134c0576134c0614369565b6020908102919091010152600101613457565b506134dd83613972565b97508460010194505050505061338c565b506134f98183613a85565b979650505050505050565b600080826020015183600001518151811061352157613521614369565b60209081029190910101518351600019019093525090919050565b600080608083901c1561355157608092831c92015b604083901c1561356357604092831c92015b602083901c1561357557602092831c92015b601083901c1561358757601092831c92015b600883901c1561359957600892831c92015b600483901c156135ab57600492831c92015b600283901c156135bd57600292831c92015b600183901c1561016c5760010192915050565b606080600080845190506000816001600160401b038111156135f4576135f46141f5565b60405190808252806020026020018201604052801561363957816020015b60408051808201909152600080825260208201528152602001906001900390816136125790505b5090506000826001600160401b03811115613656576136566141f5565b60405190808252806020026020018201604052801561367f578160200160208202803683370190505b5090505b828410156137425760405180604001604052808886815181106136a8576136a8614369565b60200260200101516000015181526020018886815181106136cb576136cb614369565b6020026020010151604001518152508285815181106136ec576136ec614369565b602002602001018190525086848151811061370957613709614369565b60200260200101516000015181858151811061372757613727614369565b602090810291909101015261373b846149ab565b9350613683565b90969095509350505050565b80516060906000816001600160401b0381111561376d5761376d6141f5565b604051908082528060200260200182016040528015613796578160200160208202803683370190505b50905060005b828110156138485760008582815181106137b8576137b8614369565b60200260200101519050806000036137f8576137d581600161545a565b8383815181106137e7576137e7614369565b60200260200101818152505061383f565b61380360028261546d565b600003613815576137d581600161545a565b6138206001826141e2565b83838151811061383257613832614369565b6020026020010181815250505b5060010161379c565b509392505050565b81518151606091906000826001600160401b03811115613872576138726141f5565b60405190808252806020026020018201604052801561389b578160200160208202803683370190505b5090506000805b84811015613954576000805b85811015613900578881815181106138c8576138c8614369565b60200260200101518a84815181106138e2576138e2614369565b6020026020010151036138f85760019150613900565b6001016138ae565b508061394b5788828151811061391857613918614369565b602002602001015184848151811061393257613932614369565b602090810291909101015282613947816149ab565b9350505b506001016138a2565b50600061396182866141e2565b835103835250909695505050505050565b80516060906000816001600160401b03811115613991576139916141f5565b6040519080825280602002602001820160405280156139ba578160200160208202803683370190505b5090506000805b83811015613a6957600060028783815181106139df576139df614369565b60200260200101516139f19190614554565b9050600083118015613a2557508084613a0b6001866141e2565b81518110613a1b57613a1b614369565b6020026020010151145b15613a305750613a57565b80848481518110613a4357613a43614369565b602002602001018181525050826001019250505b80613a61816149ab565b9150506139c1565b506000613a7682856141e2565b83510383525090949350505050565b60408051600080825260208201909252819081613ac4565b6040805180820190915260008082526020820152815260200190600190039081613a9d5790505b509050613aeb8385600081518110613ade57613ade614369565b6020026020010151613db8565b84600081518110613afe57613afe614369565b6020908102919091010152835160005b81811015613d80576040805160008082526020820190925281613b53565b6040805180820190915260008082526020820152815260200190600190039081613b2c5790505b5090508351600003613b8057868281518110613b7157613b71614369565b60200260200101519050613ba6565b613ba3878381518110613b9557613b95614369565b602002602001015185613db8565b90505b613bb281516002613fc4565b6001600160401b03811115613bc957613bc96141f5565b604051908082528060200260200182016040528015613c0e57816020015b6040805180820190915260008082526020820152815260200190600190039081613be75790505b508151909450600090815b81811015613d695781613c2d82600161545a565b10613ca1576000848281518110613c4657613c46614369565b60200260200101519050613c78858381518110613c6557613c65614369565b6020026020010151600001516002613fec565b815287518190899086908110613c9057613c90614369565b602002602001018190525050613d57565b6040805180820190915260008082526020820152613cca858381518110613c6557613c65614369565b81528451613d2990869084908110613ce457613ce4614369565b60200260200101516020015186846001613cfe919061545a565b81518110613d0e57613d0e614369565b60200260200101516020015160009182526020526040902090565b602082015287518190899086908110613d4457613d44614369565b6020908102919091010152506001909201915b613d6260028261545a565b9050613c19565b505050508080613d78906149ab565b915050613b0e565b508151600114613d8f57600080fd5b81600081518110613da257613da2614369565b6020026020010151602001519250505092915050565b815181516060916000918291829182613dd1828461545a565b90506000816001600160401b03811115613ded57613ded6141f5565b604051908082528060200260200182016040528015613e3257816020015b6040805180820190915260008082526020820152815260200190600190039081613e0b5790505b5090505b8387108015613e4457508286105b15613f1957888681518110613e5b57613e5b614369565b6020026020010151600001518a8881518110613e7957613e79614369565b6020026020010151600001511015613ed257898781518110613e9d57613e9d614369565b6020026020010151818681518110613eb757613eb7614369565b60209081029190910101526001968701969490940193613e36565b888681518110613ee457613ee4614369565b6020026020010151818681518110613efe57613efe614369565b60209081029190910101526001958601959490940193613e36565b83871015613f6857898781518110613f3357613f33614369565b6020026020010151818681518110613f4d57613f4d614369565b60209081029190910101526001968701969490940193613f19565b82861015613fb757888681518110613f8257613f82614369565b6020026020010151818681518110613f9c57613f9c614369565b60209081029190910101526001958601959490940193613f68565b9998505050505050505050565b600080613fd18385614554565b9050613fdd838561546d565b15613017576001019392505050565b60006130178284614554565b60006020828403121561400a57600080fd5b81356001600160e01b03198116811461301757600080fd5b6001600160a01b038116811461403757600080fd5b50565b60006080828403121561404c57600080fd5b50919050565b6000806040838503121561406557600080fd5b823561407081614022565b915060208301356001600160401b0381111561408b57600080fd5b6140978582860161403a565b9150509250929050565b60006040828403121561404c57600080fd5b600080604083850312156140c657600080fd5b82356140d181614022565b915060208301356001600160401b038111156140ec57600080fd5b614097858286016140a1565b60008060006040848603121561410d57600080fd5b833561411881614022565b925060208401356001600160401b038082111561413457600080fd5b818601915086601f83011261414857600080fd5b81358181111561415757600080fd5b87602082850101111561416957600080fd5b6020830194508093505050509250925092565b60006020828403121561418e57600080fd5b81516004811061301757600080fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156141c557600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561016c5761016c6141cc565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b038111828210171561422d5761422d6141f5565b60405290565b60405160e081016001600160401b038111828210171561422d5761422d6141f5565b604080519081016001600160401b038111828210171561422d5761422d6141f5565b60405161010081016001600160401b038111828210171561422d5761422d6141f5565b604051601f8201601f191681016001600160401b03811182821017156142c2576142c26141f5565b604052919050565b6000606082840312156142dc57600080fd5b6142e461420b565b905081518152602082015160208201526040820151604082015292915050565b60006060828403121561431657600080fd5b61301783836142ca565b6000808335601e1984360301811261433757600080fd5b8301803591506001600160401b0382111561435157600080fd5b6020019150600581901b36038213156132b957600080fd5b634e487b7160e01b600052603260045260246000fd5b6000823560de1983360301811261439557600080fd5b9190910192915050565b60006001600160401b038211156143b8576143b86141f5565b50601f01601f191660200190565b600082601f8301126143d757600080fd5b81356143ea6143e58261439f565b61429a565b8181528460208386010111156143ff57600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160401b03811681146129dd57600080fd5b600060e0828403121561444557600080fd5b61444d614233565b905081356001600160401b038082111561446657600080fd5b614472858386016143c6565b8352602084013591508082111561448857600080fd5b614494858386016143c6565b60208401526144a56040850161441c565b604084015260608401359150808211156144be57600080fd5b6144ca858386016143c6565b606084015260808401359150808211156144e357600080fd5b6144ef858386016143c6565b608084015261450060a0850161441c565b60a084015260c084013591508082111561451957600080fd5b50614526848285016143c6565b60c08301525092915050565b600061016c3683614433565b634e487b7160e01b600052601260045260246000fd5b6000826145635761456361453e565b500490565b60006040828403121561457a57600080fd5b614582614255565b82518152602083015161459481614022565b60208201529392505050565b60005b838110156145bb5781810151838201526020016145a3565b50506000910152565b600083516145d68184602088016145a0565b8351908301906145ea8183602088016145a0565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526146348160208601602086016145a0565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b8581101561469057828403895261467e84835161461c565b98850198935090840190600101614666565b5091979650505050505050565b60006060820186835260206060818501528186835260808501905060808760051b86010192508760005b8881101561473657868503607f190183528135368b9003601e190181126146ed57600080fd5b8a0184810190356001600160401b0381111561470857600080fd5b80360382131561471757600080fd5b6147228782846145f3565b9650505091830191908301906001016146c7565b5050505082810360408401526134f98185614648565b60006001600160401b03821115614765576147656141f5565b5060051b60200190565b600082601f83011261478057600080fd5b815161478e6143e58261439f565b8181528460208386010111156147a357600080fd5b6147b48260208301602087016145a0565b949350505050565b600060208083850312156147cf57600080fd5b82516001600160401b03808211156147e657600080fd5b818501915085601f8301126147fa57600080fd5b81516148086143e58261474c565b81815260059190911b8301840190848101908883111561482757600080fd5b8585015b838110156148ba578051858111156148435760008081fd5b86016040818c03601f190181131561485b5760008081fd5b614863614255565b89830151888111156148755760008081fd5b6148838e8c8387010161476f565b8252509082015190878211156148995760008081fd5b6148a78d8b8486010161476f565b818b01528552505091860191860161482b565b5098975050505050505050565b6000815160e084526148dc60e085018261461c565b9050602083015184820360208601526148f5828261461c565b91505060408301516001600160401b038082166040870152606085015191508583036060870152614926838361461c565b9250608085015191508583036080870152614941838361461c565b92508060a08601511660a0870152505060c083015184820360c0860152612b01828261461c565b60808152600061497b60808301866148c7565b905061499d6020830185805182526020908101516001600160a01b0316910152565b826060830152949350505050565b6000600182016149bd576149bd6141cc565b5060010190565b6000823560fe1983360301811261439557600080fd5b80356129dd81614022565b600082601f8301126149f657600080fd5b81356020614a066143e58361474c565b82815260059290921b84018101918181019086841115614a2557600080fd5b8286015b84811015614a645780356001600160401b03811115614a485760008081fd5b614a568986838b01016143c6565b845250918301918301614a29565b509695505050505050565b60006101008284031215614a8257600080fd5b614a8a614277565b905081356001600160401b0380821115614aa357600080fd5b614aaf858386016143c6565b83526020840135915080821115614ac557600080fd5b614ad1858386016143c6565b6020840152614ae26040850161441c565b6040840152614af3606085016149da565b6060840152614b046080850161441c565b608084015260a0840135915080821115614b1d57600080fd5b614b29858386016149e5565b60a0840152614b3a60c0850161441c565b60c084015260e0840135915080821115614b5357600080fd5b50614b60848285016143c6565b60e08301525092915050565b600061016c3683614a6f565b60006101008251818552614b8e8286018261461c565b91505060208301518482036020860152614ba8828261461c565b9150506040830151614bc560408601826001600160401b03169052565b506060830151614be060608601826001600160a01b03169052565b506080830151614bfb60808601826001600160401b03169052565b5060a083015184820360a0860152614c138282614648565b91505060c0830151614c3060c08601826001600160401b03169052565b5060e083015184820360e0860152612b01828261461c565b60808152600061497b6080830186614b78565b60008235607e1983360301811261439557600080fd5b60008235605e1983360301811261439557600080fd5b600060608284031215614c9957600080fd5b614ca161420b565b905081356001600160401b0380821115614cba57600080fd5b614cc685838601614433565b83526020840135915080821115614cdc57600080fd5b50614ce9848285016143c6565b602083015250614cfb6040830161441c565b604082015292915050565b600060608236031215614d1857600080fd5b614d2061420b565b82356001600160401b03811115614d3657600080fd5b614d4236828601614c87565b825250602083013560208201526040830135604082015280915050919050565b6000815160608452614d7760608501826148c7565b905060208301518482036020860152614d90828261461c565b9150506001600160401b0360408401511660408501528091505092915050565b604081526000614dc36040830185614d62565b905060018060a01b03831660208301529392505050565b600060608236031215614dec57600080fd5b614df461420b565b82356001600160401b03811115614e0a57600080fd5b614d4236828601614433565b600060208284031215614e2857600080fd5b81516001600160401b03811115614e3e57600080fd5b6147b48482850161476f565b600060208284031215614e5c57600080fd5b815161301781614022565b604081526000614dc360408301856148c7565b604081526000614e8d604083018661461c565b8281036020840152614ea08185876145f3565b9695505050505050565b6000806040808486031215614ebe57600080fd5b83516001600160401b0380821115614ed557600080fd5b614ee18783880161476f565b9450602091508186015181811115614ef857600080fd5b86019050601f81018713614f0b57600080fd5b8051614f196143e58261474c565b81815260a0918202830184019184820191908a841115614f3857600080fd5b938501935b83851015614f885780858c031215614f555760008081fd5b614f5d61420b565b855181528686015187820152614f758c8988016142ca565b8189015283529384019391850191614f3d565b508096505050505050509250929050565b602081526000613017602083018461461c565b600060608236031215614fbe57600080fd5b614fc661420b565b82356001600160401b0380821115614fdd57600080fd5b81850191506040808336031215614ff357600080fd5b614ffb614255565b83358381111561500a57600080fd5b61501636828701614a6f565b8252506020808501358481111561502c57600080fd5b949094019336601f86011261504057600080fd5b843561504e6143e58261474c565b81815260059190911b8601820190828101903683111561506d57600080fd5b8388015b838110156150fe578035888111156150895760008081fd5b890136819003601f19018813156150a05760008081fd5b6150a8614255565b868201358a8111156150ba5760008081fd5b6150c83689838601016143c6565b825250888201358a8111156150dd5760008081fd5b6150eb3689838601016143c6565b8289015250845250918401918401615071565b50848401525050908552868101359085015294850135948301949094525092915050565b600060408083528451818285015261513d6080850182614b78565b9050602080870151603f198684030160608701528281518085528385019150838160051b860101848401935060005b828110156151bc57868203601f19018452845180518984526151908a85018261461c565b91880151848303858a01529190506151a8818361461c565b96880196958801959350505060010161516c565b506001600160a01b038a16858a015296506151d692505050565b5050509392505050565b600061016c3683614c87565b60808152600061497b6080830186614d62565b600083516152118184602088016145a0565b60c09390931b6001600160c01b0319169190920190815260080192915050565b60008851615243818460208d016145a0565b885190830190615257818360208d016145a0565b60c089811b6001600160c01b03199081169390920192835288901b166008820152855161528b816010840160208a016145a0565b85519101906152a18160108401602089016145a0565b84519101906152b78160108401602088016145a0565b016010019998505050505050505050565b600089516152da818460208e016145a0565b8951908301906152ee818360208e016145a0565b60c08a811b6001600160c01b03199081169390920192835289811b8216600884015288901b166010820152855161532c816018840160208a016145a0565b85519101906153428160188401602089016145a0565b84519101906153588160188401602088016145a0565b016018019a9950505050505050505050565b600181815b808511156153a557816000190482111561538b5761538b6141cc565b8085161561539857918102915b93841c939080029061536f565b509250929050565b6000826153bc5750600161016c565b816153c95750600061016c565b81600181146153df57600281146153e957615405565b600191505061016c565b60ff8411156153fa576153fa6141cc565b50506001821b61016c565b5060208310610133831016604e8410600b8410161715615428575081810a61016c565b615432838361536a565b8060001904821115615446576154466141cc565b029392505050565b600061301783836153ad565b8082018082111561016c5761016c6141cc565b60008261547c5761547c61453e565b50069056fea2646970667358221220d68abe908834f1fe41927a4b05da4b3ec48269bf9b121029cefe9f993e0749ba64736f6c63430008140033