diff --git a/contract-bindings/artifacts/LightClientMock_bytecode.json b/contract-bindings/artifacts/LightClientMock_bytecode.json index 2d70d4d04..e8b0ddf9b 100644 --- a/contract-bindings/artifacts/LightClientMock_bytecode.json +++ b/contract-bindings/artifacts/LightClientMock_bytecode.json @@ -1 +1 @@ -"0x60a0604052306080523480156200001557600080fd5b506040516200344038038062003440833981016040819052620000389162000525565b6200004262000058565b6200004f8383836200010c565b50505062000681565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a95760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001095780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b82516001600160401b031615158062000131575060208301516001600160401b031615155b806200013f57506020820151155b806200014d57506040820151155b806200015b57506060820151155b806200016657508151155b80620001795750610e108163ffffffff16105b1562000198576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b0390811668010000000000000000026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b19909116179055620002374342856200023c565b505050565b600954158015906200030b575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b0316908110620002805762000280620005de565b600091825260209091206002909102015460098054680100000000000000009092046001600160401b031691620002ba906001906200060a565b81548110620002cd57620002cd620005de565b6000918252602090912060029091020154620002ff91906801000000000000000090046001600160401b031662000626565b6001600160401b031610155b15620003a557600854600980549091600160c01b90046001600160401b03169081106200033c576200033c620005de565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186200037f8362000650565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b02600160801b600160c01b031995881668010000000000000000026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b604051606081016001600160401b0381118282101715620004bc57634e487b7160e01b600052604160045260246000fd5b60405290565b604051608081016001600160401b0381118282101715620004bc57634e487b7160e01b600052604160045260246000fd5b80516001600160401b03811681146200050b57600080fd5b919050565b805163ffffffff811681146200050b57600080fd5b60008060008385036101008112156200053d57600080fd5b60608112156200054c57600080fd5b620005566200048b565b6200056186620004f3565b81526200057160208701620004f3565b60208201526040868101519082015293506080605f19820112156200059557600080fd5b50620005a0620004c2565b60608581015182526080860151602083015260a0860151604083015260c0860151908201529150620005d560e0850162000510565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115620006205762000620620005f4565b92915050565b6001600160401b03828116828216039080821115620006495762000649620005f4565b5092915050565b60006001600160401b038281166002600160401b03198101620006775762000677620005f4565b6001019392505050565b608051612d95620006ab600039600081816111f90152818161122201526113a10152612d956000f3fe60806040526004361061019c5760003560e01c80638584d23f116100ec578063c23b9e9e1161008a578063e030330111610064578063e03033011461060c578063f2fde38b1461062c578063f56761601461064c578063f9e50d191461066c57600080fd5b8063c23b9e9e14610587578063c8e5e498146105c0578063d24d933d146105dc57600080fd5b80639baa3cc9116100c65780639baa3cc91461047b5780639fdb54a71461049b578063ad3cb1cc146104f1578063b5adea3c1461052f57600080fd5b80638584d23f146103e15780638da5cb5b1461041e57806396c1ca611461045b57600080fd5b8063313df7b11161015957806352d1902d1161013357806352d1902d1461036857806369cc6a041461038b578063715018a6146103a0578063826e41fc146103b557600080fd5b8063313df7b1146102da578063426d3194146103125780634f1ef2861461035557600080fd5b8063013fa5fc146101a157806302b592f3146101c35780630d8e6e2c146102215780632063d4f71461024e5780632d52aad61461026e5780632f79889d1461029b575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612209565b610681565b005b3480156101cf57600080fd5b506101e36101de366004612224565b610734565b60405161021894939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b34801561022d57600080fd5b50604080516001815260006020820181905291810191909152606001610218565b34801561025a57600080fd5b506101c161026936600461239a565b61077f565b34801561027a57600080fd5b506101c1610289366004612224565b600a805460ff19166001179055600b55565b3480156102a757600080fd5b506008546102c290600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001610218565b3480156102e657600080fd5b506008546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b34801561031e57600080fd5b506000546001546002546003546103359392919084565b604080519485526020850193909352918301526060820152608001610218565b6101c161036336600461254e565b6108d4565b34801561037457600080fd5b5061037d6108f3565b604051908152602001610218565b34801561039757600080fd5b506101c1610910565b3480156103ac57600080fd5b506101c161097f565b3480156103c157600080fd5b506008546001600160a01b031615155b6040519015158152602001610218565b3480156103ed57600080fd5b506104016103fc366004612224565b610991565b604080519283526001600160401b03909116602083015201610218565b34801561042a57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102fa565b34801561046757600080fd5b506101c1610476366004612607565b610b3b565b34801561048757600080fd5b506101c1610496366004612622565b610bb0565b3480156104a757600080fd5b506006546007546104cb916001600160401b0380821692600160401b909204169083565b604080516001600160401b03948516815293909216602084015290820152606001610218565b3480156104fd57600080fd5b50610522604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161021891906126d2565b34801561053b57600080fd5b506101c161054a366004612705565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560400151600755565b34801561059357600080fd5b506008546105ab90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610218565b3480156105cc57600080fd5b506101c1600a805460ff19169055565b3480156105e857600080fd5b506004546005546104cb916001600160401b0380821692600160401b909204169083565b34801561061857600080fd5b506103d1610627366004612721565b610cd4565b34801561063857600080fd5b506101c1610647366004612209565b610d0a565b34801561065857600080fd5b506101c1610667366004612743565b610d4d565b34801561067857600080fd5b5060095461037d565b610689610dfb565b6001600160a01b0381166106b05760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036106df5760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b6009818154811061074457600080fd5b6000918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6008546001600160a01b0316151580156107a457506008546001600160a01b03163314155b156107c2576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b0391821691161115806107fb575060065460208301516001600160401b03600160401b9092048216911611155b156108195760405163051c46ef60e01b815260040160405180910390fd5b6108268260400151610e56565b6108308282610ec6565b81516006805460208501516001600160401b03908116600160401b026001600160801b03199092169316929092179190911790556040820151600755610877434284610fbe565b81602001516001600160401b031682600001516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae684604001516040516108c891815260200190565b60405180910390a35050565b6108dc6111ee565b6108e582611293565b6108ef82826112d4565b5050565b60006108fd611396565b50600080516020612d6983398151915290565b610918610dfb565b6008546001600160a01b03161561096457600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b610987610dfb565b61097d60006113df565b600980546000918291906109a660018361284e565b815481106109b6576109b6612861565b6000918252602090912060029091020154600160801b90046001600160401b031684106109f657604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b81811015610abd578460098281548110610a2657610a26612861565b6000918252602090912060029091020154600160801b90046001600160401b03161115610ab55760098181548110610a6057610a60612861565b90600052602060002090600202016001015460098281548110610a8557610a85612861565b906000526020600020906002020160000160109054906101000a90046001600160401b0316935093505050915091565b600101610a0a565b506009610acb60018361284e565b81548110610adb57610adb612861565b9060005260206000209060020201600101546009600183610afc919061284e565b81548110610b0c57610b0c612861565b906000526020600020906002020160000160109054906101000a90046001600160401b03169250925050915091565b610b43610dfb565b610e108163ffffffff161080610b6c575060085463ffffffff600160a01b909104811690821611155b15610b8a576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610bf55750825b90506000826001600160401b03166001148015610c115750303b155b905081158015610c1f575080155b15610c3d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c6757845460ff60401b1916600160401b1785555b610c7086611450565b610c78611461565b610c83898989611469565b8315610cc957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600a5460009060ff16610cf057610ceb8383611586565b610d01565b81600b5484610cff919061284e565b115b90505b92915050565b610d12610dfb565b6001600160a01b038116610d4157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610d4a816113df565b50565b610d5960096000611ef7565b60005b81518110156108ef576009828281518110610d7957610d79612861565b602090810291909101810151825460018181018555600094855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501610d5c565b33610e2d7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461097d5760405163118cdaa760e01b8152336004820152602401610d38565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806108ef5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c6400000000006044820152606401610d38565b6000610ed061169e565b9050610eda611f18565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a083015260005460c08301525163ce537a7760e01b815273__$5c5c07cf4f55be9472c2b47d897172e765$__9063ce537a7790610f5a90859085908890600401612a7e565b602060405180830381865af4158015610f77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9b9190612cad565b610fb8576040516309bde33960e01b815260040160405180910390fd5b50505050565b60095415801590611078575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b0316908110610ffe57610ffe612861565b600091825260209091206002909102015460098054600160401b9092046001600160401b0316916110319060019061284e565b8154811061104157611041612861565b600091825260209091206002909102015461106c9190600160401b90046001600160401b0316612ccf565b6001600160401b031610155b1561110c57600854600980549091600160c01b90046001600160401b03169081106110a5576110a5612861565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186110e683612cf6565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061127557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611269600080516020612d69833981519152546001600160a01b031690565b6001600160a01b031614155b1561097d5760405163703e46dd60e11b815260040160405180910390fd5b61129b610dfb565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d90602001610729565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561132e575060408051601f3d908101601f1916820190925261132b91810190612d1c565b60015b61135657604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d38565b600080516020612d69833981519152811461138757604051632a87526960e21b815260048101829052602401610d38565b6113918383611cce565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461097d5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611458611d24565b610d4a81611d6d565b61097d611d24565b82516001600160401b031615158061148d575060208301516001600160401b031615155b8061149a57506020820151155b806114a757506040820151155b806114b457506060820151155b806114be57508151155b806114d05750610e108163ffffffff16105b156114ee576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b19909116179055611391434285610fbe565b6009546000904384118061159a5750600381105b156115b85760405163b0b4387760e01b815260040160405180910390fd5b600080806115c760018561284e565b90505b816116695786600982815481106115e3576115e3612861565b60009182526020909120600290910201546001600160401b03161161163657600191506009818154811061161957611619612861565b60009182526020909120600290910201546001600160401b031692505b6002811061166957600854600160c01b90046001600160401b03168114611669578061166181612d35565b9150506115ca565b816116875760405163b0b4387760e01b815260040160405180910390fd5b85611692848961284e565b11979650505050505050565b6116a6611f36565b620100008152600760208201527f1369aa78dc50135ad756d62c97a64a0edcd30066584168200d9d1facf82ca4f56040820151527f2cf23456d712b06f8e3aa5bf0acc3e46a3d094602a3a2b99d873bba05a4391476020604083015101527f08a35f379d2d2c490a51006697275e4db79b67b4a175c1477e262d29e25e42316060820151527f218828131bb7940ccc88c561b299755af4bf0b71ed930b129e8be0a1218139ea6020606083015101527f23a2172436c1145b36d5bc6d3b31fa1610c73a543ea443918aaa3ee175f9921b6080820151527f2502adf404d62877c310214ae9942e93c40b154d34c024bab48a3ca057e60a116020608083015101527f1bb88ada91ab7734882f7826b81275320081ac485f9cf8bfbc3ba54b6eb4dff360a0820151527f25c74a27e9a3b20114a3a91f31c20f01777e7ed913e0ef949f0285e2e7c2069b602060a083015101527f12b0ce76ac8b0dbd405ebc5dd0bae0f91aed50033c7ea36fc62aaba2b98333dc60c0820151527f185b42af49dd1cbe337a84f74b704172428e754a0bea024ab3eb2f996afb2c47602060c083015101527f21f53ad4538b45438bbf0521446070223920e3df6f9022a64cc16d7f94e85c0860e0820151527f2278ac3dedfdac7feb9725a022497175518eada52c8932fc40e6e75bea889fb8602060e083015101527f0876136f81c16298487bfb1be74d4a3487ec45645ab1d09dc2e5b865d62230df610100820151527f098c641c947ecd798dfd5e1b2fe428024cdf03061a53ff774ea8a9e3de9d3f2b602061010083015101527f15eaac2c6232d2268bf79dc47ed9666f992fb3d96ad23fb21690c21586c5472e610120820151527f0f10f1ffc54881287fda6f200bc85d8245b508d844a974098a41119867b325d0602061012083015101527f0895ceea40b085534e9739ca5442ba48b3a3592affde2b509df74521b47d8ab0610140820151527f2e12ec5800ac92fe2a8e7040bc5b435b9eb71e31380173fa7688bf81fcbba455602061014083015101527f2f5384eb5653e47576efe248e7903f463243414bfed5237dda750df3996bd918610160820151527f1c3cd6b11da8704cdc871ab4fa323d7ee57bd40ce165b49a56d5ef6489cd251a602061016083015101527f13579994957ce1554cc1e5b194fb63c9513707f627414f8442681ae736e36450610180820151527f26c9bdcd96d8e420b12974ade93ad9c312c4185213d2f6831a7c625a18890e95602061018083015101527f0cc70a1d542a9a1535ae5d9201696adc5c99c1bcebd9951dfa8afec79fa0b6446101a0820151527f10b043d9f1869181b96579d6616efc17a5df7b84c4d431d966c9094bf1e8815360206101a083015101527f198a65309d131a43b0ab1c47659d0336cfbf62b27f4727106b4fd971c73dd4036101c0820151527f23df99eac3c1947903b211b800efeb76f47d5e87b7414866543492e8c7798d1a60206101c083015101527f221cc5e47b81ce8dcfa72ef981916a8eddef12fcde59c56c62830c126ebef0de6101e0820151527f231f99340c35c9e09652a6df73c9cec5d88738cb71ff45716fdc9e9e45a4926e60206101e083015101527f2c9f1489fce0f263e03f3e97bf0a72273aafcca9325ff47786adb04a52a6d22c610200820151527f21f66e28f17e01e9fd593e16d022c4eca25bd5db96daec606d97b604cc414838602061020083015101527f2015745604a9571e226bd99043cfaf1f96267cc5de67f497563ff81100531d26610220820151527f206889ff4c58dd08ee1107191a2a5bc5dbae55c49d7d8397801799868d10f805602061022083015101527f21062ab8f8ecd8932b429a1eb8614b1e03db61bff6a5cd2d5d7ea193e90e9927610240820151527f217f9b27b934b88ffe555d682dfe6e8b6d503f86b14bbd96342bc48487a60b27602061024083015101527f1c9eda2d195cb731f903235ead6a4f7c66db49da713ecb27afee076f0eea7154610260820151527f2647c161c00b90258e1cefebb17481f8a5d91b5f9dca626e3e89a9215bcca16a602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611cd782611d75565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d1c576113918282611dda565b6108ef611e50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661097d57604051631afcd79f60e31b815260040160405180910390fd5b610d12611d24565b806001600160a01b03163b600003611dab57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d38565b600080516020612d6983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611df79190612d4c565b600060405180830381855af49150503d8060008114611e32576040519150601f19603f3d011682016040523d82523d6000602084013e611e37565b606091505b5091509150611e47858383611e6f565b95945050505050565b341561097d5760405163b398979f60e01b815260040160405180910390fd5b606082611e8457611e7f82611ece565b611ec7565b8151158015611e9b57506001600160a01b0384163b155b15611ec457604051639996b31560e01b81526001600160a01b0385166004820152602401610d38565b50805b9392505050565b805115611ede5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546000825560020290600052602060002090810190610d4a91906121c3565b6040518060e001604052806007906020820280368337509192915050565b604051806102c001604052806000815260200160008152602001611f6d604051806040016040528060008152602001600081525090565b8152602001611f8f604051806040016040528060008152602001600081525090565b8152602001611fb1604051806040016040528060008152602001600081525090565b8152602001611fd3604051806040016040528060008152602001600081525090565b8152602001611ff5604051806040016040528060008152602001600081525090565b8152602001612017604051806040016040528060008152602001600081525090565b8152602001612039604051806040016040528060008152602001600081525090565b815260200161205b604051806040016040528060008152602001600081525090565b815260200161207d604051806040016040528060008152602001600081525090565b815260200161209f604051806040016040528060008152602001600081525090565b81526020016120c1604051806040016040528060008152602001600081525090565b81526020016120e3604051806040016040528060008152602001600081525090565b8152602001612105604051806040016040528060008152602001600081525090565b8152602001612127604051806040016040528060008152602001600081525090565b8152602001612149604051806040016040528060008152602001600081525090565b815260200161216b604051806040016040528060008152602001600081525090565b815260200161218d604051806040016040528060008152602001600081525090565b81526020016121af604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b5b808211156121e95780546001600160c01b0319168155600060018201556002016121c4565b5090565b80356001600160a01b038116811461220457600080fd5b919050565b60006020828403121561221b57600080fd5b610d01826121ed565b60006020828403121561223657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b03811182821017156122765761227661223d565b60405290565b604051608081016001600160401b03811182821017156122765761227661223d565b604051601f8201601f191681016001600160401b03811182821017156122c6576122c661223d565b604052919050565b80356001600160401b038116811461220457600080fd5b6000606082840312156122f757600080fd5b604051606081018181106001600160401b03821117156123195761231961223d565b604052905080612328836122ce565b8152612336602084016122ce565b6020820152604083013560408201525092915050565b60006040828403121561235e57600080fd5b604051604081018181106001600160401b03821117156123805761238061223d565b604052823581526020928301359281019290925250919050565b6000808284036104e08112156123af57600080fd5b6123b985856122e5565b925061048080605f19830112156123cf57600080fd5b6123d7612253565b91506123e6866060870161234c565b82526123f58660a0870161234c565b60208301526124078660e0870161234c565b604083015261012061241b8782880161234c565b606084015261016061242f8882890161234c565b60808501526101a061244389828a0161234c565b60a08601526101e06124578a828b0161234c565b60c087015261022061246b8b828c0161234c565b60e088015261026061247f8c828d0161234c565b6101008901526102a06124948d828e0161234c565b878a01526124a68d6102e08e0161234c565b6101408a01526124ba8d6103208e0161234c565b868a01526124cc8d6103608e0161234c565b6101808a01526103a08c0135948901949094526103c08b01356101c08901526103e08b0135928801929092526104008a01356102008801526104208a013590870152610440890135610240870152610460890135908601529287013561028085015250506104a0850135908201526104c0909301356102c08401525092909150565b6000806040838503121561256157600080fd5b61256a836121ed565b91506020808401356001600160401b038082111561258757600080fd5b818601915086601f83011261259b57600080fd5b8135818111156125ad576125ad61223d565b6125bf601f8201601f1916850161229e565b915080825287848285010111156125d557600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff8116811461220457600080fd5b60006020828403121561261957600080fd5b610d01826125f3565b60008060008084860361012081121561263a57600080fd5b61264487876122e5565b94506080605f198201121561265857600080fd5b5061266161227c565b60608681013582526080870135602083015260a0870135604083015260c087013590820152925061269460e086016125f3565b91506126a361010086016121ed565b905092959194509250565b60005b838110156126c95781810151838201526020016126b1565b50506000910152565b60208152600082518060208401526126f18160408501602087016126ae565b601f01601f19169190910160400192915050565b60006060828403121561271757600080fd5b610d0183836122e5565b6000806040838503121561273457600080fd5b50508035926020909101359150565b6000602080838503121561275657600080fd5b82356001600160401b038082111561276d57600080fd5b818501915085601f83011261278157600080fd5b8135818111156127935761279361223d565b6127a1848260051b0161229e565b818152848101925060079190911b8301840190878211156127c157600080fd5b928401925b8184101561282d57608084890312156127df5760008081fd5b6127e761227c565b6127f0856122ce565b81526127fd8686016122ce565b86820152604061280e8187016122ce565b90820152606085810135908201528352608090930192918401916127c6565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d0457610d04612838565b634e487b7160e01b600052603260045260246000fd5b8060005b6007811015610fb857815184526020938401939091019060010161287b565b6128af82825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e08401525060808101516101006129128185018380518252602090810151910152565b60a083015191506101406129328186018480518252602090810151910152565b60c084015192506101806129528187018580518252602090810151910152565b60e085015193506101c06129728188018680518252602090810151910152565b928501519350610200926129928785018680518252602090810151910152565b61012086015194506102406129b38189018780518252602090810151910152565b928601519450610280926129d38885018780518252602090810151910152565b61016087015195506102c06129f4818a018880518252602090810151910152565b9287015180516103008a0152602001516103208901526101a0870151610340890152908601516103608801526101e0860151610380880152928501516103a08701526102208501516103c0870152918401516103e08601526102608401516104008601528301516104208501526102a0830151610440850152909101516104609092019190915250565b6000610a608201905084518252602085015160208301526040850151612ab1604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151610100612afe8185018380518252602090810151910152565b60c08701519150610140612b1e8186018480518252602090810151910152565b60e08801519250610180612b3e8187018580518252602090810151910152565b9188015192506101c091612b5e8684018580518252602090810151910152565b6101208901519350610200612b7f8188018680518252602090810151910152565b91890151935061024091612b9f8784018680518252602090810151910152565b6101608a01519450610280612bc08189018780518252602090810151910152565b918a015180516102c08901526020908101516102e08901526101a08b015180516103008a0152810151610320890152938a015180516103408901528401516103608801526101e08a015180516103808901528401516103a088015289015180516103c08801528301516103e087015261022089015180516104008801528301516104208701529088015180516104408701528201516104608601526102608801518051610480870152909101516104a08501528601516104c0840152506102a08501516104e0830152612c97610500830185612877565b612ca56105e083018461289a565b949350505050565b600060208284031215612cbf57600080fd5b81518015158114611ec757600080fd5b6001600160401b03828116828216039080821115612cef57612cef612838565b5092915050565b60006001600160401b03808316818103612d1257612d12612838565b6001019392505050565b600060208284031215612d2e57600080fd5b5051919050565b600081612d4457612d44612838565b506000190190565b60008251612d5e8184602087016126ae565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a" +"0x60a0604052306080523480156200001557600080fd5b506040516200347d3803806200347d83398101604081905262000038916200053a565b6200004262000058565b6200004f8383836200010c565b50505062000696565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a95760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001095780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b82516001600160401b031615158062000131575060208301516001600160401b031615155b806200013f57506020820151155b806200014d57506040820151155b806200015b57506060820151155b806200016657508151155b80620001795750610e108163ffffffff16105b806200018e57506301e133808163ffffffff16115b15620001ad576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b0390811668010000000000000000026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b199091161790556200024c43428562000251565b505050565b6009541580159062000320575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b0316908110620002955762000295620005f3565b600091825260209091206002909102015460098054680100000000000000009092046001600160401b031691620002cf906001906200061f565b81548110620002e257620002e2620005f3565b60009182526020909120600290910201546200031491906801000000000000000090046001600160401b03166200063b565b6001600160401b031610155b15620003ba57600854600980549091600160c01b90046001600160401b0316908110620003515762000351620005f3565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b0316906018620003948362000665565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b02600160801b600160c01b031995881668010000000000000000026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b604051606081016001600160401b0381118282101715620004d157634e487b7160e01b600052604160045260246000fd5b60405290565b604051608081016001600160401b0381118282101715620004d157634e487b7160e01b600052604160045260246000fd5b80516001600160401b03811681146200052057600080fd5b919050565b805163ffffffff811681146200052057600080fd5b60008060008385036101008112156200055257600080fd5b60608112156200056157600080fd5b6200056b620004a0565b620005768662000508565b8152620005866020870162000508565b60208201526040868101519082015293506080605f1982011215620005aa57600080fd5b50620005b5620004d7565b60608581015182526080860151602083015260a0860151604083015260c0860151908201529150620005ea60e0850162000525565b90509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8181038181111562000635576200063562000609565b92915050565b6001600160401b038281168282160390808211156200065e576200065e62000609565b5092915050565b60006001600160401b038281166002600160401b031981016200068c576200068c62000609565b6001019392505050565b608051612dbd620006c06000396000818161120d0152818161123601526113b50152612dbd6000f3fe60806040526004361061019c5760003560e01c80638584d23f116100ec578063c23b9e9e1161008a578063e030330111610064578063e03033011461060c578063f2fde38b1461062c578063f56761601461064c578063f9e50d191461066c57600080fd5b8063c23b9e9e14610587578063c8e5e498146105c0578063d24d933d146105dc57600080fd5b80639baa3cc9116100c65780639baa3cc91461047b5780639fdb54a71461049b578063ad3cb1cc146104f1578063b5adea3c1461052f57600080fd5b80638584d23f146103e15780638da5cb5b1461041e57806396c1ca611461045b57600080fd5b8063313df7b11161015957806352d1902d1161013357806352d1902d1461036857806369cc6a041461038b578063715018a6146103a0578063826e41fc146103b557600080fd5b8063313df7b1146102da578063426d3194146103125780634f1ef2861461035557600080fd5b8063013fa5fc146101a157806302b592f3146101c35780630d8e6e2c146102215780632063d4f71461024e5780632d52aad61461026e5780632f79889d1461029b575b600080fd5b3480156101ad57600080fd5b506101c16101bc366004612231565b610681565b005b3480156101cf57600080fd5b506101e36101de36600461224c565b610734565b60405161021894939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b34801561022d57600080fd5b50604080516001815260006020820181905291810191909152606001610218565b34801561025a57600080fd5b506101c16102693660046123c2565b61077f565b34801561027a57600080fd5b506101c161028936600461224c565b600a805460ff19166001179055600b55565b3480156102a757600080fd5b506008546102c290600160c01b90046001600160401b031681565b6040516001600160401b039091168152602001610218565b3480156102e657600080fd5b506008546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b34801561031e57600080fd5b506000546001546002546003546103359392919084565b604080519485526020850193909352918301526060820152608001610218565b6101c1610363366004612576565b6108d4565b34801561037457600080fd5b5061037d6108f3565b604051908152602001610218565b34801561039757600080fd5b506101c1610910565b3480156103ac57600080fd5b506101c161097f565b3480156103c157600080fd5b506008546001600160a01b031615155b6040519015158152602001610218565b3480156103ed57600080fd5b506104016103fc36600461224c565b610991565b604080519283526001600160401b03909116602083015201610218565b34801561042a57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b03166102fa565b34801561046757600080fd5b506101c161047636600461262f565b610b3b565b34801561048757600080fd5b506101c161049636600461264a565b610bc4565b3480156104a757600080fd5b506006546007546104cb916001600160401b0380821692600160401b909204169083565b604080516001600160401b03948516815293909216602084015290820152606001610218565b3480156104fd57600080fd5b50610522604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161021891906126fa565b34801561053b57600080fd5b506101c161054a36600461272d565b80516006805460208401516001600160401b03908116600160401b026001600160801b031990921693169290921791909117905560400151600755565b34801561059357600080fd5b506008546105ab90600160a01b900463ffffffff1681565b60405163ffffffff9091168152602001610218565b3480156105cc57600080fd5b506101c1600a805460ff19169055565b3480156105e857600080fd5b506004546005546104cb916001600160401b0380821692600160401b909204169083565b34801561061857600080fd5b506103d1610627366004612749565b610ce8565b34801561063857600080fd5b506101c1610647366004612231565b610d1e565b34801561065857600080fd5b506101c161066736600461276b565b610d61565b34801561067857600080fd5b5060095461037d565b610689610e0f565b6001600160a01b0381166106b05760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036106df5760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b6009818154811061074457600080fd5b6000918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6008546001600160a01b0316151580156107a457506008546001600160a01b03163314155b156107c2576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b0391821691161115806107fb575060065460208301516001600160401b03600160401b9092048216911611155b156108195760405163051c46ef60e01b815260040160405180910390fd5b6108268260400151610e6a565b6108308282610eda565b81516006805460208501516001600160401b03908116600160401b026001600160801b03199092169316929092179190911790556040820151600755610877434284610fd2565b81602001516001600160401b031682600001516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae684604001516040516108c891815260200190565b60405180910390a35050565b6108dc611202565b6108e5826112a7565b6108ef82826112e8565b5050565b60006108fd6113aa565b50600080516020612d9183398151915290565b610918610e0f565b6008546001600160a01b03161561096457600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b610987610e0f565b61097d60006113f3565b600980546000918291906109a6600183612876565b815481106109b6576109b6612889565b6000918252602090912060029091020154600160801b90046001600160401b031684106109f657604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b81811015610abd578460098281548110610a2657610a26612889565b6000918252602090912060029091020154600160801b90046001600160401b03161115610ab55760098181548110610a6057610a60612889565b90600052602060002090600202016001015460098281548110610a8557610a85612889565b906000526020600020906002020160000160109054906101000a90046001600160401b0316935093505050915091565b600101610a0a565b506009610acb600183612876565b81548110610adb57610adb612889565b9060005260206000209060020201600101546009600183610afc9190612876565b81548110610b0c57610b0c612889565b906000526020600020906002020160000160109054906101000a90046001600160401b03169250925050915091565b610b43610e0f565b610e108163ffffffff161080610b6257506301e133808163ffffffff16115b80610b80575060085463ffffffff600160a01b909104811690821611155b15610b9e576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610c095750825b90506000826001600160401b03166001148015610c255750303b155b905081158015610c33575080155b15610c515760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c7b57845460ff60401b1916600160401b1785555b610c8486611464565b610c8c611475565b610c9789898961147d565b8315610cdd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b600a5460009060ff16610d0457610cff83836115ae565b610d15565b81600b5484610d139190612876565b115b90505b92915050565b610d26610e0f565b6001600160a01b038116610d5557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610d5e816113f3565b50565b610d6d60096000611f1f565b60005b81518110156108ef576009828281518110610d8d57610d8d612889565b602090810291909101810151825460018181018555600094855293839020825160029092020180549383015160408401516001600160401b03908116600160801b0267ffffffffffffffff60801b19928216600160401b026001600160801b031990971691909416179490941793909316178255606001519082015501610d70565b33610e417f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b03161461097d5760405163118cdaa760e01b8152336004820152602401610d4c565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806108ef5760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c6400000000006044820152606401610d4c565b6000610ee46116c6565b9050610eee611f40565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a083015260005460c08301525163ce537a7760e01b815273__$5c5c07cf4f55be9472c2b47d897172e765$__9063ce537a7790610f6e90859085908890600401612aa6565b602060405180830381865af4158015610f8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610faf9190612cd5565b610fcc576040516309bde33960e01b815260040160405180910390fd5b50505050565b6009541580159061108c575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b031690811061101257611012612889565b600091825260209091206002909102015460098054600160401b9092046001600160401b03169161104590600190612876565b8154811061105557611055612889565b60009182526020909120600290910201546110809190600160401b90046001600160401b0316612cf7565b6001600160401b031610155b1561112057600854600980549091600160c01b90046001600160401b03169081106110b9576110b9612889565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b03169060186110fa83612d1e565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061128957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661127d600080516020612d91833981519152546001600160a01b031690565b6001600160a01b031614155b1561097d5760405163703e46dd60e11b815260040160405180910390fd5b6112af610e0f565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d90602001610729565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611342575060408051601f3d908101601f1916820190925261133f91810190612d44565b60015b61136a57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d4c565b600080516020612d91833981519152811461139b57604051632a87526960e21b815260048101829052602401610d4c565b6113a58383611cf6565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461097d5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b61146c611d4c565b610d5e81611d95565b61097d611d4c565b82516001600160401b03161515806114a1575060208301516001600160401b031615155b806114ae57506020820151155b806114bb57506040820151155b806114c857506060820151155b806114d257508151155b806114e45750610e108163ffffffff16105b806114f857506301e133808163ffffffff16115b15611516576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b199091161790556113a5434285610fd2565b600954600090438411806115c25750600381105b156115e05760405163b0b4387760e01b815260040160405180910390fd5b600080806115ef600185612876565b90505b8161169157866009828154811061160b5761160b612889565b60009182526020909120600290910201546001600160401b03161161165e57600191506009818154811061164157611641612889565b60009182526020909120600290910201546001600160401b031692505b6002811061169157600854600160c01b90046001600160401b03168114611691578061168981612d5d565b9150506115f2565b816116af5760405163b0b4387760e01b815260040160405180910390fd5b856116ba8489612876565b11979650505050505050565b6116ce611f5e565b620100008152600760208201527f1369aa78dc50135ad756d62c97a64a0edcd30066584168200d9d1facf82ca4f56040820151527f2cf23456d712b06f8e3aa5bf0acc3e46a3d094602a3a2b99d873bba05a4391476020604083015101527f08a35f379d2d2c490a51006697275e4db79b67b4a175c1477e262d29e25e42316060820151527f218828131bb7940ccc88c561b299755af4bf0b71ed930b129e8be0a1218139ea6020606083015101527f23a2172436c1145b36d5bc6d3b31fa1610c73a543ea443918aaa3ee175f9921b6080820151527f2502adf404d62877c310214ae9942e93c40b154d34c024bab48a3ca057e60a116020608083015101527f1bb88ada91ab7734882f7826b81275320081ac485f9cf8bfbc3ba54b6eb4dff360a0820151527f25c74a27e9a3b20114a3a91f31c20f01777e7ed913e0ef949f0285e2e7c2069b602060a083015101527f12b0ce76ac8b0dbd405ebc5dd0bae0f91aed50033c7ea36fc62aaba2b98333dc60c0820151527f185b42af49dd1cbe337a84f74b704172428e754a0bea024ab3eb2f996afb2c47602060c083015101527f21f53ad4538b45438bbf0521446070223920e3df6f9022a64cc16d7f94e85c0860e0820151527f2278ac3dedfdac7feb9725a022497175518eada52c8932fc40e6e75bea889fb8602060e083015101527f0876136f81c16298487bfb1be74d4a3487ec45645ab1d09dc2e5b865d62230df610100820151527f098c641c947ecd798dfd5e1b2fe428024cdf03061a53ff774ea8a9e3de9d3f2b602061010083015101527f15eaac2c6232d2268bf79dc47ed9666f992fb3d96ad23fb21690c21586c5472e610120820151527f0f10f1ffc54881287fda6f200bc85d8245b508d844a974098a41119867b325d0602061012083015101527f0895ceea40b085534e9739ca5442ba48b3a3592affde2b509df74521b47d8ab0610140820151527f2e12ec5800ac92fe2a8e7040bc5b435b9eb71e31380173fa7688bf81fcbba455602061014083015101527f2f5384eb5653e47576efe248e7903f463243414bfed5237dda750df3996bd918610160820151527f1c3cd6b11da8704cdc871ab4fa323d7ee57bd40ce165b49a56d5ef6489cd251a602061016083015101527f13579994957ce1554cc1e5b194fb63c9513707f627414f8442681ae736e36450610180820151527f26c9bdcd96d8e420b12974ade93ad9c312c4185213d2f6831a7c625a18890e95602061018083015101527f0cc70a1d542a9a1535ae5d9201696adc5c99c1bcebd9951dfa8afec79fa0b6446101a0820151527f10b043d9f1869181b96579d6616efc17a5df7b84c4d431d966c9094bf1e8815360206101a083015101527f198a65309d131a43b0ab1c47659d0336cfbf62b27f4727106b4fd971c73dd4036101c0820151527f23df99eac3c1947903b211b800efeb76f47d5e87b7414866543492e8c7798d1a60206101c083015101527f221cc5e47b81ce8dcfa72ef981916a8eddef12fcde59c56c62830c126ebef0de6101e0820151527f231f99340c35c9e09652a6df73c9cec5d88738cb71ff45716fdc9e9e45a4926e60206101e083015101527f2c9f1489fce0f263e03f3e97bf0a72273aafcca9325ff47786adb04a52a6d22c610200820151527f21f66e28f17e01e9fd593e16d022c4eca25bd5db96daec606d97b604cc414838602061020083015101527f2015745604a9571e226bd99043cfaf1f96267cc5de67f497563ff81100531d26610220820151527f206889ff4c58dd08ee1107191a2a5bc5dbae55c49d7d8397801799868d10f805602061022083015101527f21062ab8f8ecd8932b429a1eb8614b1e03db61bff6a5cd2d5d7ea193e90e9927610240820151527f217f9b27b934b88ffe555d682dfe6e8b6d503f86b14bbd96342bc48487a60b27602061024083015101527f1c9eda2d195cb731f903235ead6a4f7c66db49da713ecb27afee076f0eea7154610260820151527f2647c161c00b90258e1cefebb17481f8a5d91b5f9dca626e3e89a9215bcca16a602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611cff82611d9d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611d44576113a58282611e02565b6108ef611e78565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661097d57604051631afcd79f60e31b815260040160405180910390fd5b610d26611d4c565b806001600160a01b03163b600003611dd357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d4c565b600080516020612d9183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611e1f9190612d74565b600060405180830381855af49150503d8060008114611e5a576040519150601f19603f3d011682016040523d82523d6000602084013e611e5f565b606091505b5091509150611e6f858383611e97565b95945050505050565b341561097d5760405163b398979f60e01b815260040160405180910390fd5b606082611eac57611ea782611ef6565b611eef565b8151158015611ec357506001600160a01b0384163b155b15611eec57604051639996b31560e01b81526001600160a01b0385166004820152602401610d4c565b50805b9392505050565b805115611f065780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546000825560020290600052602060002090810190610d5e91906121eb565b6040518060e001604052806007906020820280368337509192915050565b604051806102c001604052806000815260200160008152602001611f95604051806040016040528060008152602001600081525090565b8152602001611fb7604051806040016040528060008152602001600081525090565b8152602001611fd9604051806040016040528060008152602001600081525090565b8152602001611ffb604051806040016040528060008152602001600081525090565b815260200161201d604051806040016040528060008152602001600081525090565b815260200161203f604051806040016040528060008152602001600081525090565b8152602001612061604051806040016040528060008152602001600081525090565b8152602001612083604051806040016040528060008152602001600081525090565b81526020016120a5604051806040016040528060008152602001600081525090565b81526020016120c7604051806040016040528060008152602001600081525090565b81526020016120e9604051806040016040528060008152602001600081525090565b815260200161210b604051806040016040528060008152602001600081525090565b815260200161212d604051806040016040528060008152602001600081525090565b815260200161214f604051806040016040528060008152602001600081525090565b8152602001612171604051806040016040528060008152602001600081525090565b8152602001612193604051806040016040528060008152602001600081525090565b81526020016121b5604051806040016040528060008152602001600081525090565b81526020016121d7604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b5b808211156122115780546001600160c01b0319168155600060018201556002016121ec565b5090565b80356001600160a01b038116811461222c57600080fd5b919050565b60006020828403121561224357600080fd5b610d1582612215565b60006020828403121561225e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b038111828210171561229e5761229e612265565b60405290565b604051608081016001600160401b038111828210171561229e5761229e612265565b604051601f8201601f191681016001600160401b03811182821017156122ee576122ee612265565b604052919050565b80356001600160401b038116811461222c57600080fd5b60006060828403121561231f57600080fd5b604051606081018181106001600160401b038211171561234157612341612265565b604052905080612350836122f6565b815261235e602084016122f6565b6020820152604083013560408201525092915050565b60006040828403121561238657600080fd5b604051604081018181106001600160401b03821117156123a8576123a8612265565b604052823581526020928301359281019290925250919050565b6000808284036104e08112156123d757600080fd5b6123e1858561230d565b925061048080605f19830112156123f757600080fd5b6123ff61227b565b915061240e8660608701612374565b825261241d8660a08701612374565b602083015261242f8660e08701612374565b604083015261012061244387828801612374565b606084015261016061245788828901612374565b60808501526101a061246b89828a01612374565b60a08601526101e061247f8a828b01612374565b60c08701526102206124938b828c01612374565b60e08801526102606124a78c828d01612374565b6101008901526102a06124bc8d828e01612374565b878a01526124ce8d6102e08e01612374565b6101408a01526124e28d6103208e01612374565b868a01526124f48d6103608e01612374565b6101808a01526103a08c0135948901949094526103c08b01356101c08901526103e08b0135928801929092526104008a01356102008801526104208a013590870152610440890135610240870152610460890135908601529287013561028085015250506104a0850135908201526104c0909301356102c08401525092909150565b6000806040838503121561258957600080fd5b61259283612215565b91506020808401356001600160401b03808211156125af57600080fd5b818601915086601f8301126125c357600080fd5b8135818111156125d5576125d5612265565b6125e7601f8201601f191685016122c6565b915080825287848285010111156125fd57600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff8116811461222c57600080fd5b60006020828403121561264157600080fd5b610d158261261b565b60008060008084860361012081121561266257600080fd5b61266c878761230d565b94506080605f198201121561268057600080fd5b506126896122a4565b60608681013582526080870135602083015260a0870135604083015260c08701359082015292506126bc60e0860161261b565b91506126cb6101008601612215565b905092959194509250565b60005b838110156126f15781810151838201526020016126d9565b50506000910152565b60208152600082518060208401526127198160408501602087016126d6565b601f01601f19169190910160400192915050565b60006060828403121561273f57600080fd5b610d15838361230d565b6000806040838503121561275c57600080fd5b50508035926020909101359150565b6000602080838503121561277e57600080fd5b82356001600160401b038082111561279557600080fd5b818501915085601f8301126127a957600080fd5b8135818111156127bb576127bb612265565b6127c9848260051b016122c6565b818152848101925060079190911b8301840190878211156127e957600080fd5b928401925b8184101561285557608084890312156128075760008081fd5b61280f6122a4565b612818856122f6565b81526128258686016122f6565b8682015260406128368187016122f6565b90820152606085810135908201528352608090930192918401916127ee565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d1857610d18612860565b634e487b7160e01b600052603260045260246000fd5b8060005b6007811015610fcc5781518452602093840193909101906001016128a3565b6128d782825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e084015250608081015161010061293a8185018380518252602090810151910152565b60a0830151915061014061295a8186018480518252602090810151910152565b60c0840151925061018061297a8187018580518252602090810151910152565b60e085015193506101c061299a8188018680518252602090810151910152565b928501519350610200926129ba8785018680518252602090810151910152565b61012086015194506102406129db8189018780518252602090810151910152565b928601519450610280926129fb8885018780518252602090810151910152565b61016087015195506102c0612a1c818a018880518252602090810151910152565b9287015180516103008a0152602001516103208901526101a0870151610340890152908601516103608801526101e0860151610380880152928501516103a08701526102208501516103c0870152918401516103e08601526102608401516104008601528301516104208501526102a0830151610440850152909101516104609092019190915250565b6000610a608201905084518252602085015160208301526040850151612ad9604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a0850151610100612b268185018380518252602090810151910152565b60c08701519150610140612b468186018480518252602090810151910152565b60e08801519250610180612b668187018580518252602090810151910152565b9188015192506101c091612b868684018580518252602090810151910152565b6101208901519350610200612ba78188018680518252602090810151910152565b91890151935061024091612bc78784018680518252602090810151910152565b6101608a01519450610280612be88189018780518252602090810151910152565b918a015180516102c08901526020908101516102e08901526101a08b015180516103008a0152810151610320890152938a015180516103408901528401516103608801526101e08a015180516103808901528401516103a088015289015180516103c08801528301516103e087015261022089015180516104008801528301516104208701529088015180516104408701528201516104608601526102608801518051610480870152909101516104a08501528601516104c0840152506102a08501516104e0830152612cbf61050083018561289f565b612ccd6105e08301846128c2565b949350505050565b600060208284031215612ce757600080fd5b81518015158114611eef57600080fd5b6001600160401b03828116828216039080821115612d1757612d17612860565b5092915050565b60006001600160401b03808316818103612d3a57612d3a612860565b6001019392505050565b600060208284031215612d5657600080fd5b5051919050565b600081612d6c57612d6c612860565b506000190190565b60008251612d868184602087016126d6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a" diff --git a/contract-bindings/artifacts/LightClient_bytecode.json b/contract-bindings/artifacts/LightClient_bytecode.json index 72bbf9587..4fb1f4937 100644 --- a/contract-bindings/artifacts/LightClient_bytecode.json +++ b/contract-bindings/artifacts/LightClient_bytecode.json @@ -1 +1 @@ -"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612a3862000104600039600081816111120152818161113b01526112ba0152612a386000f3fe6080604052600436106101405760003560e01c8063826e41fc116100b6578063ad3cb1cc1161006f578063ad3cb1cc14610468578063c23b9e9e146104a6578063d24d933d146104df578063e03033011461050f578063f2fde38b1461052f578063f9e50d191461054f57600080fd5b8063826e41fc1461032c5780638584d23f146103585780638da5cb5b1461039557806396c1ca61146103d25780639baa3cc9146103f25780639fdb54a71461041257600080fd5b8063313df7b111610108578063313df7b114610251578063426d3194146102895780634f1ef286146102cc57806352d1902d146102df57806369cc6a0414610302578063715018a61461031757600080fd5b8063013fa5fc1461014557806302b592f3146101675780630d8e6e2c146101c55780632063d4f7146101f25780632f79889d14610212575b600080fd5b34801561015157600080fd5b50610165610160366004611fbe565b610564565b005b34801561017357600080fd5b50610187610182366004611fd9565b610617565b6040516101bc94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b3480156101d157600080fd5b506040805160018152600060208201819052918101919091526060016101bc565b3480156101fe57600080fd5b5061016561020d36600461212d565b610662565b34801561021e57600080fd5b5060085461023990600160c01b90046001600160401b031681565b6040516001600160401b0390911681526020016101bc565b34801561025d57600080fd5b50600854610271906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b34801561029557600080fd5b506000546001546002546003546102ac9392919084565b6040805194855260208501939093529183015260608201526080016101bc565b6101656102da3660046122e1565b6107b7565b3480156102eb57600080fd5b506102f46107d6565b6040519081526020016101bc565b34801561030e57600080fd5b506101656107f3565b34801561032357600080fd5b50610165610862565b34801561033857600080fd5b506008546001600160a01b031615155b60405190151581526020016101bc565b34801561036457600080fd5b50610378610373366004611fd9565b610874565b604080519283526001600160401b039091166020830152016101bc565b3480156103a157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610271565b3480156103de57600080fd5b506101656103ed36600461239a565b610a1e565b3480156103fe57600080fd5b5061016561040d3660046123b5565b610a93565b34801561041e57600080fd5b50600654600754610442916001600160401b0380821692600160401b909204169083565b604080516001600160401b039485168152939092166020840152908201526060016101bc565b34801561047457600080fd5b50610499604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101bc9190612486565b3480156104b257600080fd5b506008546104ca90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101bc565b3480156104eb57600080fd5b50600454600554610442916001600160401b0380821692600160401b909204169083565b34801561051b57600080fd5b5061034861052a3660046124b9565b610bb7565b34801561053b57600080fd5b5061016561054a366004611fbe565b610cd1565b34801561055b57600080fd5b506009546102f4565b61056c610d14565b6001600160a01b0381166105935760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036105c25760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b6009818154811061062757600080fd5b6000918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6008546001600160a01b03161515801561068757506008546001600160a01b03163314155b156106a5576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b0391821691161115806106de575060065460208301516001600160401b03600160401b9092048216911611155b156106fc5760405163051c46ef60e01b815260040160405180910390fd5b6107098260400151610d6f565b6107138282610ddf565b81516006805460208501516001600160401b03908116600160401b026001600160801b0319909216931692909217919091179055604082015160075561075a434284610ed7565b81602001516001600160401b031682600001516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae684604001516040516107ab91815260200190565b60405180910390a35050565b6107bf611107565b6107c8826111ac565b6107d282826111ed565b5050565b60006107e06112af565b50600080516020612a0c83398151915290565b6107fb610d14565b6008546001600160a01b03161561084757600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b61086a610d14565b61086060006112f8565b600980546000918291906108896001836124f1565b8154811061089957610899612504565b6000918252602090912060029091020154600160801b90046001600160401b031684106108d957604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b818110156109a057846009828154811061090957610909612504565b6000918252602090912060029091020154600160801b90046001600160401b03161115610998576009818154811061094357610943612504565b9060005260206000209060020201600101546009828154811061096857610968612504565b906000526020600020906002020160000160109054906101000a90046001600160401b0316935093505050915091565b6001016108ed565b5060096109ae6001836124f1565b815481106109be576109be612504565b90600052602060002090600202016001015460096001836109df91906124f1565b815481106109ef576109ef612504565b906000526020600020906002020160000160109054906101000a90046001600160401b03169250925050915091565b610a26610d14565b610e108163ffffffff161080610a4f575060085463ffffffff600160a01b909104811690821611155b15610a6d576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610ad85750825b90506000826001600160401b03166001148015610af45750303b155b905081158015610b02575080155b15610b205760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b4a57845460ff60401b1916600160401b1785555b610b5386611369565b610b5b61137a565b610b66898989611382565b8315610bac57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60095460009043841180610bcb5750600381105b15610be95760405163b0b4387760e01b815260040160405180910390fd5b60008080610bf86001856124f1565b90505b81610c9a578660098281548110610c1457610c14612504565b60009182526020909120600290910201546001600160401b031611610c67576001915060098181548110610c4a57610c4a612504565b60009182526020909120600290910201546001600160401b031692505b60028110610c9a57600854600160c01b90046001600160401b03168114610c9a5780610c928161251a565b915050610bfb565b81610cb85760405163b0b4387760e01b815260040160405180910390fd5b85610cc384896124f1565b119450505050505b92915050565b610cd9610d14565b6001600160a01b038116610d0857604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610d11816112f8565b50565b33610d467f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108605760405163118cdaa760e01b8152336004820152602401610cff565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806107d25760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c6400000000006044820152606401610cff565b6000610de961149f565b9050610df3611cf7565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a083015260005460c08301525163ce537a7760e01b815273__$5c5c07cf4f55be9472c2b47d897172e765$__9063ce537a7790610e7390859085908890600401612738565b602060405180830381865af4158015610e90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb49190612967565b610ed1576040516309bde33960e01b815260040160405180910390fd5b50505050565b60095415801590610f91575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b0316908110610f1757610f17612504565b600091825260209091206002909102015460098054600160401b9092046001600160401b031691610f4a906001906124f1565b81548110610f5a57610f5a612504565b6000918252602090912060029091020154610f859190600160401b90046001600160401b0316612989565b6001600160401b031610155b1561102557600854600980549091600160c01b90046001600160401b0316908110610fbe57610fbe612504565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b0316906018610fff836129b0565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061118e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611182600080516020612a0c833981519152546001600160a01b031690565b6001600160a01b031614155b156108605760405163703e46dd60e11b815260040160405180910390fd5b6111b4610d14565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200161060c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611247575060408051601f3d908101601f19168201909252611244918101906129d6565b60015b61126f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610cff565b600080516020612a0c83398151915281146112a057604051632a87526960e21b815260048101829052602401610cff565b6112aa8383611ace565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108605760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611371611b24565b610d1181611b6d565b610860611b24565b82516001600160401b03161515806113a6575060208301516001600160401b031615155b806113b357506020820151155b806113c057506040820151155b806113cd57506060820151155b806113d757508151155b806113e95750610e108163ffffffff16105b15611407576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b199091161790556112aa434285610ed7565b6114a7611d15565b621000008152600760208201527f23783d0e9777b7af65fbf849da7edb75e74b1eaf503e025d7f2f7f80991befa26040820151527f2a4e2fe8adfa53f468525582d5184c4c70bbdb946c21f216418a9879705e54a76020604083015101527f0624b2c1e77f24afceaf39451743b9fa80d5853fca7ba00389c675650774009b6060820151527f250d7719e94ca2df00dfe327938f5a8d4d837779b99837ca777a53d39127b1796020606083015101527f0dc09515152eaea66d0db2f571cc995e369d26fe647394f10db5398c917519dc6080820151527f1273144d6cec2c4a68b24a149379c0f5592bb7fbddbe32fa171919950ca404cb6020608083015101527f119521bb68caec216e2f05eeb466fb3abfe1f39baf7fe7cb392ea057b6a2d9bf60a0820151527f2d52adeaba8045e53ab526fe9982d0ea452def6b3ea0253d27a19ef3b46e8428602060a083015101527f16c3b5b217d302975a920d13374524d7a52e4a50fd7fb930842271ebf4a84efd60c0820151527f200788916b907b196972bde304318e885a2521514b2db5e4a11899c51204f089602060c083015101527f1127581afe753defca9aef12e7332db9978a200b1699ce3888c0f3aea6111dc360e0820151527f0881e13f00723be1a04872ed02b2d078c31e80feaf27724e262ce97c2cb0bb1d602060e083015101527f1482a3a6bb91d6483d153683e2404f2f5546e0e895530fdf132091498406e3de610100820151527efa52db3d52d905ead1248102f3a80a43a90d8400c68f60a62c543c417b2f4b602061010083015101527f0a57dadd4a55199525ac6ac6fabc87a4cccfdc98142bcef9dbf47de00ecc5164610120820151527f18d95abd9b8e12c36936aa218cfff582548a6bbff25c338c2006eaeb1fe5b696602061012083015101527f2bc40e91dd169b8bc143a02952a1b6c6e627bfeb7a2bbe5078e14123f3c54c1c610140820151527f108d65a20c579b6d9883275eb6889fc3f5fc79735ca9f611a13b67daa2fbc8d0602061014083015101527f21bc1f86d0608e5f0626b467ee6f8282b619223f60a7acb0fc63ba7bdaf783be610160820151527f05ef3282f8eef01515fb9a8a7d6ca06b8b007d1d512403efb268fb03ce5f09e9602061016083015101527f2cab66c1cb5a83869e73ac34fbe467486999babd541d9010ee9a804806eee4ef610180820151527f2db1982419c5a4a17593acff9535fa967683d75c8aec01319b64b84aada2ad84602061018083015101527f2c38667c6c7eb868bdd30c34dd3f4b84d9b9b1a27d7867b364c8b7831423e9086101a0820151527f2b2cb4044dd51165c48138219d51cf8d1689f91ed3eeefead6e055eb488a2ce260206101a083015101527f2d48e54703011df2c74a14dafde3af4fd83ec71875d8ddc3554658640cc955016101c0820151527f243a99d80d32eb5408b59d5b08302bede070d3fb0a8efe2f2262f865bffb4d0d60206101c083015101527f0455d2325bf6269a66f07d838f55f36947a3cd9b87edd8480bced95cbb45cc116101e0820151527f0f66d9085a6ed60b838179987e240992bff4c0516ccf6ccde4a1ca94ce8b986460206101e083015101527f2bac0d23c8585d1487ec611b5effc97e5852fea43a7cba36ccdd2c207931f394610200820151527f1860b54e01a06aea5adb4b13bf5baebab92b736807a3a89ff2040992b06ee6ec602061020083015101527f0c0bfa1c2fc6f8ed01233d5168db1e1dfe725504f032f669f50a92ae77c72906610220820151527f0d741e124c7d1069b8a400cbcdcfd90128a533901ad4de1e037fe72984dc34cf602061022083015101527f01cfed30085c9efce04668205794aa39b1a8ee591234b4c77a22f8c26d899e05610240820151527f2ab68ac82d36cedb647d14a5b0035e8c9a0be84780b7bae1133a27a880966ed1602061024083015101527f072e1d50f8b5cf8d574b3847276477d95bbd5116351000841f728da44f4043b5610260820151527f23f8ea6eacd0876d57220f57eabacbe76a2323411663731a251d5dca36f1b59f602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611ad782611b75565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b1c576112aa8282611bda565b6107d2611c50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086057604051631afcd79f60e31b815260040160405180910390fd5b610cd9611b24565b806001600160a01b03163b600003611bab57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610cff565b600080516020612a0c83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611bf791906129ef565b600060405180830381855af49150503d8060008114611c32576040519150601f19603f3d011682016040523d82523d6000602084013e611c37565b606091505b5091509150611c47858383611c6f565b95945050505050565b34156108605760405163b398979f60e01b815260040160405180910390fd5b606082611c8457611c7f82611cce565b611cc7565b8151158015611c9b57506001600160a01b0384163b155b15611cc457604051639996b31560e01b81526001600160a01b0385166004820152602401610cff565b50805b9392505050565b805115611cde5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060e001604052806007906020820280368337509192915050565b604051806102c001604052806000815260200160008152602001611d4c604051806040016040528060008152602001600081525090565b8152602001611d6e604051806040016040528060008152602001600081525090565b8152602001611d90604051806040016040528060008152602001600081525090565b8152602001611db2604051806040016040528060008152602001600081525090565b8152602001611dd4604051806040016040528060008152602001600081525090565b8152602001611df6604051806040016040528060008152602001600081525090565b8152602001611e18604051806040016040528060008152602001600081525090565b8152602001611e3a604051806040016040528060008152602001600081525090565b8152602001611e5c604051806040016040528060008152602001600081525090565b8152602001611e7e604051806040016040528060008152602001600081525090565b8152602001611ea0604051806040016040528060008152602001600081525090565b8152602001611ec2604051806040016040528060008152602001600081525090565b8152602001611ee4604051806040016040528060008152602001600081525090565b8152602001611f06604051806040016040528060008152602001600081525090565b8152602001611f28604051806040016040528060008152602001600081525090565b8152602001611f4a604051806040016040528060008152602001600081525090565b8152602001611f6c604051806040016040528060008152602001600081525090565b8152602001611f8e604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b80356001600160a01b0381168114611fb957600080fd5b919050565b600060208284031215611fd057600080fd5b611cc782611fa2565b600060208284031215611feb57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b038111828210171561202b5761202b611ff2565b60405290565b604051601f8201601f191681016001600160401b038111828210171561205957612059611ff2565b604052919050565b80356001600160401b0381168114611fb957600080fd5b60006060828403121561208a57600080fd5b604051606081018181106001600160401b03821117156120ac576120ac611ff2565b6040529050806120bb83612061565b81526120c960208401612061565b6020820152604083013560408201525092915050565b6000604082840312156120f157600080fd5b604051604081018181106001600160401b038211171561211357612113611ff2565b604052823581526020928301359281019290925250919050565b6000808284036104e081121561214257600080fd5b61214c8585612078565b925061048080605f198301121561216257600080fd5b61216a612008565b915061217986606087016120df565b82526121888660a087016120df565b602083015261219a8660e087016120df565b60408301526101206121ae878288016120df565b60608401526101606121c2888289016120df565b60808501526101a06121d689828a016120df565b60a08601526101e06121ea8a828b016120df565b60c08701526102206121fe8b828c016120df565b60e08801526102606122128c828d016120df565b6101008901526102a06122278d828e016120df565b878a01526122398d6102e08e016120df565b6101408a015261224d8d6103208e016120df565b868a015261225f8d6103608e016120df565b6101808a01526103a08c0135948901949094526103c08b01356101c08901526103e08b0135928801929092526104008a01356102008801526104208a013590870152610440890135610240870152610460890135908601529287013561028085015250506104a0850135908201526104c0909301356102c08401525092909150565b600080604083850312156122f457600080fd5b6122fd83611fa2565b91506020808401356001600160401b038082111561231a57600080fd5b818601915086601f83011261232e57600080fd5b81358181111561234057612340611ff2565b612352601f8201601f19168501612031565b9150808252878482850101111561236857600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff81168114611fb957600080fd5b6000602082840312156123ac57600080fd5b611cc782612386565b6000806000808486036101208112156123cd57600080fd5b6123d78787612078565b94506080605f19820112156123eb57600080fd5b50604051608081018181106001600160401b038211171561240e5761240e611ff2565b8060405250606086013581526080860135602082015260a0860135604082015260c086013560608201528093505061244860e08601612386565b91506124576101008601611fa2565b905092959194509250565b60005b8381101561247d578181015183820152602001612465565b50506000910152565b60208152600082518060208401526124a5816040850160208701612462565b601f01601f19169190910160400192915050565b600080604083850312156124cc57600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b81810381811115610ccb57610ccb6124db565b634e487b7160e01b600052603260045260246000fd5b600081612529576125296124db565b506000190190565b8060005b6007811015610ed1578151845260209384019390910190600101612535565b61256982825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e08401525060808101516101006125cc8185018380518252602090810151910152565b60a083015191506101406125ec8186018480518252602090810151910152565b60c0840151925061018061260c8187018580518252602090810151910152565b60e085015193506101c061262c8188018680518252602090810151910152565b9285015193506102009261264c8785018680518252602090810151910152565b610120860151945061024061266d8189018780518252602090810151910152565b9286015194506102809261268d8885018780518252602090810151910152565b61016087015195506102c06126ae818a018880518252602090810151910152565b9287015180516103008a0152602001516103208901526101a0870151610340890152908601516103608801526101e0860151610380880152928501516103a08701526102208501516103c0870152918401516103e08601526102608401516104008601528301516104208501526102a0830151610440850152909101516104609092019190915250565b6000610a60820190508451825260208501516020830152604085015161276b604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a08501516101006127b88185018380518252602090810151910152565b60c087015191506101406127d88186018480518252602090810151910152565b60e088015192506101806127f88187018580518252602090810151910152565b9188015192506101c0916128188684018580518252602090810151910152565b61012089015193506102006128398188018680518252602090810151910152565b918901519350610240916128598784018680518252602090810151910152565b6101608a0151945061028061287a8189018780518252602090810151910152565b918a015180516102c08901526020908101516102e08901526101a08b015180516103008a0152810151610320890152938a015180516103408901528401516103608801526101e08a015180516103808901528401516103a088015289015180516103c08801528301516103e087015261022089015180516104008801528301516104208701529088015180516104408701528201516104608601526102608801518051610480870152909101516104a08501528601516104c0840152506102a08501516104e0830152612951610500830185612531565b61295f6105e0830184612554565b949350505050565b60006020828403121561297957600080fd5b81518015158114611cc757600080fd5b6001600160401b038281168282160390808211156129a9576129a96124db565b5092915050565b60006001600160401b038083168181036129cc576129cc6124db565b6001019392505050565b6000602082840312156129e857600080fd5b5051919050565b60008251612a01818460208701612462565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a" +"0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612a6062000104600039600081816111260152818161114f01526112ce0152612a606000f3fe6080604052600436106101405760003560e01c8063826e41fc116100b6578063ad3cb1cc1161006f578063ad3cb1cc14610468578063c23b9e9e146104a6578063d24d933d146104df578063e03033011461050f578063f2fde38b1461052f578063f9e50d191461054f57600080fd5b8063826e41fc1461032c5780638584d23f146103585780638da5cb5b1461039557806396c1ca61146103d25780639baa3cc9146103f25780639fdb54a71461041257600080fd5b8063313df7b111610108578063313df7b114610251578063426d3194146102895780634f1ef286146102cc57806352d1902d146102df57806369cc6a0414610302578063715018a61461031757600080fd5b8063013fa5fc1461014557806302b592f3146101675780630d8e6e2c146101c55780632063d4f7146101f25780632f79889d14610212575b600080fd5b34801561015157600080fd5b50610165610160366004611fe6565b610564565b005b34801561017357600080fd5b50610187610182366004612001565b610617565b6040516101bc94939291906001600160401b039485168152928416602084015292166040820152606081019190915260800190565b60405180910390f35b3480156101d157600080fd5b506040805160018152600060208201819052918101919091526060016101bc565b3480156101fe57600080fd5b5061016561020d366004612155565b610662565b34801561021e57600080fd5b5060085461023990600160c01b90046001600160401b031681565b6040516001600160401b0390911681526020016101bc565b34801561025d57600080fd5b50600854610271906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b34801561029557600080fd5b506000546001546002546003546102ac9392919084565b6040805194855260208501939093529183015260608201526080016101bc565b6101656102da366004612309565b6107b7565b3480156102eb57600080fd5b506102f46107d6565b6040519081526020016101bc565b34801561030e57600080fd5b506101656107f3565b34801561032357600080fd5b50610165610862565b34801561033857600080fd5b506008546001600160a01b031615155b60405190151581526020016101bc565b34801561036457600080fd5b50610378610373366004612001565b610874565b604080519283526001600160401b039091166020830152016101bc565b3480156103a157600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610271565b3480156103de57600080fd5b506101656103ed3660046123c2565b610a1e565b3480156103fe57600080fd5b5061016561040d3660046123dd565b610aa7565b34801561041e57600080fd5b50600654600754610442916001600160401b0380821692600160401b909204169083565b604080516001600160401b039485168152939092166020840152908201526060016101bc565b34801561047457600080fd5b50610499604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101bc91906124ae565b3480156104b257600080fd5b506008546104ca90600160a01b900463ffffffff1681565b60405163ffffffff90911681526020016101bc565b3480156104eb57600080fd5b50600454600554610442916001600160401b0380821692600160401b909204169083565b34801561051b57600080fd5b5061034861052a3660046124e1565b610bcb565b34801561053b57600080fd5b5061016561054a366004611fe6565b610ce5565b34801561055b57600080fd5b506009546102f4565b61056c610d28565b6001600160a01b0381166105935760405163e6c4247b60e01b815260040160405180910390fd5b6008546001600160a01b03908116908216036105c25760405163a863aec960e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0383169081179091556040519081527f8017bb887fdf8fca4314a9d40f6e73b3b81002d67e5cfa85d88173af6aa46072906020015b60405180910390a150565b6009818154811061062757600080fd5b6000918252602090912060029091020180546001909101546001600160401b038083169350600160401b8304811692600160801b9004169084565b6008546001600160a01b03161515801561068757506008546001600160a01b03163314155b156106a5576040516301474c8f60e71b815260040160405180910390fd5b60065482516001600160401b0391821691161115806106de575060065460208301516001600160401b03600160401b9092048216911611155b156106fc5760405163051c46ef60e01b815260040160405180910390fd5b6107098260400151610d83565b6107138282610df3565b81516006805460208501516001600160401b03908116600160401b026001600160801b0319909216931692909217919091179055604082015160075561075a434284610eeb565b81602001516001600160401b031682600001516001600160401b03167fa04a773924505a418564363725f56832f5772e6b8d0dbd6efce724dfe803dae684604001516040516107ab91815260200190565b60405180910390a35050565b6107bf61111b565b6107c8826111c0565b6107d28282611201565b5050565b60006107e06112c3565b50600080516020612a3483398151915290565b6107fb610d28565b6008546001600160a01b03161561084757600880546001600160a01b03191690556040517f9a5f57de856dd668c54dd95e5c55df93432171cbca49a8776d5620ea59c0245090600090a1565b60405163a863aec960e01b815260040160405180910390fd5b565b61086a610d28565b610860600061130c565b60098054600091829190610889600183612519565b815481106108995761089961252c565b6000918252602090912060029091020154600160801b90046001600160401b031684106108d957604051631856a49960e21b815260040160405180910390fd5b600854600160c01b90046001600160401b03165b818110156109a05784600982815481106109095761090961252c565b6000918252602090912060029091020154600160801b90046001600160401b0316111561099857600981815481106109435761094361252c565b906000526020600020906002020160010154600982815481106109685761096861252c565b906000526020600020906002020160000160109054906101000a90046001600160401b0316935093505050915091565b6001016108ed565b5060096109ae600183612519565b815481106109be576109be61252c565b90600052602060002090600202016001015460096001836109df9190612519565b815481106109ef576109ef61252c565b906000526020600020906002020160000160109054906101000a90046001600160401b03169250925050915091565b610a26610d28565b610e108163ffffffff161080610a4557506301e133808163ffffffff16115b80610a63575060085463ffffffff600160a01b909104811690821611155b15610a81576040516307a5077760e51b815260040160405180910390fd5b6008805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610aec5750825b90506000826001600160401b03166001148015610b085750303b155b905081158015610b16575080155b15610b345760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b5e57845460ff60401b1916600160401b1785555b610b678661137d565b610b6f61138e565b610b7a898989611396565b8315610bc057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b60095460009043841180610bdf5750600381105b15610bfd5760405163b0b4387760e01b815260040160405180910390fd5b60008080610c0c600185612519565b90505b81610cae578660098281548110610c2857610c2861252c565b60009182526020909120600290910201546001600160401b031611610c7b576001915060098181548110610c5e57610c5e61252c565b60009182526020909120600290910201546001600160401b031692505b60028110610cae57600854600160c01b90046001600160401b03168114610cae5780610ca681612542565b915050610c0f565b81610ccc5760405163b0b4387760e01b815260040160405180910390fd5b85610cd78489612519565b119450505050505b92915050565b610ced610d28565b6001600160a01b038116610d1c57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b610d258161130c565b50565b33610d5a7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146108605760405163118cdaa760e01b8152336004820152602401610d13565b7f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000018110806107d25760405162461bcd60e51b815260206004820152601b60248201527f426e3235343a20696e76616c6964207363616c6172206669656c6400000000006044820152606401610d13565b6000610dfd6114c7565b9050610e07611d1f565b83516001600160401b0390811682526020850151168160016020020152604084810151828201526001546060830152600254608083015260035460a083015260005460c08301525163ce537a7760e01b815273__$5c5c07cf4f55be9472c2b47d897172e765$__9063ce537a7790610e8790859085908890600401612760565b602060405180830381865af4158015610ea4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ec8919061298f565b610ee5576040516309bde33960e01b815260040160405180910390fd5b50505050565b60095415801590610fa5575060085460098054600160a01b830463ffffffff1692600160c01b90046001600160401b0316908110610f2b57610f2b61252c565b600091825260209091206002909102015460098054600160401b9092046001600160401b031691610f5e90600190612519565b81548110610f6e57610f6e61252c565b6000918252602090912060029091020154610f999190600160401b90046001600160401b03166129b1565b6001600160401b031610155b1561103957600854600980549091600160c01b90046001600160401b0316908110610fd257610fd261252c565b60009182526020822060029091020180546001600160c01b03191681556001015560088054600160c01b90046001600160401b0316906018611013836129d8565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505b604080516080810182526001600160401b0394851681529284166020808501918252830151851684830190815292909101516060840190815260098054600181018255600091909152935160029094027f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af81018054935194518716600160801b0267ffffffffffffffff60801b19958816600160401b026001600160801b03199095169690971695909517929092179290921693909317909155517f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7b090910155565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806111a257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611196600080516020612a34833981519152546001600160a01b031690565b6001600160a01b031614155b156108605760405163703e46dd60e11b815260040160405180910390fd5b6111c8610d28565b6040516001600160a01b03821681527ff78721226efe9a1bb678189a16d1554928b9f2192e2cb93eeda83b79fa40007d9060200161060c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561125b575060408051601f3d908101601f19168201909252611258918101906129fe565b60015b61128357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610d13565b600080516020612a3483398151915281146112b457604051632a87526960e21b815260048101829052602401610d13565b6112be8383611af6565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108605760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b611385611b4c565b610d2581611b95565b610860611b4c565b82516001600160401b03161515806113ba575060208301516001600160401b031615155b806113c757506020820151155b806113d457506040820151155b806113e157506060820151155b806113eb57508151155b806113fd5750610e108163ffffffff16105b8061141157506301e133808163ffffffff16115b1561142f576040516350dd03f760e11b815260040160405180910390fd5b8251600480546020808701516001600160401b03908116600160401b026001600160801b031993841691909516908117851790935560408088015160058190558751600055918701516001558601516002556060860151600355600680549092169092179092179091556007556008805463ffffffff8316600160a01b0263ffffffff60a01b199091161790556112be434285610eeb565b6114cf611d3d565b621000008152600760208201527f23783d0e9777b7af65fbf849da7edb75e74b1eaf503e025d7f2f7f80991befa26040820151527f2a4e2fe8adfa53f468525582d5184c4c70bbdb946c21f216418a9879705e54a76020604083015101527f0624b2c1e77f24afceaf39451743b9fa80d5853fca7ba00389c675650774009b6060820151527f250d7719e94ca2df00dfe327938f5a8d4d837779b99837ca777a53d39127b1796020606083015101527f0dc09515152eaea66d0db2f571cc995e369d26fe647394f10db5398c917519dc6080820151527f1273144d6cec2c4a68b24a149379c0f5592bb7fbddbe32fa171919950ca404cb6020608083015101527f119521bb68caec216e2f05eeb466fb3abfe1f39baf7fe7cb392ea057b6a2d9bf60a0820151527f2d52adeaba8045e53ab526fe9982d0ea452def6b3ea0253d27a19ef3b46e8428602060a083015101527f16c3b5b217d302975a920d13374524d7a52e4a50fd7fb930842271ebf4a84efd60c0820151527f200788916b907b196972bde304318e885a2521514b2db5e4a11899c51204f089602060c083015101527f1127581afe753defca9aef12e7332db9978a200b1699ce3888c0f3aea6111dc360e0820151527f0881e13f00723be1a04872ed02b2d078c31e80feaf27724e262ce97c2cb0bb1d602060e083015101527f1482a3a6bb91d6483d153683e2404f2f5546e0e895530fdf132091498406e3de610100820151527efa52db3d52d905ead1248102f3a80a43a90d8400c68f60a62c543c417b2f4b602061010083015101527f0a57dadd4a55199525ac6ac6fabc87a4cccfdc98142bcef9dbf47de00ecc5164610120820151527f18d95abd9b8e12c36936aa218cfff582548a6bbff25c338c2006eaeb1fe5b696602061012083015101527f2bc40e91dd169b8bc143a02952a1b6c6e627bfeb7a2bbe5078e14123f3c54c1c610140820151527f108d65a20c579b6d9883275eb6889fc3f5fc79735ca9f611a13b67daa2fbc8d0602061014083015101527f21bc1f86d0608e5f0626b467ee6f8282b619223f60a7acb0fc63ba7bdaf783be610160820151527f05ef3282f8eef01515fb9a8a7d6ca06b8b007d1d512403efb268fb03ce5f09e9602061016083015101527f2cab66c1cb5a83869e73ac34fbe467486999babd541d9010ee9a804806eee4ef610180820151527f2db1982419c5a4a17593acff9535fa967683d75c8aec01319b64b84aada2ad84602061018083015101527f2c38667c6c7eb868bdd30c34dd3f4b84d9b9b1a27d7867b364c8b7831423e9086101a0820151527f2b2cb4044dd51165c48138219d51cf8d1689f91ed3eeefead6e055eb488a2ce260206101a083015101527f2d48e54703011df2c74a14dafde3af4fd83ec71875d8ddc3554658640cc955016101c0820151527f243a99d80d32eb5408b59d5b08302bede070d3fb0a8efe2f2262f865bffb4d0d60206101c083015101527f0455d2325bf6269a66f07d838f55f36947a3cd9b87edd8480bced95cbb45cc116101e0820151527f0f66d9085a6ed60b838179987e240992bff4c0516ccf6ccde4a1ca94ce8b986460206101e083015101527f2bac0d23c8585d1487ec611b5effc97e5852fea43a7cba36ccdd2c207931f394610200820151527f1860b54e01a06aea5adb4b13bf5baebab92b736807a3a89ff2040992b06ee6ec602061020083015101527f0c0bfa1c2fc6f8ed01233d5168db1e1dfe725504f032f669f50a92ae77c72906610220820151527f0d741e124c7d1069b8a400cbcdcfd90128a533901ad4de1e037fe72984dc34cf602061022083015101527f01cfed30085c9efce04668205794aa39b1a8ee591234b4c77a22f8c26d899e05610240820151527f2ab68ac82d36cedb647d14a5b0035e8c9a0be84780b7bae1133a27a880966ed1602061024083015101527f072e1d50f8b5cf8d574b3847276477d95bbd5116351000841f728da44f4043b5610260820151527f23f8ea6eacd0876d57220f57eabacbe76a2323411663731a251d5dca36f1b59f602061026083015101527fb0838893ec1f237e8b07323b0744599f4e97b598b3b589bcc2bc37b8d5c418016102808201527fc18393c0fa30fe4e8b038e357ad851eae8de9107584effe7c7f1f651b2010e266102a082015290565b611aff82611b9d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611b44576112be8282611c02565b6107d2611c78565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661086057604051631afcd79f60e31b815260040160405180910390fd5b610ced611b4c565b806001600160a01b03163b600003611bd357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610d13565b600080516020612a3483398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b031684604051611c1f9190612a17565b600060405180830381855af49150503d8060008114611c5a576040519150601f19603f3d011682016040523d82523d6000602084013e611c5f565b606091505b5091509150611c6f858383611c97565b95945050505050565b34156108605760405163b398979f60e01b815260040160405180910390fd5b606082611cac57611ca782611cf6565b611cef565b8151158015611cc357506001600160a01b0384163b155b15611cec57604051639996b31560e01b81526001600160a01b0385166004820152602401610d13565b50805b9392505050565b805115611d065780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6040518060e001604052806007906020820280368337509192915050565b604051806102c001604052806000815260200160008152602001611d74604051806040016040528060008152602001600081525090565b8152602001611d96604051806040016040528060008152602001600081525090565b8152602001611db8604051806040016040528060008152602001600081525090565b8152602001611dda604051806040016040528060008152602001600081525090565b8152602001611dfc604051806040016040528060008152602001600081525090565b8152602001611e1e604051806040016040528060008152602001600081525090565b8152602001611e40604051806040016040528060008152602001600081525090565b8152602001611e62604051806040016040528060008152602001600081525090565b8152602001611e84604051806040016040528060008152602001600081525090565b8152602001611ea6604051806040016040528060008152602001600081525090565b8152602001611ec8604051806040016040528060008152602001600081525090565b8152602001611eea604051806040016040528060008152602001600081525090565b8152602001611f0c604051806040016040528060008152602001600081525090565b8152602001611f2e604051806040016040528060008152602001600081525090565b8152602001611f50604051806040016040528060008152602001600081525090565b8152602001611f72604051806040016040528060008152602001600081525090565b8152602001611f94604051806040016040528060008152602001600081525090565b8152602001611fb6604051806040016040528060008152602001600081525090565b815260006020820181905260409091015290565b80356001600160a01b0381168114611fe157600080fd5b919050565b600060208284031215611ff857600080fd5b611cef82611fca565b60006020828403121561201357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6040516102e081016001600160401b03811182821017156120535761205361201a565b60405290565b604051601f8201601f191681016001600160401b03811182821017156120815761208161201a565b604052919050565b80356001600160401b0381168114611fe157600080fd5b6000606082840312156120b257600080fd5b604051606081018181106001600160401b03821117156120d4576120d461201a565b6040529050806120e383612089565b81526120f160208401612089565b6020820152604083013560408201525092915050565b60006040828403121561211957600080fd5b604051604081018181106001600160401b038211171561213b5761213b61201a565b604052823581526020928301359281019290925250919050565b6000808284036104e081121561216a57600080fd5b61217485856120a0565b925061048080605f198301121561218a57600080fd5b612192612030565b91506121a18660608701612107565b82526121b08660a08701612107565b60208301526121c28660e08701612107565b60408301526101206121d687828801612107565b60608401526101606121ea88828901612107565b60808501526101a06121fe89828a01612107565b60a08601526101e06122128a828b01612107565b60c08701526102206122268b828c01612107565b60e088015261026061223a8c828d01612107565b6101008901526102a061224f8d828e01612107565b878a01526122618d6102e08e01612107565b6101408a01526122758d6103208e01612107565b868a01526122878d6103608e01612107565b6101808a01526103a08c0135948901949094526103c08b01356101c08901526103e08b0135928801929092526104008a01356102008801526104208a013590870152610440890135610240870152610460890135908601529287013561028085015250506104a0850135908201526104c0909301356102c08401525092909150565b6000806040838503121561231c57600080fd5b61232583611fca565b91506020808401356001600160401b038082111561234257600080fd5b818601915086601f83011261235657600080fd5b8135818111156123685761236861201a565b61237a601f8201601f19168501612059565b9150808252878482850101111561239057600080fd5b80848401858401376000848284010152508093505050509250929050565b803563ffffffff81168114611fe157600080fd5b6000602082840312156123d457600080fd5b611cef826123ae565b6000806000808486036101208112156123f557600080fd5b6123ff87876120a0565b94506080605f198201121561241357600080fd5b50604051608081018181106001600160401b03821117156124365761243661201a565b8060405250606086013581526080860135602082015260a0860135604082015260c086013560608201528093505061247060e086016123ae565b915061247f6101008601611fca565b905092959194509250565b60005b838110156124a557818101518382015260200161248d565b50506000910152565b60208152600082518060208401526124cd81604085016020870161248a565b601f01601f19169190910160400192915050565b600080604083850312156124f457600080fd5b50508035926020909101359150565b634e487b7160e01b600052601160045260246000fd5b81810381811115610cdf57610cdf612503565b634e487b7160e01b600052603260045260246000fd5b60008161255157612551612503565b506000190190565b8060005b6007811015610ee557815184526020938401939091019060010161255d565b61259182825180518252602090810151910152565b6020818101518051604085015290810151606084015250604081015180516080840152602081015160a0840152506060810151805160c0840152602081015160e08401525060808101516101006125f48185018380518252602090810151910152565b60a083015191506101406126148186018480518252602090810151910152565b60c084015192506101806126348187018580518252602090810151910152565b60e085015193506101c06126548188018680518252602090810151910152565b928501519350610200926126748785018680518252602090810151910152565b61012086015194506102406126958189018780518252602090810151910152565b928601519450610280926126b58885018780518252602090810151910152565b61016087015195506102c06126d6818a018880518252602090810151910152565b9287015180516103008a0152602001516103208901526101a0870151610340890152908601516103608801526101e0860151610380880152928501516103a08701526102208501516103c0870152918401516103e08601526102608401516104008601528301516104208501526102a0830151610440850152909101516104609092019190915250565b6000610a608201905084518252602085015160208301526040850151612793604084018280518252602090810151910152565b50606085015180516080840152602081015160a0840152506080850151805160c0840152602081015160e08401525060a08501516101006127e08185018380518252602090810151910152565b60c087015191506101406128008186018480518252602090810151910152565b60e088015192506101806128208187018580518252602090810151910152565b9188015192506101c0916128408684018580518252602090810151910152565b61012089015193506102006128618188018680518252602090810151910152565b918901519350610240916128818784018680518252602090810151910152565b6101608a015194506102806128a28189018780518252602090810151910152565b918a015180516102c08901526020908101516102e08901526101a08b015180516103008a0152810151610320890152938a015180516103408901528401516103608801526101e08a015180516103808901528401516103a088015289015180516103c08801528301516103e087015261022089015180516104008801528301516104208701529088015180516104408701528201516104608601526102608801518051610480870152909101516104a08501528601516104c0840152506102a08501516104e0830152612979610500830185612559565b6129876105e083018461257c565b949350505050565b6000602082840312156129a157600080fd5b81518015158114611cef57600080fd5b6001600160401b038281168282160390808211156129d1576129d1612503565b5092915050565b60006001600160401b038083168181036129f4576129f4612503565b6001019392505050565b600060208284031215612a1057600080fd5b5051919050565b60008251612a2981846020870161248a565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca164736f6c6343000817000a" diff --git a/contracts/src/LightClient.sol b/contracts/src/LightClient.sol index 239cd363d..9d5cdef6e 100644 --- a/contracts/src/LightClient.sol +++ b/contracts/src/LightClient.sol @@ -148,7 +148,7 @@ contract LightClient is Initializable, OwnableUpgradeable, UUPSUpgradeable { /// @notice This contract is called by the proxy when you deploy this contract /// @param _genesis The initial state of the light client /// @param _stateHistoryRetentionPeriod The maximum retention period (in seconds) for the state - /// history. the min retention period allowed is 1 hour + /// history. the min retention period allowed is 1 hour and max 365 days /// @param owner The address of the contract owner function initialize( LightClientState memory _genesis, @@ -184,7 +184,7 @@ contract LightClient is Initializable, OwnableUpgradeable, UUPSUpgradeable { /// @param _genesis The initial state of the light client /// @param _genesisStakeTableState The initial stake table state of the light client /// @param _stateHistoryRetentionPeriod The maximum retention period (in seconds) for the state - /// history. The min retention period allowed is 1 hour + /// history. The min retention period allowed is 1 hour and the max is 365 days. function _initializeState( LightClientState memory _genesis, StakeTableState memory _genesisStakeTableState, @@ -193,14 +193,15 @@ contract LightClient is Initializable, OwnableUpgradeable, UUPSUpgradeable { // The viewNum and blockHeight in the genesis state must be zero to indicate that this is // the initial state. Stake table commitments and threshold cannot be zero, otherwise it's // impossible to generate valid proof to move finalized state forward. The - // stateHistoryRetentionPeriod - // must be at least 1 hour to ensure proper state retention. + // stateHistoryRetentionPeriod must be at least 1 hour and no more than 365 days + // to ensure proper state retention. if ( _genesis.viewNum != 0 || _genesis.blockHeight != 0 || BN254.ScalarField.unwrap(_genesisStakeTableState.blsKeyComm) == 0 || BN254.ScalarField.unwrap(_genesisStakeTableState.schnorrKeyComm) == 0 || BN254.ScalarField.unwrap(_genesisStakeTableState.amountComm) == 0 || _genesisStakeTableState.threshold == 0 || _stateHistoryRetentionPeriod < 1 hours + || _stateHistoryRetentionPeriod > 365 days ) { revert InvalidArgs(); } @@ -442,11 +443,14 @@ contract LightClient is Initializable, OwnableUpgradeable, UUPSUpgradeable { /// @notice sets the maximum retention period for storing block state history. /// @param historySeconds The maximum number of seconds for which state history updates /// will be stored, based on the block timestamp. It must be greater than or equal to - /// the current state history retention period and must be at least 1 hour. - /// @dev Reverts with `InvalidMaxStateHistory` if the provided value is less than 1 hour - /// or less than or equal to the current state history retention period. + /// the current state history retention period and must be at least 1 hour and max 365 days. + /// @dev Reverts with `InvalidMaxStateHistory` if the provided value is less than 1 hour, + /// more than 365 days or less than or equal to the current state history retention period. function setstateHistoryRetentionPeriod(uint32 historySeconds) public onlyOwner { - if (historySeconds < 1 hours || historySeconds <= stateHistoryRetentionPeriod) { + if ( + historySeconds < 1 hours || historySeconds > 365 days + || historySeconds <= stateHistoryRetentionPeriod + ) { revert InvalidMaxStateHistory(); } diff --git a/contracts/test/LightClient.t.sol b/contracts/test/LightClient.t.sol index 2c68e7cc7..0368a6048 100644 --- a/contracts/test/LightClient.t.sol +++ b/contracts/test/LightClient.t.sol @@ -563,7 +563,7 @@ contract LightClient_StateUpdatesTest is LightClientCommonTest { function testFuzz_setstateHistoryRetentionPeriod(uint32 stateHistoryRetentionPeriod) public { vm.prank(admin); - vm.assume(stateHistoryRetentionPeriod > 1 days); + vm.assume(stateHistoryRetentionPeriod > 1 days && stateHistoryRetentionPeriod <= 365 days); lc.setstateHistoryRetentionPeriod(stateHistoryRetentionPeriod); assertEq(stateHistoryRetentionPeriod, lc.stateHistoryRetentionPeriod()); } @@ -573,6 +573,12 @@ contract LightClient_StateUpdatesTest is LightClientCommonTest { lc.setstateHistoryRetentionPeriod(1 days); } + function test_revertWhenTooLargeStateHistoryRetentionPeriod() public { + vm.prank(admin); + vm.expectRevert(); + lc.setstateHistoryRetentionPeriod(366 days); + } + function test_revertSetMaxStateHistoryAllowedWhenInvalidValueSent() public { // revert when a retention period less than the minimum of 1 hour is sent vm.prank(admin);