From 9ec8c57ccbe70bb9f9547d6e76de337903533b9f Mon Sep 17 00:00:00 2001 From: Goran Rojovic Date: Mon, 25 Dec 2023 09:55:50 +0100 Subject: [PATCH 1/5] Generate artifact --- blade-contracts | 2 +- consensus/polybft/contractsapi/artifacts-gen/main.go | 4 ++++ consensus/polybft/contractsapi/gen_sc_data.go | 1 + consensus/polybft/contractsapi/init.go | 8 ++++++++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/blade-contracts b/blade-contracts index 8666c4e077..0df8f5284a 160000 --- a/blade-contracts +++ b/blade-contracts @@ -1 +1 @@ -Subproject commit 8666c4e077f78b18a00a273c141ebf8bbec83fa7 +Subproject commit 0df8f5284adfcd02b3bfff46a74168eb5db405f4 diff --git a/consensus/polybft/contractsapi/artifacts-gen/main.go b/consensus/polybft/contractsapi/artifacts-gen/main.go index f9b394897a..5d2becf023 100644 --- a/consensus/polybft/contractsapi/artifacts-gen/main.go +++ b/consensus/polybft/contractsapi/artifacts-gen/main.go @@ -208,6 +208,10 @@ func main() { "blade/governance/ChildTimelock.sol", "ChildTimelock", }, + { + "blade/accountAbstraction/EntryPoint.sol", + "EntryPoint", + }, } str := `// This is auto-generated file. DO NOT EDIT. diff --git a/consensus/polybft/contractsapi/gen_sc_data.go b/consensus/polybft/contractsapi/gen_sc_data.go index 4edb4325b4..89163cade5 100644 --- a/consensus/polybft/contractsapi/gen_sc_data.go +++ b/consensus/polybft/contractsapi/gen_sc_data.go @@ -46,3 +46,4 @@ var NetworkParamsArtifact string = `{"_format":"hh-sol-artifact-1","contractName var ForkParamsArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ForkParams","sourceName":"contracts/blade/ForkParams.sol","abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"feature","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"}],"name":"NewFeature","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"feature","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"block","type":"uint256"}],"name":"UpdatedFeature","type":"event"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"string","name":"feature","type":"string"}],"name":"addNewFeature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"featureToBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"feature","type":"string"}],"name":"isFeatureActivated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBlockNumber","type":"uint256"},{"internalType":"string","name":"feature","type":"string"}],"name":"updateFeatureBlock","outputs":[],"stateMutability":"nonpayable","type":"function"}],"bytecode":"0x608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6107e58061007e6000396000f3fe608060405234801561001057600080fd5b50600436106100785760003560e01c80632428e2341461007d57806336c60d6d146100a5578063715018a6146100d35780638da5cb5b146100dd578063c4d66de8146100f8578063c92f5d511461010b578063cd6598bd1461011e578063f2fde38b14610131575b600080fd5b61009061008b36600461063f565b610144565b60405190151581526020015b60405180910390f35b6100c56100b3366004610681565b60016020526000908152604090205481565b60405190815260200161009c565b6100db6101cb565b005b6000546040516001600160a01b03909116815260200161009c565b6100db61010636600461069a565b6101df565b6100db6101193660046106ca565b61030d565b6100db61012c3660046106ca565b6103e0565b6100db61013f36600461069a565b6104d3565b60008060016000858560405160200161015e929190610716565b604051602081830303815290604052805190602001208152602001908152602001600020549050806000036101ae5760405162461bcd60e51b81526004016101a590610745565b60405180910390fd5b8043106101bf5760019150506101c5565b60009150505b92915050565b6101d361054c565b6101dd60006105a6565b565b600054600160a81b900460ff161580801561020757506000546001600160a01b90910460ff16105b806102285750303b1580156102285750600054600160a01b900460ff166001145b61028b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101a5565b6000805460ff60a01b1916600160a01b17905580156102b8576000805460ff60a81b1916600160a81b1790555b6102c1826105a6565b8015610309576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61031561054c565b6000828260405160200161032a929190610716565b60408051601f1981840301815291815281516020928301206000818152600190935290822054909250908190036103735760405162461bcd60e51b81526004016101a590610745565b43851015801561038257508043105b61039e5760405162461bcd60e51b81526004016101a59061077c565b60008281526001602052604080822087905551869184917f28b9e86011a989b0d149881df01509a5cbd0d3d927d6d454d50d510b62d014cf9190a35050505050565b6103e861054c565b438310156104085760405162461bcd60e51b81526004016101a59061077c565b6000828260405160200161041d929190610716565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156104925760405162461bcd60e51b815260206004820152601a60248201527f466f726b506172616d733a20464541545552455f45584953545300000000000060448201526064016101a5565b60008181526001602052604080822086905551859183917f94a50b56ef6d6480cb07a85c57d6eb031618fdbcd17ccedd6001efcd3278669b9190a350505050565b6104db61054c565b6001600160a01b0381166105405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a5565b610549816105a6565b50565b6000546001600160a01b031633146101dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261060857600080fd5b50813567ffffffffffffffff81111561062057600080fd5b60208301915083602082850101111561063857600080fd5b9250929050565b6000806020838503121561065257600080fd5b823567ffffffffffffffff81111561066957600080fd5b610675858286016105f6565b90969095509350505050565b60006020828403121561069357600080fd5b5035919050565b6000602082840312156106ac57600080fd5b81356001600160a01b03811681146106c357600080fd5b9392505050565b6000806000604084860312156106df57600080fd5b83359250602084013567ffffffffffffffff8111156106fd57600080fd5b610709868287016105f6565b9497909650939450505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252601f908201527f466f726b506172616d733a204e4f4e4558495354454e545f4645415455524500604082015260600190565b602080825260199082015278466f726b506172616d733a20494e56414c49445f424c4f434b60381b60408201526060019056fea264697066735822122004939f0bbf37f7fc7e28609570663e00713d5076eb9b09ea5833c2639853dfa764736f6c63430008130033","deployedBytecode":"0x608060405234801561001057600080fd5b50600436106100785760003560e01c80632428e2341461007d57806336c60d6d146100a5578063715018a6146100d35780638da5cb5b146100dd578063c4d66de8146100f8578063c92f5d511461010b578063cd6598bd1461011e578063f2fde38b14610131575b600080fd5b61009061008b36600461063f565b610144565b60405190151581526020015b60405180910390f35b6100c56100b3366004610681565b60016020526000908152604090205481565b60405190815260200161009c565b6100db6101cb565b005b6000546040516001600160a01b03909116815260200161009c565b6100db61010636600461069a565b6101df565b6100db6101193660046106ca565b61030d565b6100db61012c3660046106ca565b6103e0565b6100db61013f36600461069a565b6104d3565b60008060016000858560405160200161015e929190610716565b604051602081830303815290604052805190602001208152602001908152602001600020549050806000036101ae5760405162461bcd60e51b81526004016101a590610745565b60405180910390fd5b8043106101bf5760019150506101c5565b60009150505b92915050565b6101d361054c565b6101dd60006105a6565b565b600054600160a81b900460ff161580801561020757506000546001600160a01b90910460ff16105b806102285750303b1580156102285750600054600160a01b900460ff166001145b61028b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016101a5565b6000805460ff60a01b1916600160a01b17905580156102b8576000805460ff60a81b1916600160a81b1790555b6102c1826105a6565b8015610309576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61031561054c565b6000828260405160200161032a929190610716565b60408051601f1981840301815291815281516020928301206000818152600190935290822054909250908190036103735760405162461bcd60e51b81526004016101a590610745565b43851015801561038257508043105b61039e5760405162461bcd60e51b81526004016101a59061077c565b60008281526001602052604080822087905551869184917f28b9e86011a989b0d149881df01509a5cbd0d3d927d6d454d50d510b62d014cf9190a35050505050565b6103e861054c565b438310156104085760405162461bcd60e51b81526004016101a59061077c565b6000828260405160200161041d929190610716565b60408051601f19818403018152918152815160209283012060008181526001909352912054909150156104925760405162461bcd60e51b815260206004820152601a60248201527f466f726b506172616d733a20464541545552455f45584953545300000000000060448201526064016101a5565b60008181526001602052604080822086905551859183917f94a50b56ef6d6480cb07a85c57d6eb031618fdbcd17ccedd6001efcd3278669b9190a350505050565b6104db61054c565b6001600160a01b0381166105405760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016101a5565b610549816105a6565b50565b6000546001600160a01b031633146101dd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101a5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008083601f84011261060857600080fd5b50813567ffffffffffffffff81111561062057600080fd5b60208301915083602082850101111561063857600080fd5b9250929050565b6000806020838503121561065257600080fd5b823567ffffffffffffffff81111561066957600080fd5b610675858286016105f6565b90969095509350505050565b60006020828403121561069357600080fd5b5035919050565b6000602082840312156106ac57600080fd5b81356001600160a01b03811681146106c357600080fd5b9392505050565b6000806000604084860312156106df57600080fd5b83359250602084013567ffffffffffffffff8111156106fd57600080fd5b610709868287016105f6565b9497909650939450505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6020808252601f908201527f466f726b506172616d733a204e4f4e4558495354454e545f4645415455524500604082015260600190565b602080825260199082015278466f726b506172616d733a20494e56414c49445f424c4f434b60381b60408201526060019056fea264697066735822122004939f0bbf37f7fc7e28609570663e00713d5076eb9b09ea5833c2639853dfa764736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var ChildGovernorArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildGovernor","sourceName":"contracts/blade/governance/ChildGovernor.sol","abi":[{"inputs":[],"name":"Empty","type":"error"},{"anonymous":false,"inputs":[],"name":"EIP712DomainChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"},{"indexed":false,"internalType":"address[]","name":"targets","type":"address[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"},{"indexed":false,"internalType":"string[]","name":"signatures","type":"string[]"},{"indexed":false,"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"indexed":false,"internalType":"uint256","name":"voteStart","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"voteEnd","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"eta","type":"uint256"}],"name":"ProposalQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldQuorumNumerator","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newQuorumNumerator","type":"uint256"}],"name":"QuorumNumeratorUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldTimelock","type":"address"},{"indexed":false,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"VoteCast","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"support","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"},{"indexed":false,"internalType":"bytes","name":"params","type":"bytes"}],"name":"VoteCastWithParams","type":"event"},{"inputs":[],"name":"BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CLOCK_MODE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COUNTING_MODE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"EXTENDED_BALLOT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"}],"name":"cancel","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"}],"name":"castVote","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteBySig","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"}],"name":"castVoteWithReason","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"castVoteWithReasonAndParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"string","name":"reason","type":"string"},{"internalType":"bytes","name":"params","type":"bytes"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"castVoteWithReasonAndParamsBySig","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clock","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"eip712Domain","outputs":[{"internalType":"bytes1","name":"fields","type":"bytes1"},{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"version","type":"string"},{"internalType":"uint256","name":"chainId","type":"uint256"},{"internalType":"address","name":"verifyingContract","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256[]","name":"extensions","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"}],"name":"execute","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"getActions","outputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"}],"name":"getReceipt","outputs":[{"components":[{"internalType":"bool","name":"hasVoted","type":"bool"},{"internalType":"uint8","name":"support","type":"uint8"},{"internalType":"uint96","name":"votes","type":"uint96"}],"internalType":"struct IGovernorCompatibilityBravoUpgradeable.Receipt","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timepoint","type":"uint256"}],"name":"getVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"timepoint","type":"uint256"},{"internalType":"bytes","name":"params","type":"bytes"}],"name":"getVotesWithParams","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"hasVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"}],"name":"hashProposal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"contract IVotesUpgradeable","name":"token_","type":"address"},{"internalType":"contract TimelockControllerUpgradeable","name":"timelock_","type":"address"},{"internalType":"uint256","name":"quorumNumerator_","type":"uint256"},{"internalType":"address","name":"networkParams","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposalDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposalEta","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposalProposer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposalSnapshot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"proposer","type":"address"},{"internalType":"uint256","name":"eta","type":"uint256"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint256","name":"forVotes","type":"uint256"},{"internalType":"uint256","name":"againstVotes","type":"uint256"},{"internalType":"uint256","name":"abstainVotes","type":"uint256"},{"internalType":"bool","name":"canceled","type":"bool"},{"internalType":"bool","name":"executed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"string[]","name":"signatures","type":"string[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"string","name":"description","type":"string"}],"name":"propose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"calldatas","type":"bytes[]"},{"internalType":"bytes32","name":"descriptionHash","type":"bytes32"}],"name":"queue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"queue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"}],"name":"quorum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"timepoint","type":"uint256"}],"name":"quorumNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"quorumVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"relay","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"state","outputs":[{"internalType":"enum IGovernorUpgradeable.ProposalState","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelock","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC5805Upgradeable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newQuorumNumerator","type":"uint256"}],"name":"updateQuorumNumerator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TimelockControllerUpgradeable","name":"newTimelock","type":"address"}],"name":"updateTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"votingPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}],"bytecode":"0x608060405234801561001057600080fd5b5061579b80620000216000396000f3fe6080604052600436106102b85760003560e01c80637b3c71d311610170578063c28bc2fa116100cc578063deaaa7cc11610085578063deaaa7cc146109dc578063e23a9a5214610a10578063eb9019d414610adb578063f23a6e6114610afb578063f8ce560a14610b27578063fc0c546a14610b47578063fe0d94c114610b6857600080fd5b8063c28bc2fa14610904578063c59057e414610917578063d33219b414610937578063da95691a14610956578063dd4e2ba514610976578063ddf0b009146109bc57600080fd5b8063a7713a7011610129578063a7713a7014610814578063a890c91014610829578063ab58fb8e14610849578063b58131b014610869578063bc197c811461087e578063be203094146108aa578063c01f9e37146108ca57600080fd5b80637b3c71d31461074c5780637d5e81e21461076c57806384b0196e1461078c57806391ddadf4146107b457806397c3d334146107e05780639a802a6d146107f457600080fd5b80632fe3e2611161021f57806343859632116101d85780634385963214610657578063452115d6146106a25780634bf5d7e9146106c257806354fd4d50146106d757806356781388146106ec5780635f398a141461070c57806360c4247f1461072c57600080fd5b80632fe3e26114610571578063328dd982146105a55780633932abb1146105d55780633bccf4fd146105ea5780633e4f49e61461060a57806340e58ee51461063757600080fd5b8063143489d011610271578063143489d014610458578063150b7a02146104ae578063160cbed7146104f257806324bc1a64146105125780632656227d146105275780632d63f6931461053a57600080fd5b8063013cf08b1461032857806301ffc9a7146103a357806302a251a3146103d357806303420181146103f657806306f3f9e61461041657806306fdde031461043657600080fd5b3661032357306102c6610b7b565b6001600160a01b0316146103215760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b34801561033457600080fd5b50610348610343366004614501565b610b95565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b3480156103af57600080fd5b506103c36103be36600461451a565b610c64565b604051901515815260200161039a565b3480156103df57600080fd5b506103e8610c75565b60405190815260200161039a565b34801561040257600080fd5b506103e8610411366004614660565b610ce4565b34801561042257600080fd5b50610321610431366004614501565b610ddc565b34801561044257600080fd5b5061044b610e67565b60405161039a9190614756565b34801561046457600080fd5b50610496610473366004614501565b60009081526101306020526040902054600160401b90046001600160a01b031690565b6040516001600160a01b03909116815260200161039a565b3480156104ba57600080fd5b506104d96104c936600461477e565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161039a565b3480156104fe57600080fd5b506103e861050d366004614955565b610efa565b34801561051e57600080fd5b506103e86110ff565b6103e8610535366004614955565b611125565b34801561054657600080fd5b506103e8610555366004614501565b600090815261013060205260409020546001600160401b031690565b34801561057d57600080fd5b506103e87fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156105b157600080fd5b506105c56105c0366004614501565b611218565b60405161039a9493929190614aad565b3480156105e157600080fd5b506103e86114aa565b3480156105f657600080fd5b506103e8610605366004614afa565b6114f5565b34801561061657600080fd5b5061062a610625366004614501565b61156b565b60405161039a9190614b5e565b34801561064357600080fd5b50610321610652366004614501565b611576565b34801561066357600080fd5b506103c3610672366004614b86565b6000828152610161602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b3480156106ae57600080fd5b506103e86106bd366004614955565b6115a1565b3480156106ce57600080fd5b5061044b6115b8565b3480156106e357600080fd5b5061044b611665565b3480156106f857600080fd5b506103e8610707366004614bb6565b611680565b34801561071857600080fd5b506103e8610727366004614be2565b6116a9565b34801561073857600080fd5b506103e8610747366004614501565b6116f3565b34801561075857600080fd5b506103e8610767366004614c65565b6117a8565b34801561077857600080fd5b506103e8610787366004614cbe565b6117fa565b34801561079857600080fd5b506107a1611808565b60405161039a9796959493929190614d5e565b3480156107c057600080fd5b506107c96118a6565b60405165ffffffffffff909116815260200161039a565b3480156107ec57600080fd5b5060646103e8565b34801561080057600080fd5b506103e861080f366004614dc0565b61191a565b34801561082057600080fd5b506103e8611931565b34801561083557600080fd5b50610321610844366004614e18565b61195e565b34801561085557600080fd5b506103e8610864366004614501565b6119e6565b34801561087557600080fd5b506103e8611a82565b34801561088a57600080fd5b506104d9610899366004614e35565b63bc197c8160e01b95945050505050565b3480156108b657600080fd5b506103216108c5366004614ec8565b611acd565b3480156108d657600080fd5b506103e86108e5366004614501565b600090815261013060205260409020600101546001600160401b031690565b610321610912366004614f1b565b611c3f565b34801561092357600080fd5b506103e8610932366004614955565b611d4f565b34801561094357600080fd5b506101f8546001600160a01b0316610496565b34801561096257600080fd5b506103e8610971366004614fdd565b611d89565b34801561098257600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261044b565b3480156109c857600080fd5b506103216109d7366004614501565b611e10565b3480156109e857600080fd5b506103e87f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610a1c57600080fd5b50610aab610a2b366004614b86565b6040805160608101825260008082526020820181905291810191909152506000918252610161602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b03169082015260600161039a565b348015610ae757600080fd5b506103e8610af636600461507e565b611e33565b348015610b0757600080fd5b506104d9610b163660046150aa565b63f23a6e6160e01b95945050505050565b348015610b3357600080fd5b506103e8610b42366004614501565b611e54565b348015610b5357600080fd5b5061019354610496906001600160a01b031681565b610321610b76366004614501565b611ee3565b6000610b906101f8546001600160a01b031690565b905090565b8060008080808080808080610ba98a6119e6565b60008c815261013060205260409020549098506001600160401b031660008c815261013060205260409020600101549097506001600160401b031660008c81526101616020526040812080546005820154600683015460078401546001600160a01b039093169e50949a509850929650919450610c258d61156b565b90506002816007811115610c3b57610c3b614b48565b1493506007816007811115610c5257610c52614b48565b14925050509193959799509193959799565b6000610c6f82611f06565b92915050565b61022a54604080516302a251a360e01b815290516000926001600160a01b0316916302a251a39160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190615112565b600080610d88610d807fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610d2092919061512b565b60405180910390208b80519060200120604051602001610d65959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b60405160208183030381529060405280519060200120611f2b565b868686611f58565b9050610dce8a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611f76915050565b9a9950505050505050505050565b610de4610b7b565b6001600160a01b0316336001600160a01b031614610e145760405162461bcd60e51b81526004016103189061513b565b30610e1d610b7b565b6001600160a01b031614610e5b5760008036604051610e3d92919061512b565b604051809103902090505b80610e546101316120cc565b03610e4857505b610e6481612142565b50565b606061012f8054610e779061516d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea39061516d565b8015610ef05780601f10610ec557610100808354040283529160200191610ef0565b820191906000526020600020905b815481529060010190602001808311610ed357829003601f168201915b5050505050905090565b600080610f0986868686611d4f565b90506004610f168261156b565b6007811115610f2757610f27614b48565b14610f445760405162461bcd60e51b8152600401610318906151a7565b6101f8546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015610f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190615112565b6101f85460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790610fee908a908a908a906000908b906004016151e8565b602060405180830381865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190615112565b60008381526101f96020526040808220929092556101f85491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb09161107c918b918b918b91908b908990600401615236565b600060405180830381600087803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282426110dc91906152a4565b604080519283526020830191909152015b60405180910390a15095945050505050565b6000610b90600161110e6118a6565b61111891906152b7565b65ffffffffffff16611e54565b60008061113486868686611d4f565b905060006111418261156b565b9050600481600781111561115757611157614b48565b14806111745750600581600781111561117257611172614b48565b145b6111905760405162461bcd60e51b8152600401610318906151a7565b6000828152610130602052604090819020600201805460ff19166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906111df9084815260200190565b60405180910390a16111f482888888886122b3565b611201828888888861234d565b61120e828888888861235a565b5095945050505050565b606080606080600061016160008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561129b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161127d575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156112ed57602002820191906000526020600020905b8154815260200190600101908083116112d9575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156113c15783829060005260206000200180546113349061516d565b80601f01602080910402602001604051908101604052809291908181526020018280546113609061516d565b80156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505081526020019060010190611315565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156114945783829060005260206000200180546114079061516d565b80601f01602080910402602001604051908101604052809291908181526020018280546114339061516d565b80156114805780601f1061145557610100808354040283529160200191611480565b820191906000526020600020905b81548152906001019060200180831161146357829003601f168201915b5050505050815260200190600101906113e8565b5050505090509450945094509450509193509193565b61022a5460408051633932abb160e01b815290516000926001600160a01b031691633932abb19160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff85166060820152600090819061154390610d8090608001610d65565b905061156087828860405180602001604052806000815250612395565b979650505050505050565b6000610c6f826123b8565b60008060008061158585612505565b9350935093509350611599848484846115a1565b505050505050565b60006115af85858585612796565b95945050505050565b6101935460408051634bf5d7e960e01b815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa92505050801561162457506040513d6000823e601f3d908101601f1916820160405261162191908101906152dd565b60015b611660575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b6040805180820190915260018152603160f81b602082015290565b6000803390506116a184828560405180602001604052806000815250612395565b949350505050565b60008033905061156087828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611f76915050565b6101c75460009080820361170c5750506101c654919050565b60006101c761171c60018461534a565b8154811061172c5761172c61535d565b60009182526020918290206040805180820190915291015463ffffffff8116808352600160201b9091046001600160e01b0316928201929092529150841061178257602001516001600160e01b03169392505050565b61179761178e85612861565b6101c7906128ca565b6001600160e01b0316949350505050565b6000803390506117f086828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061239592505050565b9695505050505050565b60006115af8585858561297d565b6000606080600080600060606065546000801b1480156118285750606654155b61186c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610318565b6118746129e5565b61187c6129f4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61019354604080516324776b7d60e21b815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa92505050801561190d575060408051601f3d908101601f1916820190925261190a91810190615373565b60015b61166057610b9043612a03565b6000611927848484612a6a565b90505b9392505050565b6101c75460009015611956576119486101c7612ae1565b6001600160e01b0316905090565b506101c65490565b611966610b7b565b6001600160a01b0316336001600160a01b0316146119965760405162461bcd60e51b81526004016103189061513b565b3061199f610b7b565b6001600160a01b0316146119dd57600080366040516119bf92919061512b565b604051809103902090505b806119d66101316120cc565b036119ca57505b610e6481612b11565b6101f85460008281526101f9602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190615112565b905080600114611a79578061192a565b60009392505050565b61022a5460408051630b58131b60e41b815290516000926001600160a01b03169163b58131b09160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b600054610100900460ff1615808015611aed5750600054600160ff909116105b80611b075750303b158015611b07575060005460ff166001145b611b6a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610318565b6000805460ff191660011790558015611b8d576000805461ff0019166101001790555b611bbb6040518060400160405280600d81526020016c21b434b63223b7bb32b93737b960991b815250612b7c565b611bc484612bbd565b611bcd85612bed565b611bd683612c1d565b61022a80546001600160a01b0319166001600160a01b0384161790558015611c38576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b611c47610b7b565b6001600160a01b0316336001600160a01b031614611c775760405162461bcd60e51b81526004016103189061513b565b30611c80610b7b565b6001600160a01b031614611cbe5760008036604051611ca092919061512b565b604051809103902090505b80611cb76101316120cc565b03611cab57505b600080856001600160a01b0316858585604051611cdc92919061512b565b60006040518083038185875af1925050503d8060008114611d19576040519150601f19603f3d011682016040523d82523d6000602084013e611d1e565b606091505b5091509150611d46828260405180606001604052806028815260200161573e60289139612c4d565b50505050505050565b600084848484604051602001611d68949392919061539b565b60408051601f19818403018152919052805160209091012095945050505050565b60008251845114611ded5760405162461bcd60e51b815260206004820152602860248201527f476f7665726e6f72427261766f3a20696e76616c6964207369676e61747572656044820152670e640d8cadccee8d60c31b6064820152608401610318565b611dfb338787878787612c66565b6117f08686611e0a8787612d24565b856117fa565b600080600080611e1f85612505565b935093509350935061159984848484610efa565b600061192a8383611e4f60408051602081019091526000815290565b612a6a565b60006064611e61836116f3565b61019354604051632394e7a360e21b8152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa158015611eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecf9190615112565b611ed991906153e6565b610c6f9190615413565b600080600080611ef285612505565b935093509350935061159984848484611125565b60006001600160e01b03198216636e665ced60e01b1480610c6f5750610c6f82612e56565b6000610c6f611f38612ef2565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611f6987878787612efc565b9150915061120e81612fb6565b6000858152610130602052604081206001611f908861156b565b6007811115611fa157611fa1614b48565b14611ffa5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610318565b80546000906120149088906001600160401b031686612a6a565b905061202388888884886130fb565b835160000361207857866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48988848960405161206b9493929190615435565b60405180910390a2611560565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516120b995949392919061545d565b60405180910390a2979650505050505050565b60006120e78254600f81810b600160801b909204900b131590565b1561210557604051631ed9509560e11b815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583546001600160801b03191692016001600160801b03169190911790915590565b60648111156121c55760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e616064820152623a37b960e91b608482015260a401610318565b60006121cf611931565b905080158015906121e157506101c754155b156122465760408051808201909152600081526101c7906020810161220584613299565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b6122746122616122546118a6565b65ffffffffffff16612861565b61226a84613299565b6101c79190613302565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b306122bc610b7b565b6001600160a01b031614611c385760005b845181101561159957306001600160a01b03168582815181106122f2576122f261535d565b60200260200101516001600160a01b03160361233d5761233d83828151811061231d5761231d61535d565b60200260200101518051906020012061013161331d90919063ffffffff16565b612346816154a3565b90506122cd565b611c388585858585613359565b30612363610b7b565b6001600160a01b031614611c385761013154600f81810b600160801b909204900b1315611c3857600061013155611c38565b60006115af858585856123b360408051602081019091526000815290565b611f76565b6000806123c4836133ce565b905060048160078111156123da576123da614b48565b146123e55792915050565b60008381526101f9602052604090205480612401575092915050565b6101f854604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f91906154bc565b1561247e575060079392505050565b6101f854604051632c258a9f60e11b8152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa1580156124c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ec91906154bc565b156124fb575060059392505050565b5060029392505050565b60608060606000806101616000878152602001908152602001600020905080600101816002016126d783600301805480602002602001604051908101604052809291908181526020016000905b828210156125fe5783829060005260206000200180546125719061516d565b80601f016020809104026020016040519081016040528092919081815260200182805461259d9061516d565b80156125ea5780601f106125bf576101008083540402835291602001916125ea565b820191906000526020600020905b8154815290600101906020018083116125cd57829003601f168201915b505050505081526020019060010190612552565b50505060048601805460408051602080840282018101909252828152935060009084015b828210156126ce5783829060005260206000200180546126419061516d565b80601f016020809104026020016040519081016040528092919081815260200182805461266d9061516d565b80156126ba5780601f1061268f576101008083540402835291602001916126ba565b820191906000526020600020905b81548152906001019060200180831161269d57829003601f168201915b505050505081526020019060010190612622565b50505050612d24565b600984015483546040805160208084028201810190925282815291869183018282801561272d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161270f575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561277f57602002820191906000526020600020905b81548152602001906001019080831161276b575b505050505092509450945094509450509193509193565b6000806127a586868686611d4f565b600081815261016160205260409020549091506001600160a01b0316338114806127f957506127d2611a82565b6127f78260016127e06118a6565b6127ea91906152b7565b65ffffffffffff16611e33565b105b6128555760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610318565b61156087878787613515565b600063ffffffff8211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610318565b5090565b8154600090818160058111156129275760006128e584613523565b6128ef908561534a565b60008881526020902090915081015463ffffffff908116908716101561291757809150612925565b6129228160016152a4565b92505b505b60006129358787858561360b565b905080156129705761295a8761294c60018461534a565b600091825260209091200190565b54600160201b90046001600160e01b0316611560565b6000979650505050505050565b60006129d933868686516001600160401b0381111561299e5761299e61459d565b6040519080825280602002602001820160405280156129d157816020015b60608152602001906001900390816129bc5790505b508787612c66565b6115af85858585613661565b606060678054610e779061516d565b606060688054610e779061516d565b600065ffffffffffff8211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610318565b61019354604051630748d63560e31b81526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015612abd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119279190615112565b80546000908015611a7957612afb8361294c60018461534a565b54600160201b90046001600160e01b031661192a565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16612ba35760405162461bcd60e51b8152600401610318906154de565b612bb481612baf611665565b613a37565b610e6481613a86565b600054610100900460ff16612be45760405162461bcd60e51b8152600401610318906154de565b610e6481613abe565b600054610100900460ff16612c145760405162461bcd60e51b8152600401610318906154de565b610e6481613ae5565b600054610100900460ff16612c445760405162461bcd60e51b8152600401610318906154de565b610e6481613b2f565b60608315612c5c57508161192a565b61192a8383613b56565b805160208201206000612c848787612c7e8888612d24565b85611d4f565b600081815261016160205260409020600981015491925090612d195780546001600160a01b0319166001600160a01b038a161781558751612cce90600183019060208b0190614338565b508651612ce490600283019060208a0190614399565b508551612cfa90600383019060208901906143d4565b508451612d109060048301906020880190614426565b50600981018390555b505050505050505050565b6060600082516001600160401b03811115612d4157612d4161459d565b604051908082528060200260200182016040528015612d7457816020015b6060815260200190600190039081612d5f5790505b50905060005b8151811015612e4e57848181518110612d9557612d9561535d565b602002602001015151600014612e0557848181518110612db757612db761535d565b602002602001015180519060200120848281518110612dd857612dd861535d565b6020026020010151604051602001612df1929190615529565b604051602081830303815290604052612e20565b838181518110612e1757612e1761535d565b60200260200101515b828281518110612e3257612e3261535d565b602002602001018190525080612e47906154a3565b9050612d7a565b509392505050565b600063288ace0360e11b6318df743f60e31b63bf26d89760e01b6379dd796f60e01b6001600160e01b03198616821480612e9c57506001600160e01b0319868116908216145b80612eb357506001600160e01b0319868116908516145b80612ece57506001600160e01b03198616630271189760e51b145b806117f057506301ffc9a760e01b6001600160e01b03198716149695505050505050565b6000610b90613b80565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612f295750600090506003612fad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612f7d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612fa657600060019250925050612fad565b9150600090505b94509492505050565b6000816004811115612fca57612fca614b48565b03612fd25750565b6001816004811115612fe657612fe6614b48565b0361302e5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610318565b600281600481111561304257613042614b48565b0361308f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610318565b60038160048111156130a3576130a3614b48565b03610e645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610318565b6000858152610161602090815260408083206001600160a01b038816845260088101909252909120805460ff161561318b5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610318565b805460ff86166101000261ffff199091161760011781556131ab84613bf4565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff85166131fb57838260060160008282546131f091906152a4565b90915550611d469050565b60001960ff86160161321b57838260050160008282546131f091906152a4565b60011960ff86160161323b57838260070160008282546131f091906152a4565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610318565b60006001600160e01b038211156128c65760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610318565b600080613310858585613c5c565b915091505b935093915050565b8154600160801b90819004600f0b6000818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b6101f85460405163e38335e560e01b81526001600160a01b039091169063e38335e59034906133959088908890889060009089906004016151e8565b6000604051808303818588803b1580156133ae57600080fd5b505af11580156133c2573d6000803e3d6000fd5b50505050505050505050565b600081815261013060205260408120600281015460ff16156133f35750600792915050565b6002810154610100900460ff161561340e5750600292915050565b600083815261013060205260408120546001600160401b0316908190036134775760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610318565b60006134816118a6565b65ffffffffffff16905080821061349d57506000949350505050565b600085815261013060205260409020600101546001600160401b03168181106134cc5750600195945050505050565b6134d586613dfb565b80156134f857506000868152610161602052604090206006810154600590910154115b156135095750600495945050505050565b50600395945050505050565b60006115af85858585613e3b565b60008160000361353557506000919050565b6000600161354284613ef1565b901c6001901b9050600181848161355b5761355b6153fd565b048201901c90506001818481613573576135736153fd565b048201901c9050600181848161358b5761358b6153fd565b048201901c905060018184816135a3576135a36153fd565b048201901c905060018184816135bb576135bb6153fd565b048201901c905060018184816135d3576135d36153fd565b048201901c905060018184816135eb576135eb6153fd565b048201901c905061192a81828581613605576136056153fd565b04613f85565b60005b81831015612e4e5760006136228484613f9b565b60008781526020902090915063ffffffff86169082015463ffffffff16111561364d5780925061365b565b6136588160016152a4565b93505b5061360e565b60003361366e8184613fb6565b6136ba5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73657220726573747269637465640000006044820152606401610318565b60006136c46118a6565b65ffffffffffff1690506136d6611a82565b6136e583610af660018561534a565b101561374d5760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b6064820152608401610318565b60006137628888888880519060200120611d4f565b905086518851146137855760405162461bcd60e51b81526004016103189061555a565b85518851146137a65760405162461bcd60e51b81526004016103189061555a565b60008851116137f25760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b6044820152606401610318565b600081815261013060205260409020546001600160401b0316156138625760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610318565b600061386c6114aa565b61387690846152a4565b90506000613882610c75565b61388c90836152a4565b90506040518060e001604052806138a2846140a7565b6001600160401b031681526001600160a01b0387166020820152600060408201526060016138cf836140a7565b6001600160401b03908116825260006020808401829052604080850183905260609485018390528883526101308252918290208551815492870151878501519186166001600160e01b031990941693909317600160401b6001600160a01b039094168402176001600160e01b0316600160e01b60e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c09094015161ffff1990941692151561ff00191692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e918111156139d4576139d461459d565b604051908082528060200260200182016040528015613a0757816020015b60608152602001906001900390816139f25790505b508d88888f604051613a219998979695949392919061559b565b60405180910390a1509098975050505050505050565b600054610100900460ff16613a5e5760405162461bcd60e51b8152600401610318906154de565b6067613a6a838261567e565b506068613a77828261567e565b50506000606581905560665550565b600054610100900460ff16613aad5760405162461bcd60e51b8152600401610318906154de565b61012f613aba828261567e565b5050565b600054610100900460ff166119dd5760405162461bcd60e51b8152600401610318906154de565b600054610100900460ff16613b0c5760405162461bcd60e51b8152600401610318906154de565b61019380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16610e5b5760405162461bcd60e51b8152600401610318906154de565b815115613b665781518083602001fd5b8060405162461bcd60e51b81526004016103189190614756565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613bab61410f565b613bb3614168565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006001600160601b038211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610318565b825460009081908015613da2576000613c7a8761294c60018561534a565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509087161015613cfb5760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b65797300000000006044820152606401610318565b805163ffffffff808816911603613d435784613d1c8861294c60018661534a565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055613d92565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506133159050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081613315565b6000818152610161602052604081206005810154613e32610b4285600090815261013060205260409020546001600160401b031690565b11159392505050565b600080613e4a86868686614199565b60008181526101f96020526040902054909150156115af576101f85460008281526101f960205260409081902054905163c4d252f560e01b81526001600160a01b039092169163c4d252f591613ea69160040190815260200190565b600060405180830381600087803b158015613ec057600080fd5b505af1158015613ed4573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b600080608083901c15613f0657608092831c92015b604083901c15613f1857604092831c92015b602083901c15613f2a57602092831c92015b601083901c15613f3c57601092831c92015b600883901c15613f4e57600892831c92015b600483901c15613f6057600492831c92015b600283901c15613f7257600292831c92015b600183901c15610c6f5760010192915050565b6000818310613f94578161192a565b5090919050565b6000613faa6002848418615413565b61192a908484166152a4565b80516000906034811015613fce576001915050610c6f565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b1461400157600192505050610c6f565b60008061400f60288561534a565b90505b83811015614086576000806140468884815181106140325761403261535d565b01602001516001600160f81b0319166142a6565b915091508161405e5760019650505050505050610c6f565b8060ff166004856001600160a01b0316901b17935050508061407f906154a3565b9050614012565b50856001600160a01b0316816001600160a01b031614935050505092915050565b60006001600160401b038211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610318565b60008061411a6129e5565b805190915015614131578051602090910120919050565b60655480156141405792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806141736129f4565b80519091501561418a578051602090910120919050565b60665480156141405792915050565b6000806141a886868686611d4f565b905060006141b58261156b565b905060028160078111156141cb576141cb614b48565b141580156141eb575060068160078111156141e8576141e8614b48565b14155b80156142095750600781600781111561420657614206614b48565b14155b6142555760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610318565b6000828152610130602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110ed9084815260200190565b60008060f883901c602f811180156142c15750603a8160ff16105b156142d657600194602f199091019350915050565b8060ff1660401080156142ec575060478160ff16105b15614301576001946036199091019350915050565b8060ff166060108015614317575060678160ff16105b1561432c576001946056199091019350915050565b50600093849350915050565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614358565b506128c6929150614478565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d5782518255916020019190600101906143b9565b82805482825590600052602060002090810192821561441a579160200282015b8281111561441a578251829061440a908261567e565b50916020019190600101906143f4565b506128c692915061448d565b82805482825590600052602060002090810192821561446c579160200282015b8281111561446c578251829061445c908261567e565b5091602001919060010190614446565b506128c69291506144aa565b5b808211156128c65760008155600101614479565b808211156128c65760006144a182826144c7565b5060010161448d565b808211156128c65760006144be82826144c7565b506001016144aa565b5080546144d39061516d565b6000825580601f106144e3575050565b601f016020900490600052602060002090810190610e649190614478565b60006020828403121561451357600080fd5b5035919050565b60006020828403121561452c57600080fd5b81356001600160e01b03198116811461192a57600080fd5b803560ff8116811461166057600080fd5b60008083601f84011261456757600080fd5b5081356001600160401b0381111561457e57600080fd5b60208301915083602082850101111561459657600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156145db576145db61459d565b604052919050565b60006001600160401b038211156145fc576145fc61459d565b50601f01601f191660200190565b600082601f83011261461b57600080fd5b813561462e614629826145e3565b6145b3565b81815284602083860101111561464357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060e0898b03121561467c57600080fd5b8835975061468c60208a01614544565b965060408901356001600160401b03808211156146a857600080fd5b6146b48c838d01614555565b909850965060608b01359150808211156146cd57600080fd5b506146da8b828c0161460a565b9450506146e960808a01614544565b925060a0890135915060c089013590509295985092959890939650565b60005b83811015614721578181015183820152602001614709565b50506000910152565b60008151808452614742816020860160208601614706565b601f01601f19169290920160200192915050565b60208152600061192a602083018461472a565b6001600160a01b0381168114610e6457600080fd5b6000806000806080858703121561479457600080fd5b843561479f81614769565b935060208501356147af81614769565b92506040850135915060608501356001600160401b038111156147d157600080fd5b6147dd8782880161460a565b91505092959194509250565b60006001600160401b038211156148025761480261459d565b5060051b60200190565b600082601f83011261481d57600080fd5b8135602061482d614629836147e9565b82815260059290921b8401810191818101908684111561484c57600080fd5b8286015b8481101561487057803561486381614769565b8352918301918301614850565b509695505050505050565b600082601f83011261488c57600080fd5b8135602061489c614629836147e9565b82815260059290921b840181019181810190868411156148bb57600080fd5b8286015b8481101561487057803583529183019183016148bf565b600082601f8301126148e757600080fd5b813560206148f7614629836147e9565b82815260059290921b8401810191818101908684111561491657600080fd5b8286015b848110156148705780356001600160401b038111156149395760008081fd5b6149478986838b010161460a565b84525091830191830161491a565b6000806000806080858703121561496b57600080fd5b84356001600160401b038082111561498257600080fd5b61498e8883890161480c565b955060208701359150808211156149a457600080fd5b6149b08883890161487b565b945060408701359150808211156149c657600080fd5b506149d3878288016148d6565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015614a1d5781516001600160a01b0316875295820195908201906001016149f8565b509495945050505050565b600081518084526020808501945080840160005b83811015614a1d57815187529582019590820190600101614a3c565b600081518084526020808501808196508360051b8101915082860160005b85811015614aa0578284038952614a8e84835161472a565b98850198935090840190600101614a76565b5091979650505050505050565b608081526000614ac060808301876149e4565b8281036020840152614ad28187614a28565b90508281036040840152614ae68186614a58565b905082810360608401526115608185614a58565b600080600080600060a08688031215614b1257600080fd5b85359450614b2260208701614544565b9350614b3060408701614544565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310614b8057634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614b9957600080fd5b823591506020830135614bab81614769565b809150509250929050565b60008060408385031215614bc957600080fd5b82359150614bd960208401614544565b90509250929050565b600080600080600060808688031215614bfa57600080fd5b85359450614c0a60208701614544565b935060408601356001600160401b0380821115614c2657600080fd5b614c3289838a01614555565b90955093506060880135915080821115614c4b57600080fd5b50614c588882890161460a565b9150509295509295909350565b60008060008060608587031215614c7b57600080fd5b84359350614c8b60208601614544565b925060408501356001600160401b03811115614ca657600080fd5b614cb287828801614555565b95989497509550505050565b60008060008060808587031215614cd457600080fd5b84356001600160401b0380821115614ceb57600080fd5b614cf78883890161480c565b95506020870135915080821115614d0d57600080fd5b614d198883890161487b565b94506040870135915080821115614d2f57600080fd5b614d3b888389016148d6565b93506060870135915080821115614d5157600080fd5b506147dd8782880161460a565b60ff60f81b8816815260e060208201526000614d7d60e083018961472a565b8281036040840152614d8f818961472a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050610dce8185614a28565b600080600060608486031215614dd557600080fd5b8335614de081614769565b92506020840135915060408401356001600160401b03811115614e0257600080fd5b614e0e8682870161460a565b9150509250925092565b600060208284031215614e2a57600080fd5b813561192a81614769565b600080600080600060a08688031215614e4d57600080fd5b8535614e5881614769565b94506020860135614e6881614769565b935060408601356001600160401b0380821115614e8457600080fd5b614e9089838a0161487b565b94506060880135915080821115614ea657600080fd5b614eb289838a0161487b565b93506080880135915080821115614c4b57600080fd5b60008060008060808587031215614ede57600080fd5b8435614ee981614769565b93506020850135614ef981614769565b9250604085013591506060850135614f1081614769565b939692955090935050565b60008060008060608587031215614f3157600080fd5b8435614f3c81614769565b93506020850135925060408501356001600160401b03811115614ca657600080fd5b600082601f830112614f6f57600080fd5b81356020614f7f614629836147e9565b82815260059290921b84018101918181019086841115614f9e57600080fd5b8286015b848110156148705780356001600160401b03811115614fc15760008081fd5b614fcf8986838b010161460a565b845250918301918301614fa2565b600080600080600060a08688031215614ff557600080fd5b85356001600160401b038082111561500c57600080fd5b61501889838a0161480c565b9650602088013591508082111561502e57600080fd5b61503a89838a0161487b565b9550604088013591508082111561505057600080fd5b61505c89838a01614f5e565b9450606088013591508082111561507257600080fd5b614eb289838a016148d6565b6000806040838503121561509157600080fd5b823561509c81614769565b946020939093013593505050565b600080600080600060a086880312156150c257600080fd5b85356150cd81614769565b945060208601356150dd81614769565b9350604086013592506060860135915060808601356001600160401b0381111561510657600080fd5b614c588882890161460a565b60006020828403121561512457600080fd5b5051919050565b8183823760009101908152919050565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b600181811c9082168061518157607f821691505b6020821081036151a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60a0815260006151fb60a08301886149e4565b828103602084015261520d8188614a28565b905082810360408401526152218187614a58565b60608401959095525050608001529392505050565b60c08152600061524960c08301896149e4565b828103602084015261525b8189614a28565b9050828103604084015261526f8188614a58565b60608401969096525050608081019290925260a0909101529392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6f57610c6f61528e565b65ffffffffffff8281168282160390808211156152d6576152d661528e565b5092915050565b6000602082840312156152ef57600080fd5b81516001600160401b0381111561530557600080fd5b8201601f8101841361531657600080fd5b8051615324614629826145e3565b81815285602083850101111561533957600080fd5b6115af826020830160208601614706565b81810381811115610c6f57610c6f61528e565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561538557600080fd5b815165ffffffffffff8116811461192a57600080fd5b6080815260006153ae60808301876149e4565b82810360208401526153c08187614a28565b905082810360408401526153d48186614a58565b91505082606083015295945050505050565b8082028115828204841417610c6f57610c6f61528e565b634e487b7160e01b600052601260045260246000fd5b60008261543057634e487b7160e01b600052601260045260246000fd5b500490565b84815260ff841660208201528260408201526080606082015260006117f0608083018461472a565b85815260ff8516602082015283604082015260a06060820152600061548560a083018561472a565b8281036080840152615497818561472a565b98975050505050505050565b6000600182016154b5576154b561528e565b5060010190565b6000602082840312156154ce57600080fd5b8151801515811461192a57600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160e01b031983168152815160009061554c816004850160208701614706565b919091016004019392505050565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b8981526001600160a01b0389166020820152610120604082018190526000906155c68382018b6149e4565b905082810360608401526155da818a614a28565b905082810360808401526155ee8189614a58565b905082810360a08401526156028188614a58565b90508560c08401528460e0840152828103610100840152615623818561472a565b9c9b505050505050505050505050565b601f82111561567957600081815260208120601f850160051c8101602086101561565a5750805b601f850160051c820191505b8181101561159957828155600101615666565b505050565b81516001600160401b038111156156975761569761459d565b6156ab816156a5845461516d565b84615633565b602080601f8311600181146156e057600084156156c85750858301515b600019600386901b1c1916600185901b178555611599565b600085815260208120601f198616915b8281101561570f578886015182559484019460019091019084016156f0565b508582101561572d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a2646970667358221220ba7affd71155ab5d07348383105a5cdaec3c12c44bf7888181d5259042085dd464736f6c63430008130033","deployedBytecode":"0x6080604052600436106102b85760003560e01c80637b3c71d311610170578063c28bc2fa116100cc578063deaaa7cc11610085578063deaaa7cc146109dc578063e23a9a5214610a10578063eb9019d414610adb578063f23a6e6114610afb578063f8ce560a14610b27578063fc0c546a14610b47578063fe0d94c114610b6857600080fd5b8063c28bc2fa14610904578063c59057e414610917578063d33219b414610937578063da95691a14610956578063dd4e2ba514610976578063ddf0b009146109bc57600080fd5b8063a7713a7011610129578063a7713a7014610814578063a890c91014610829578063ab58fb8e14610849578063b58131b014610869578063bc197c811461087e578063be203094146108aa578063c01f9e37146108ca57600080fd5b80637b3c71d31461074c5780637d5e81e21461076c57806384b0196e1461078c57806391ddadf4146107b457806397c3d334146107e05780639a802a6d146107f457600080fd5b80632fe3e2611161021f57806343859632116101d85780634385963214610657578063452115d6146106a25780634bf5d7e9146106c257806354fd4d50146106d757806356781388146106ec5780635f398a141461070c57806360c4247f1461072c57600080fd5b80632fe3e26114610571578063328dd982146105a55780633932abb1146105d55780633bccf4fd146105ea5780633e4f49e61461060a57806340e58ee51461063757600080fd5b8063143489d011610271578063143489d014610458578063150b7a02146104ae578063160cbed7146104f257806324bc1a64146105125780632656227d146105275780632d63f6931461053a57600080fd5b8063013cf08b1461032857806301ffc9a7146103a357806302a251a3146103d357806303420181146103f657806306f3f9e61461041657806306fdde031461043657600080fd5b3661032357306102c6610b7b565b6001600160a01b0316146103215760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b34801561033457600080fd5b50610348610343366004614501565b610b95565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b3480156103af57600080fd5b506103c36103be36600461451a565b610c64565b604051901515815260200161039a565b3480156103df57600080fd5b506103e8610c75565b60405190815260200161039a565b34801561040257600080fd5b506103e8610411366004614660565b610ce4565b34801561042257600080fd5b50610321610431366004614501565b610ddc565b34801561044257600080fd5b5061044b610e67565b60405161039a9190614756565b34801561046457600080fd5b50610496610473366004614501565b60009081526101306020526040902054600160401b90046001600160a01b031690565b6040516001600160a01b03909116815260200161039a565b3480156104ba57600080fd5b506104d96104c936600461477e565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161039a565b3480156104fe57600080fd5b506103e861050d366004614955565b610efa565b34801561051e57600080fd5b506103e86110ff565b6103e8610535366004614955565b611125565b34801561054657600080fd5b506103e8610555366004614501565b600090815261013060205260409020546001600160401b031690565b34801561057d57600080fd5b506103e87fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b3480156105b157600080fd5b506105c56105c0366004614501565b611218565b60405161039a9493929190614aad565b3480156105e157600080fd5b506103e86114aa565b3480156105f657600080fd5b506103e8610605366004614afa565b6114f5565b34801561061657600080fd5b5061062a610625366004614501565b61156b565b60405161039a9190614b5e565b34801561064357600080fd5b50610321610652366004614501565b611576565b34801561066357600080fd5b506103c3610672366004614b86565b6000828152610161602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b3480156106ae57600080fd5b506103e86106bd366004614955565b6115a1565b3480156106ce57600080fd5b5061044b6115b8565b3480156106e357600080fd5b5061044b611665565b3480156106f857600080fd5b506103e8610707366004614bb6565b611680565b34801561071857600080fd5b506103e8610727366004614be2565b6116a9565b34801561073857600080fd5b506103e8610747366004614501565b6116f3565b34801561075857600080fd5b506103e8610767366004614c65565b6117a8565b34801561077857600080fd5b506103e8610787366004614cbe565b6117fa565b34801561079857600080fd5b506107a1611808565b60405161039a9796959493929190614d5e565b3480156107c057600080fd5b506107c96118a6565b60405165ffffffffffff909116815260200161039a565b3480156107ec57600080fd5b5060646103e8565b34801561080057600080fd5b506103e861080f366004614dc0565b61191a565b34801561082057600080fd5b506103e8611931565b34801561083557600080fd5b50610321610844366004614e18565b61195e565b34801561085557600080fd5b506103e8610864366004614501565b6119e6565b34801561087557600080fd5b506103e8611a82565b34801561088a57600080fd5b506104d9610899366004614e35565b63bc197c8160e01b95945050505050565b3480156108b657600080fd5b506103216108c5366004614ec8565b611acd565b3480156108d657600080fd5b506103e86108e5366004614501565b600090815261013060205260409020600101546001600160401b031690565b610321610912366004614f1b565b611c3f565b34801561092357600080fd5b506103e8610932366004614955565b611d4f565b34801561094357600080fd5b506101f8546001600160a01b0316610496565b34801561096257600080fd5b506103e8610971366004614fdd565b611d89565b34801561098257600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261044b565b3480156109c857600080fd5b506103216109d7366004614501565b611e10565b3480156109e857600080fd5b506103e87f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610a1c57600080fd5b50610aab610a2b366004614b86565b6040805160608101825260008082526020820181905291810191909152506000918252610161602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b03169082015260600161039a565b348015610ae757600080fd5b506103e8610af636600461507e565b611e33565b348015610b0757600080fd5b506104d9610b163660046150aa565b63f23a6e6160e01b95945050505050565b348015610b3357600080fd5b506103e8610b42366004614501565b611e54565b348015610b5357600080fd5b5061019354610496906001600160a01b031681565b610321610b76366004614501565b611ee3565b6000610b906101f8546001600160a01b031690565b905090565b8060008080808080808080610ba98a6119e6565b60008c815261013060205260409020549098506001600160401b031660008c815261013060205260409020600101549097506001600160401b031660008c81526101616020526040812080546005820154600683015460078401546001600160a01b039093169e50949a509850929650919450610c258d61156b565b90506002816007811115610c3b57610c3b614b48565b1493506007816007811115610c5257610c52614b48565b14925050509193959799509193959799565b6000610c6f82611f06565b92915050565b61022a54604080516302a251a360e01b815290516000926001600160a01b0316916302a251a39160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b909190615112565b600080610d88610d807fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c604051610d2092919061512b565b60405180910390208b80519060200120604051602001610d65959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b60405160208183030381529060405280519060200120611f2b565b868686611f58565b9050610dce8a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250611f76915050565b9a9950505050505050505050565b610de4610b7b565b6001600160a01b0316336001600160a01b031614610e145760405162461bcd60e51b81526004016103189061513b565b30610e1d610b7b565b6001600160a01b031614610e5b5760008036604051610e3d92919061512b565b604051809103902090505b80610e546101316120cc565b03610e4857505b610e6481612142565b50565b606061012f8054610e779061516d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea39061516d565b8015610ef05780601f10610ec557610100808354040283529160200191610ef0565b820191906000526020600020905b815481529060010190602001808311610ed357829003601f168201915b5050505050905090565b600080610f0986868686611d4f565b90506004610f168261156b565b6007811115610f2757610f27614b48565b14610f445760405162461bcd60e51b8152600401610318906151a7565b6101f8546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015610f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb39190615112565b6101f85460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f42790610fee908a908a908a906000908b906004016151e8565b602060405180830381865afa15801561100b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102f9190615112565b60008381526101f96020526040808220929092556101f85491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb09161107c918b918b918b91908b908990600401615236565b600060405180830381600087803b15801561109657600080fd5b505af11580156110aa573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282426110dc91906152a4565b604080519283526020830191909152015b60405180910390a15095945050505050565b6000610b90600161110e6118a6565b61111891906152b7565b65ffffffffffff16611e54565b60008061113486868686611d4f565b905060006111418261156b565b9050600481600781111561115757611157614b48565b14806111745750600581600781111561117257611172614b48565b145b6111905760405162461bcd60e51b8152600401610318906151a7565b6000828152610130602052604090819020600201805460ff19166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906111df9084815260200190565b60405180910390a16111f482888888886122b3565b611201828888888861234d565b61120e828888888861235a565b5095945050505050565b606080606080600061016160008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561129b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161127d575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156112ed57602002820191906000526020600020905b8154815260200190600101908083116112d9575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156113c15783829060005260206000200180546113349061516d565b80601f01602080910402602001604051908101604052809291908181526020018280546113609061516d565b80156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b505050505081526020019060010190611315565b50505050915080805480602002602001604051908101604052809291908181526020016000905b828210156114945783829060005260206000200180546114079061516d565b80601f01602080910402602001604051908101604052809291908181526020018280546114339061516d565b80156114805780601f1061145557610100808354040283529160200191611480565b820191906000526020600020905b81548152906001019060200180831161146357829003601f168201915b5050505050815260200190600101906113e8565b5050505090509450945094509450509193509193565b61022a5460408051633932abb160e01b815290516000926001600160a01b031691633932abb19160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff85166060820152600090819061154390610d8090608001610d65565b905061156087828860405180602001604052806000815250612395565b979650505050505050565b6000610c6f826123b8565b60008060008061158585612505565b9350935093509350611599848484846115a1565b505050505050565b60006115af85858585612796565b95945050505050565b6101935460408051634bf5d7e960e01b815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa92505050801561162457506040513d6000823e601f3d908101601f1916820160405261162191908101906152dd565b60015b611660575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b6040805180820190915260018152603160f81b602082015290565b6000803390506116a184828560405180602001604052806000815250612395565b949350505050565b60008033905061156087828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611f76915050565b6101c75460009080820361170c5750506101c654919050565b60006101c761171c60018461534a565b8154811061172c5761172c61535d565b60009182526020918290206040805180820190915291015463ffffffff8116808352600160201b9091046001600160e01b0316928201929092529150841061178257602001516001600160e01b03169392505050565b61179761178e85612861565b6101c7906128ca565b6001600160e01b0316949350505050565b6000803390506117f086828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061239592505050565b9695505050505050565b60006115af8585858561297d565b6000606080600080600060606065546000801b1480156118285750606654155b61186c5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610318565b6118746129e5565b61187c6129f4565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b61019354604080516324776b7d60e21b815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa92505050801561190d575060408051601f3d908101601f1916820190925261190a91810190615373565b60015b61166057610b9043612a03565b6000611927848484612a6a565b90505b9392505050565b6101c75460009015611956576119486101c7612ae1565b6001600160e01b0316905090565b506101c65490565b611966610b7b565b6001600160a01b0316336001600160a01b0316146119965760405162461bcd60e51b81526004016103189061513b565b3061199f610b7b565b6001600160a01b0316146119dd57600080366040516119bf92919061512b565b604051809103902090505b806119d66101316120cc565b036119ca57505b610e6481612b11565b6101f85460008281526101f9602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa158015611a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a699190615112565b905080600114611a79578061192a565b60009392505050565b61022a5460408051630b58131b60e41b815290516000926001600160a01b03169163b58131b09160048083019260209291908290030181865afa158015610cc0573d6000803e3d6000fd5b600054610100900460ff1615808015611aed5750600054600160ff909116105b80611b075750303b158015611b07575060005460ff166001145b611b6a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610318565b6000805460ff191660011790558015611b8d576000805461ff0019166101001790555b611bbb6040518060400160405280600d81526020016c21b434b63223b7bb32b93737b960991b815250612b7c565b611bc484612bbd565b611bcd85612bed565b611bd683612c1d565b61022a80546001600160a01b0319166001600160a01b0384161790558015611c38576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b611c47610b7b565b6001600160a01b0316336001600160a01b031614611c775760405162461bcd60e51b81526004016103189061513b565b30611c80610b7b565b6001600160a01b031614611cbe5760008036604051611ca092919061512b565b604051809103902090505b80611cb76101316120cc565b03611cab57505b600080856001600160a01b0316858585604051611cdc92919061512b565b60006040518083038185875af1925050503d8060008114611d19576040519150601f19603f3d011682016040523d82523d6000602084013e611d1e565b606091505b5091509150611d46828260405180606001604052806028815260200161573e60289139612c4d565b50505050505050565b600084848484604051602001611d68949392919061539b565b60408051601f19818403018152919052805160209091012095945050505050565b60008251845114611ded5760405162461bcd60e51b815260206004820152602860248201527f476f7665726e6f72427261766f3a20696e76616c6964207369676e61747572656044820152670e640d8cadccee8d60c31b6064820152608401610318565b611dfb338787878787612c66565b6117f08686611e0a8787612d24565b856117fa565b600080600080611e1f85612505565b935093509350935061159984848484610efa565b600061192a8383611e4f60408051602081019091526000815290565b612a6a565b60006064611e61836116f3565b61019354604051632394e7a360e21b8152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa158015611eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecf9190615112565b611ed991906153e6565b610c6f9190615413565b600080600080611ef285612505565b935093509350935061159984848484611125565b60006001600160e01b03198216636e665ced60e01b1480610c6f5750610c6f82612e56565b6000610c6f611f38612ef2565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000611f6987878787612efc565b9150915061120e81612fb6565b6000858152610130602052604081206001611f908861156b565b6007811115611fa157611fa1614b48565b14611ffa5760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610318565b80546000906120149088906001600160401b031686612a6a565b905061202388888884886130fb565b835160000361207857866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda48988848960405161206b9493929190615435565b60405180910390a2611560565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516120b995949392919061545d565b60405180910390a2979650505050505050565b60006120e78254600f81810b600160801b909204900b131590565b1561210557604051631ed9509560e11b815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583546001600160801b03191692016001600160801b03169190911790915590565b60648111156121c55760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e616064820152623a37b960e91b608482015260a401610318565b60006121cf611931565b905080158015906121e157506101c754155b156122465760408051808201909152600081526101c7906020810161220584613299565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b6122746122616122546118a6565b65ffffffffffff16612861565b61226a84613299565b6101c79190613302565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b306122bc610b7b565b6001600160a01b031614611c385760005b845181101561159957306001600160a01b03168582815181106122f2576122f261535d565b60200260200101516001600160a01b03160361233d5761233d83828151811061231d5761231d61535d565b60200260200101518051906020012061013161331d90919063ffffffff16565b612346816154a3565b90506122cd565b611c388585858585613359565b30612363610b7b565b6001600160a01b031614611c385761013154600f81810b600160801b909204900b1315611c3857600061013155611c38565b60006115af858585856123b360408051602081019091526000815290565b611f76565b6000806123c4836133ce565b905060048160078111156123da576123da614b48565b146123e55792915050565b60008381526101f9602052604090205480612401575092915050565b6101f854604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa15801561244b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246f91906154bc565b1561247e575060079392505050565b6101f854604051632c258a9f60e11b8152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa1580156124c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ec91906154bc565b156124fb575060059392505050565b5060029392505050565b60608060606000806101616000878152602001908152602001600020905080600101816002016126d783600301805480602002602001604051908101604052809291908181526020016000905b828210156125fe5783829060005260206000200180546125719061516d565b80601f016020809104026020016040519081016040528092919081815260200182805461259d9061516d565b80156125ea5780601f106125bf576101008083540402835291602001916125ea565b820191906000526020600020905b8154815290600101906020018083116125cd57829003601f168201915b505050505081526020019060010190612552565b50505060048601805460408051602080840282018101909252828152935060009084015b828210156126ce5783829060005260206000200180546126419061516d565b80601f016020809104026020016040519081016040528092919081815260200182805461266d9061516d565b80156126ba5780601f1061268f576101008083540402835291602001916126ba565b820191906000526020600020905b81548152906001019060200180831161269d57829003601f168201915b505050505081526020019060010190612622565b50505050612d24565b600984015483546040805160208084028201810190925282815291869183018282801561272d57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161270f575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561277f57602002820191906000526020600020905b81548152602001906001019080831161276b575b505050505092509450945094509450509193509193565b6000806127a586868686611d4f565b600081815261016160205260409020549091506001600160a01b0316338114806127f957506127d2611a82565b6127f78260016127e06118a6565b6127ea91906152b7565b65ffffffffffff16611e33565b105b6128555760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610318565b61156087878787613515565b600063ffffffff8211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610318565b5090565b8154600090818160058111156129275760006128e584613523565b6128ef908561534a565b60008881526020902090915081015463ffffffff908116908716101561291757809150612925565b6129228160016152a4565b92505b505b60006129358787858561360b565b905080156129705761295a8761294c60018461534a565b600091825260209091200190565b54600160201b90046001600160e01b0316611560565b6000979650505050505050565b60006129d933868686516001600160401b0381111561299e5761299e61459d565b6040519080825280602002602001820160405280156129d157816020015b60608152602001906001900390816129bc5790505b508787612c66565b6115af85858585613661565b606060678054610e779061516d565b606060688054610e779061516d565b600065ffffffffffff8211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610318565b61019354604051630748d63560e31b81526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015612abd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119279190615112565b80546000908015611a7957612afb8361294c60018461534a565b54600160201b90046001600160e01b031661192a565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16612ba35760405162461bcd60e51b8152600401610318906154de565b612bb481612baf611665565b613a37565b610e6481613a86565b600054610100900460ff16612be45760405162461bcd60e51b8152600401610318906154de565b610e6481613abe565b600054610100900460ff16612c145760405162461bcd60e51b8152600401610318906154de565b610e6481613ae5565b600054610100900460ff16612c445760405162461bcd60e51b8152600401610318906154de565b610e6481613b2f565b60608315612c5c57508161192a565b61192a8383613b56565b805160208201206000612c848787612c7e8888612d24565b85611d4f565b600081815261016160205260409020600981015491925090612d195780546001600160a01b0319166001600160a01b038a161781558751612cce90600183019060208b0190614338565b508651612ce490600283019060208a0190614399565b508551612cfa90600383019060208901906143d4565b508451612d109060048301906020880190614426565b50600981018390555b505050505050505050565b6060600082516001600160401b03811115612d4157612d4161459d565b604051908082528060200260200182016040528015612d7457816020015b6060815260200190600190039081612d5f5790505b50905060005b8151811015612e4e57848181518110612d9557612d9561535d565b602002602001015151600014612e0557848181518110612db757612db761535d565b602002602001015180519060200120848281518110612dd857612dd861535d565b6020026020010151604051602001612df1929190615529565b604051602081830303815290604052612e20565b838181518110612e1757612e1761535d565b60200260200101515b828281518110612e3257612e3261535d565b602002602001018190525080612e47906154a3565b9050612d7a565b509392505050565b600063288ace0360e11b6318df743f60e31b63bf26d89760e01b6379dd796f60e01b6001600160e01b03198616821480612e9c57506001600160e01b0319868116908216145b80612eb357506001600160e01b0319868116908516145b80612ece57506001600160e01b03198616630271189760e51b145b806117f057506301ffc9a760e01b6001600160e01b03198716149695505050505050565b6000610b90613b80565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612f295750600090506003612fad565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612f7d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612fa657600060019250925050612fad565b9150600090505b94509492505050565b6000816004811115612fca57612fca614b48565b03612fd25750565b6001816004811115612fe657612fe6614b48565b0361302e5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b6044820152606401610318565b600281600481111561304257613042614b48565b0361308f5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610318565b60038160048111156130a3576130a3614b48565b03610e645760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610318565b6000858152610161602090815260408083206001600160a01b038816845260088101909252909120805460ff161561318b5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610318565b805460ff86166101000261ffff199091161760011781556131ab84613bf4565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff85166131fb57838260060160008282546131f091906152a4565b90915550611d469050565b60001960ff86160161321b57838260050160008282546131f091906152a4565b60011960ff86160161323b57838260070160008282546131f091906152a4565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610318565b60006001600160e01b038211156128c65760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610318565b600080613310858585613c5c565b915091505b935093915050565b8154600160801b90819004600f0b6000818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b6101f85460405163e38335e560e01b81526001600160a01b039091169063e38335e59034906133959088908890889060009089906004016151e8565b6000604051808303818588803b1580156133ae57600080fd5b505af11580156133c2573d6000803e3d6000fd5b50505050505050505050565b600081815261013060205260408120600281015460ff16156133f35750600792915050565b6002810154610100900460ff161561340e5750600292915050565b600083815261013060205260408120546001600160401b0316908190036134775760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610318565b60006134816118a6565b65ffffffffffff16905080821061349d57506000949350505050565b600085815261013060205260409020600101546001600160401b03168181106134cc5750600195945050505050565b6134d586613dfb565b80156134f857506000868152610161602052604090206006810154600590910154115b156135095750600495945050505050565b50600395945050505050565b60006115af85858585613e3b565b60008160000361353557506000919050565b6000600161354284613ef1565b901c6001901b9050600181848161355b5761355b6153fd565b048201901c90506001818481613573576135736153fd565b048201901c9050600181848161358b5761358b6153fd565b048201901c905060018184816135a3576135a36153fd565b048201901c905060018184816135bb576135bb6153fd565b048201901c905060018184816135d3576135d36153fd565b048201901c905060018184816135eb576135eb6153fd565b048201901c905061192a81828581613605576136056153fd565b04613f85565b60005b81831015612e4e5760006136228484613f9b565b60008781526020902090915063ffffffff86169082015463ffffffff16111561364d5780925061365b565b6136588160016152a4565b93505b5061360e565b60003361366e8184613fb6565b6136ba5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73657220726573747269637465640000006044820152606401610318565b60006136c46118a6565b65ffffffffffff1690506136d6611a82565b6136e583610af660018561534a565b101561374d5760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b6064820152608401610318565b60006137628888888880519060200120611d4f565b905086518851146137855760405162461bcd60e51b81526004016103189061555a565b85518851146137a65760405162461bcd60e51b81526004016103189061555a565b60008851116137f25760405162461bcd60e51b815260206004820152601860248201527711dbdd995c9b9bdc8e88195b5c1d1e481c1c9bdc1bdcd85b60421b6044820152606401610318565b600081815261013060205260409020546001600160401b0316156138625760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610318565b600061386c6114aa565b61387690846152a4565b90506000613882610c75565b61388c90836152a4565b90506040518060e001604052806138a2846140a7565b6001600160401b031681526001600160a01b0387166020820152600060408201526060016138cf836140a7565b6001600160401b03908116825260006020808401829052604080850183905260609485018390528883526101308252918290208551815492870151878501519186166001600160e01b031990941693909317600160401b6001600160a01b039094168402176001600160e01b0316600160e01b60e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c09094015161ffff1990941692151561ff00191692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e918111156139d4576139d461459d565b604051908082528060200260200182016040528015613a0757816020015b60608152602001906001900390816139f25790505b508d88888f604051613a219998979695949392919061559b565b60405180910390a1509098975050505050505050565b600054610100900460ff16613a5e5760405162461bcd60e51b8152600401610318906154de565b6067613a6a838261567e565b506068613a77828261567e565b50506000606581905560665550565b600054610100900460ff16613aad5760405162461bcd60e51b8152600401610318906154de565b61012f613aba828261567e565b5050565b600054610100900460ff166119dd5760405162461bcd60e51b8152600401610318906154de565b600054610100900460ff16613b0c5760405162461bcd60e51b8152600401610318906154de565b61019380546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff16610e5b5760405162461bcd60e51b8152600401610318906154de565b815115613b665781518083602001fd5b8060405162461bcd60e51b81526004016103189190614756565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f613bab61410f565b613bb3614168565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60006001600160601b038211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610318565b825460009081908015613da2576000613c7a8761294c60018561534a565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509087161015613cfb5760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b65797300000000006044820152606401610318565b805163ffffffff808816911603613d435784613d1c8861294c60018661534a565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055613d92565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506133159050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081613315565b6000818152610161602052604081206005810154613e32610b4285600090815261013060205260409020546001600160401b031690565b11159392505050565b600080613e4a86868686614199565b60008181526101f96020526040902054909150156115af576101f85460008281526101f960205260409081902054905163c4d252f560e01b81526001600160a01b039092169163c4d252f591613ea69160040190815260200190565b600060405180830381600087803b158015613ec057600080fd5b505af1158015613ed4573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b600080608083901c15613f0657608092831c92015b604083901c15613f1857604092831c92015b602083901c15613f2a57602092831c92015b601083901c15613f3c57601092831c92015b600883901c15613f4e57600892831c92015b600483901c15613f6057600492831c92015b600283901c15613f7257600292831c92015b600183901c15610c6f5760010192915050565b6000818310613f94578161192a565b5090919050565b6000613faa6002848418615413565b61192a908484166152a4565b80516000906034811015613fce576001915050610c6f565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b1461400157600192505050610c6f565b60008061400f60288561534a565b90505b83811015614086576000806140468884815181106140325761403261535d565b01602001516001600160f81b0319166142a6565b915091508161405e5760019650505050505050610c6f565b8060ff166004856001600160a01b0316901b17935050508061407f906154a3565b9050614012565b50856001600160a01b0316816001600160a01b031614935050505092915050565b60006001600160401b038211156128c65760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610318565b60008061411a6129e5565b805190915015614131578051602090910120919050565b60655480156141405792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806141736129f4565b80519091501561418a578051602090910120919050565b60665480156141405792915050565b6000806141a886868686611d4f565b905060006141b58261156b565b905060028160078111156141cb576141cb614b48565b141580156141eb575060068160078111156141e8576141e8614b48565b14155b80156142095750600781600781111561420657614206614b48565b14155b6142555760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610318565b6000828152610130602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906110ed9084815260200190565b60008060f883901c602f811180156142c15750603a8160ff16105b156142d657600194602f199091019350915050565b8060ff1660401080156142ec575060478160ff16105b15614301576001946036199091019350915050565b8060ff166060108015614317575060678160ff16105b1561432c576001946056199091019350915050565b50600093849350915050565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614358565b506128c6929150614478565b82805482825590600052602060002090810192821561438d579160200282015b8281111561438d5782518255916020019190600101906143b9565b82805482825590600052602060002090810192821561441a579160200282015b8281111561441a578251829061440a908261567e565b50916020019190600101906143f4565b506128c692915061448d565b82805482825590600052602060002090810192821561446c579160200282015b8281111561446c578251829061445c908261567e565b5091602001919060010190614446565b506128c69291506144aa565b5b808211156128c65760008155600101614479565b808211156128c65760006144a182826144c7565b5060010161448d565b808211156128c65760006144be82826144c7565b506001016144aa565b5080546144d39061516d565b6000825580601f106144e3575050565b601f016020900490600052602060002090810190610e649190614478565b60006020828403121561451357600080fd5b5035919050565b60006020828403121561452c57600080fd5b81356001600160e01b03198116811461192a57600080fd5b803560ff8116811461166057600080fd5b60008083601f84011261456757600080fd5b5081356001600160401b0381111561457e57600080fd5b60208301915083602082850101111561459657600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156145db576145db61459d565b604052919050565b60006001600160401b038211156145fc576145fc61459d565b50601f01601f191660200190565b600082601f83011261461b57600080fd5b813561462e614629826145e3565b6145b3565b81815284602083860101111561464357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060e0898b03121561467c57600080fd5b8835975061468c60208a01614544565b965060408901356001600160401b03808211156146a857600080fd5b6146b48c838d01614555565b909850965060608b01359150808211156146cd57600080fd5b506146da8b828c0161460a565b9450506146e960808a01614544565b925060a0890135915060c089013590509295985092959890939650565b60005b83811015614721578181015183820152602001614709565b50506000910152565b60008151808452614742816020860160208601614706565b601f01601f19169290920160200192915050565b60208152600061192a602083018461472a565b6001600160a01b0381168114610e6457600080fd5b6000806000806080858703121561479457600080fd5b843561479f81614769565b935060208501356147af81614769565b92506040850135915060608501356001600160401b038111156147d157600080fd5b6147dd8782880161460a565b91505092959194509250565b60006001600160401b038211156148025761480261459d565b5060051b60200190565b600082601f83011261481d57600080fd5b8135602061482d614629836147e9565b82815260059290921b8401810191818101908684111561484c57600080fd5b8286015b8481101561487057803561486381614769565b8352918301918301614850565b509695505050505050565b600082601f83011261488c57600080fd5b8135602061489c614629836147e9565b82815260059290921b840181019181810190868411156148bb57600080fd5b8286015b8481101561487057803583529183019183016148bf565b600082601f8301126148e757600080fd5b813560206148f7614629836147e9565b82815260059290921b8401810191818101908684111561491657600080fd5b8286015b848110156148705780356001600160401b038111156149395760008081fd5b6149478986838b010161460a565b84525091830191830161491a565b6000806000806080858703121561496b57600080fd5b84356001600160401b038082111561498257600080fd5b61498e8883890161480c565b955060208701359150808211156149a457600080fd5b6149b08883890161487b565b945060408701359150808211156149c657600080fd5b506149d3878288016148d6565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015614a1d5781516001600160a01b0316875295820195908201906001016149f8565b509495945050505050565b600081518084526020808501945080840160005b83811015614a1d57815187529582019590820190600101614a3c565b600081518084526020808501808196508360051b8101915082860160005b85811015614aa0578284038952614a8e84835161472a565b98850198935090840190600101614a76565b5091979650505050505050565b608081526000614ac060808301876149e4565b8281036020840152614ad28187614a28565b90508281036040840152614ae68186614a58565b905082810360608401526115608185614a58565b600080600080600060a08688031215614b1257600080fd5b85359450614b2260208701614544565b9350614b3060408701614544565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310614b8057634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614b9957600080fd5b823591506020830135614bab81614769565b809150509250929050565b60008060408385031215614bc957600080fd5b82359150614bd960208401614544565b90509250929050565b600080600080600060808688031215614bfa57600080fd5b85359450614c0a60208701614544565b935060408601356001600160401b0380821115614c2657600080fd5b614c3289838a01614555565b90955093506060880135915080821115614c4b57600080fd5b50614c588882890161460a565b9150509295509295909350565b60008060008060608587031215614c7b57600080fd5b84359350614c8b60208601614544565b925060408501356001600160401b03811115614ca657600080fd5b614cb287828801614555565b95989497509550505050565b60008060008060808587031215614cd457600080fd5b84356001600160401b0380821115614ceb57600080fd5b614cf78883890161480c565b95506020870135915080821115614d0d57600080fd5b614d198883890161487b565b94506040870135915080821115614d2f57600080fd5b614d3b888389016148d6565b93506060870135915080821115614d5157600080fd5b506147dd8782880161460a565b60ff60f81b8816815260e060208201526000614d7d60e083018961472a565b8281036040840152614d8f818961472a565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501529050610dce8185614a28565b600080600060608486031215614dd557600080fd5b8335614de081614769565b92506020840135915060408401356001600160401b03811115614e0257600080fd5b614e0e8682870161460a565b9150509250925092565b600060208284031215614e2a57600080fd5b813561192a81614769565b600080600080600060a08688031215614e4d57600080fd5b8535614e5881614769565b94506020860135614e6881614769565b935060408601356001600160401b0380821115614e8457600080fd5b614e9089838a0161487b565b94506060880135915080821115614ea657600080fd5b614eb289838a0161487b565b93506080880135915080821115614c4b57600080fd5b60008060008060808587031215614ede57600080fd5b8435614ee981614769565b93506020850135614ef981614769565b9250604085013591506060850135614f1081614769565b939692955090935050565b60008060008060608587031215614f3157600080fd5b8435614f3c81614769565b93506020850135925060408501356001600160401b03811115614ca657600080fd5b600082601f830112614f6f57600080fd5b81356020614f7f614629836147e9565b82815260059290921b84018101918181019086841115614f9e57600080fd5b8286015b848110156148705780356001600160401b03811115614fc15760008081fd5b614fcf8986838b010161460a565b845250918301918301614fa2565b600080600080600060a08688031215614ff557600080fd5b85356001600160401b038082111561500c57600080fd5b61501889838a0161480c565b9650602088013591508082111561502e57600080fd5b61503a89838a0161487b565b9550604088013591508082111561505057600080fd5b61505c89838a01614f5e565b9450606088013591508082111561507257600080fd5b614eb289838a016148d6565b6000806040838503121561509157600080fd5b823561509c81614769565b946020939093013593505050565b600080600080600060a086880312156150c257600080fd5b85356150cd81614769565b945060208601356150dd81614769565b9350604086013592506060860135915060808601356001600160401b0381111561510657600080fd5b614c588882890161460a565b60006020828403121561512457600080fd5b5051919050565b8183823760009101908152919050565b602080825260189082015277476f7665726e6f723a206f6e6c79476f7665726e616e636560401b604082015260600190565b600181811c9082168061518157607f821691505b6020821081036151a157634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60a0815260006151fb60a08301886149e4565b828103602084015261520d8188614a28565b905082810360408401526152218187614a58565b60608401959095525050608001529392505050565b60c08152600061524960c08301896149e4565b828103602084015261525b8189614a28565b9050828103604084015261526f8188614a58565b60608401969096525050608081019290925260a0909101529392505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c6f57610c6f61528e565b65ffffffffffff8281168282160390808211156152d6576152d661528e565b5092915050565b6000602082840312156152ef57600080fd5b81516001600160401b0381111561530557600080fd5b8201601f8101841361531657600080fd5b8051615324614629826145e3565b81815285602083850101111561533957600080fd5b6115af826020830160208601614706565b81810381811115610c6f57610c6f61528e565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561538557600080fd5b815165ffffffffffff8116811461192a57600080fd5b6080815260006153ae60808301876149e4565b82810360208401526153c08187614a28565b905082810360408401526153d48186614a58565b91505082606083015295945050505050565b8082028115828204841417610c6f57610c6f61528e565b634e487b7160e01b600052601260045260246000fd5b60008261543057634e487b7160e01b600052601260045260246000fd5b500490565b84815260ff841660208201528260408201526080606082015260006117f0608083018461472a565b85815260ff8516602082015283604082015260a06060820152600061548560a083018561472a565b8281036080840152615497818561472a565b98975050505050505050565b6000600182016154b5576154b561528e565b5060010190565b6000602082840312156154ce57600080fd5b8151801515811461192a57600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160e01b031983168152815160009061554c816004850160208701614706565b919091016004019392505050565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b8981526001600160a01b0389166020820152610120604082018190526000906155c68382018b6149e4565b905082810360608401526155da818a614a28565b905082810360808401526155ee8189614a58565b905082810360a08401526156028188614a58565b90508560c08401528460e0840152828103610100840152615623818561472a565b9c9b505050505050505050505050565b601f82111561567957600081815260208120601f850160051c8101602086101561565a5750805b601f850160051c820191505b8181101561159957828155600101615666565b505050565b81516001600160401b038111156156975761569761459d565b6156ab816156a5845461516d565b84615633565b602080601f8311600181146156e057600084156156c85750858301515b600019600386901b1c1916600185901b178555611599565b600085815260208120601f198616915b8281101561570f578886015182559484019460019091019084016156f0565b508582101561572d5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a2646970667358221220ba7affd71155ab5d07348383105a5cdaec3c12c44bf7888181d5259042085dd464736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` var ChildTimelockArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"ChildTimelock","sourceName":"contracts/blade/governance/ChildTimelock.sol","abi":[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"CallExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"CallSalt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"delay","type":"uint256"}],"name":"CallScheduled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"Cancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDuration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"MinDelayChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"inputs":[],"name":"CANCELLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EXECUTOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROPOSER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIMELOCK_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"cancel","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"payload","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"executeBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getMinDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperation","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"}],"name":"hashOperationBatch","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"minDelay","type":"uint256"},{"internalType":"address[]","name":"proposers","type":"address[]"},{"internalType":"address[]","name":"executors","type":"address[]"},{"internalType":"address","name":"admin","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperation","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"id","type":"bytes32"}],"name":"isOperationReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"schedule","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"targets","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"},{"internalType":"bytes[]","name":"payloads","type":"bytes[]"},{"internalType":"bytes32","name":"predecessor","type":"bytes32"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"uint256","name":"delay","type":"uint256"}],"name":"scheduleBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"updateDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"bytecode":"0x608060405234801561001057600080fd5b506122ae806100206000396000f3fe6080604052600436106101865760003560e01c80638065657f116100d7578063bc197c8111610085578063bc197c811461048b578063c4c4c7b3146104b7578063c4d252f5146104d7578063d45c4435146104f7578063d547741f14610524578063e38335e514610544578063f23a6e6114610557578063f27a0c921461058357600080fd5b80638065657f146103b25780638f2a0bb0146103d25780638f61f4f5146103f257806391d1485414610414578063a217fddf14610434578063b08e51c014610449578063b1c5f4271461046b57600080fd5b8063248a9ca311610134578063248a9ca3146102b25780632ab0f529146102e25780632f2ff15d1461031257806331d507501461033257806336568abe14610352578063584b153e1461037257806364d623531461039257600080fd5b806301d5062a1461019257806301ffc9a7146101b457806307bd0265146101e95780630d3cf6fc14610219578063134008d31461023b57806313bc9f201461024e578063150b7a021461026e57600080fd5b3661018d57005b600080fd5b34801561019e57600080fd5b506101b26101ad366004611718565b610598565b005b3480156101c057600080fd5b506101d46101cf36600461178c565b61065c565b60405190151581526020015b60405180910390f35b3480156101f557600080fd5b5061020b60008051602061223983398151915281565b6040519081526020016101e0565b34801561022557600080fd5b5061020b6000805160206121f983398151915281565b6101b26102493660046117b6565b610687565b34801561025a57600080fd5b506101d4610269366004611821565b61072a565b34801561027a57600080fd5b506102996102893660046118ef565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101e0565b3480156102be57600080fd5b5061020b6102cd366004611821565b60009081526065602052604090206001015490565b3480156102ee57600080fd5b506101d46102fd366004611821565b60009081526097602052604090205460011490565b34801561031e57600080fd5b506101b261032d366004611956565b610750565b34801561033e57600080fd5b506101d461034d366004611821565b61077a565b34801561035e57600080fd5b506101b261036d366004611956565b610793565b34801561037e57600080fd5b506101d461038d366004611821565b610816565b34801561039e57600080fd5b506101b26103ad366004611821565b61082d565b3480156103be57600080fd5b5061020b6103cd3660046117b6565b6108d1565b3480156103de57600080fd5b506101b26103ed3660046119c6565b610910565b3480156103fe57600080fd5b5061020b60008051602061221983398151915281565b34801561042057600080fd5b506101d461042f366004611956565b610a91565b34801561044057600080fd5b5061020b600081565b34801561045557600080fd5b5061020b60008051602061225983398151915281565b34801561047757600080fd5b5061020b610486366004611a77565b610abc565b34801561049757600080fd5b506102996104a6366004611bad565b63bc197c8160e01b95945050505050565b3480156104c357600080fd5b506101b26104d2366004611cb8565b610b01565b3480156104e357600080fd5b506101b26104f2366004611821565b610c1a565b34801561050357600080fd5b5061020b610512366004611821565b60009081526097602052604090205490565b34801561053057600080fd5b506101b261053f366004611956565b610cdd565b6101b2610552366004611a77565b610d02565b34801561056357600080fd5b50610299610572366004611d35565b63f23a6e6160e01b95945050505050565b34801561058f57600080fd5b5060985461020b565b6000805160206122198339815191526105b081610e7a565b60006105c08989898989896108d1565b90506105cc8184610e87565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161060896959493929190611dc2565b60405180910390a3831561065157807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161064891815260200190565b60405180910390a25b505050505050505050565b60006001600160e01b03198216630271189760e51b1480610681575061068182610f76565b92915050565b6000805160206122398339815191526106a1816000610a91565b6106af576106af8133610fab565b60006106bf8888888888886108d1565b90506106cb8185611004565b6106d78888888861109f565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161070f9493929190611dff565b60405180910390a36107208161116b565b5050505050505050565b6000818152609760205260408120546001811180156107495750428111155b9392505050565b60008281526065602052604090206001015461076b81610e7a565b61077583836111a4565b505050565b60008181526097602052604081205481905b1192915050565b6001600160a01b03811633146108085760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610812828261122a565b5050565b60008181526097602052604081205460019061078c565b3330146108905760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b60648201526084016107ff565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b60008686868686866040516020016108ee96959493929190611dc2565b6040516020818303038152906040528051906020012090509695505050505050565b60008051602061221983398151915261092881610e7a565b8887146109475760405162461bcd60e51b81526004016107ff90611e31565b8885146109665760405162461bcd60e51b81526004016107ff90611e31565b60006109788b8b8b8b8b8b8b8b610abc565b90506109848184610e87565b60005b8a811015610a425780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e858181106109c4576109c4611e74565b90506020020160208101906109d99190611e8a565b8d8d868181106109eb576109eb611e74565b905060200201358c8c87818110610a0457610a04611e74565b9050602002810190610a169190611ea5565b8c8b604051610a2a96959493929190611dc2565b60405180910390a3610a3b81611f01565b9050610987565b508315610a8457807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610a7b91815260200190565b60405180910390a25b5050505050505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610add989796959493929190611fab565b60405160208183030381529060405280519060200120905098975050505050505050565b600054610100900460ff1615808015610b215750600054600160ff909116105b80610b3b5750303b158015610b3b575060005460ff166001145b610b9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ff565b6000805460ff191660011790558015610bc1576000805461ff0019166101001790555b610bcd85858585611291565b8015610c13576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600080516020612259833981519152610c3281610e7a565b610c3b82610816565b610ca15760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b60648201526084016107ff565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260656020526040902060010154610cf881610e7a565b610775838361122a565b600080516020612239833981519152610d1c816000610a91565b610d2a57610d2a8133610fab565b878614610d495760405162461bcd60e51b81526004016107ff90611e31565b878414610d685760405162461bcd60e51b81526004016107ff90611e31565b6000610d7a8a8a8a8a8a8a8a8a610abc565b9050610d868185611004565b60005b89811015610e645760008b8b83818110610da557610da5611e74565b9050602002016020810190610dba9190611e8a565b905060008a8a84818110610dd057610dd0611e74565b9050602002013590503660008a8a86818110610dee57610dee611e74565b9050602002810190610e009190611ea5565b91509150610e108484848461109f565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610e479493929190611dff565b60405180910390a35050505080610e5d90611f01565b9050610d89565b50610e6e8161116b565b50505050505050505050565b610e848133610fab565b50565b610e908261077a565b15610ef55760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b60648201526084016107ff565b609854811015610f565760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b60648201526084016107ff565b610f60814261204c565b6000928352609760205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b148061068157506301ffc9a760e01b6001600160e01b0319831614610681565b610fb58282610a91565b61081257610fc2816112ca565b610fcd8360206112dc565b604051602001610fde929190612083565b60408051601f198184030181529082905262461bcd60e51b82526107ff916004016120f2565b61100d8261072a565b6110295760405162461bcd60e51b81526004016107ff90612125565b80158061104457506000818152609760205260409020546001145b6108125760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b60648201526084016107ff565b6000846001600160a01b03168484846040516110bc92919061216f565b60006040518083038185875af1925050503d80600081146110f9576040519150601f19603f3d011682016040523d82523d6000602084013e6110fe565b606091505b5050905080610c135760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b60648201526084016107ff565b6111748161072a565b6111905760405162461bcd60e51b81526004016107ff90612125565b600090815260976020526040902060019055565b6111ae8282610a91565b6108125760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111e63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112348282610a91565b156108125760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff166112b85760405162461bcd60e51b81526004016107ff9061217f565b6112c484848484611477565b50505050565b60606106816001600160a01b03831660145b606060006112eb8360026121ca565b6112f690600261204c565b6001600160401b0381111561130d5761130d61183a565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b509050600360fc1b8160008151811061135257611352611e74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061138157611381611e74565b60200101906001600160f81b031916908160001a90535060006113a58460026121ca565b6113b090600161204c565b90505b6001811115611428576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106113e4576113e4611e74565b1a60f81b8282815181106113fa576113fa611e74565b60200101906001600160f81b031916908160001a90535060049490941c93611421816121e1565b90506113b3565b5083156107495760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ff565b600054610100900460ff1661149e5760405162461bcd60e51b81526004016107ff9061217f565b6114b66000805160206121f98339815191528061165f565b6114dc6000805160206122198339815191526000805160206121f983398151915261165f565b6115026000805160206122398339815191526000805160206121f983398151915261165f565b6115286000805160206122598339815191526000805160206121f983398151915261165f565b6115406000805160206121f9833981519152306116aa565b6001600160a01b03811615611567576115676000805160206121f9833981519152826116aa565b60005b83518110156115d8576115a460008051602061221983398151915285838151811061159757611597611e74565b60200260200101516116aa565b6115c860008051602061225983398151915285838151811061159757611597611e74565b6115d181611f01565b905061156a565b5060005b82518110156116195761160960008051602061223983398151915284838151811061159757611597611e74565b61161281611f01565b90506115dc565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b61081282826111a4565b80356001600160a01b03811681146116cb57600080fd5b919050565b60008083601f8401126116e257600080fd5b5081356001600160401b038111156116f957600080fd5b60208301915083602082850101111561171157600080fd5b9250929050565b600080600080600080600060c0888a03121561173357600080fd5b61173c886116b4565b96506020880135955060408801356001600160401b0381111561175e57600080fd5b61176a8a828b016116d0565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561179e57600080fd5b81356001600160e01b03198116811461074957600080fd5b60008060008060008060a087890312156117cf57600080fd5b6117d8876116b4565b95506020870135945060408701356001600160401b038111156117fa57600080fd5b61180689828a016116d0565b979a9699509760608101359660809091013595509350505050565b60006020828403121561183357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156118785761187861183a565b604052919050565b600082601f83011261189157600080fd5b81356001600160401b038111156118aa576118aa61183a565b6118bd601f8201601f1916602001611850565b8181528460208386010111156118d257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561190557600080fd5b61190e856116b4565b935061191c602086016116b4565b92506040850135915060608501356001600160401b0381111561193e57600080fd5b61194a87828801611880565b91505092959194509250565b6000806040838503121561196957600080fd5b82359150611979602084016116b4565b90509250929050565b60008083601f84011261199457600080fd5b5081356001600160401b038111156119ab57600080fd5b6020830191508360208260051b850101111561171157600080fd5b600080600080600080600080600060c08a8c0312156119e457600080fd5b89356001600160401b03808211156119fb57600080fd5b611a078d838e01611982565b909b50995060208c0135915080821115611a2057600080fd5b611a2c8d838e01611982565b909950975060408c0135915080821115611a4557600080fd5b50611a528c828d01611982565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b031215611a9357600080fd5b88356001600160401b0380821115611aaa57600080fd5b611ab68c838d01611982565b909a50985060208b0135915080821115611acf57600080fd5b611adb8c838d01611982565b909850965060408b0135915080821115611af457600080fd5b50611b018b828c01611982565b999c989b509699959896976060870135966080013595509350505050565b60006001600160401b03821115611b3857611b3861183a565b5060051b60200190565b600082601f830112611b5357600080fd5b81356020611b68611b6383611b1f565b611850565b82815260059290921b84018101918181019086841115611b8757600080fd5b8286015b84811015611ba25780358352918301918301611b8b565b509695505050505050565b600080600080600060a08688031215611bc557600080fd5b611bce866116b4565b9450611bdc602087016116b4565b935060408601356001600160401b0380821115611bf857600080fd5b611c0489838a01611b42565b94506060880135915080821115611c1a57600080fd5b611c2689838a01611b42565b93506080880135915080821115611c3c57600080fd5b50611c4988828901611880565b9150509295509295909350565b600082601f830112611c6757600080fd5b81356020611c77611b6383611b1f565b82815260059290921b84018101918181019086841115611c9657600080fd5b8286015b84811015611ba257611cab816116b4565b8352918301918301611c9a565b60008060008060808587031215611cce57600080fd5b8435935060208501356001600160401b0380821115611cec57600080fd5b611cf888838901611c56565b94506040870135915080821115611d0e57600080fd5b50611d1b87828801611c56565b925050611d2a606086016116b4565b905092959194509250565b600080600080600060a08688031215611d4d57600080fd5b611d56866116b4565b9450611d64602087016116b4565b9350604086013592506060860135915060808601356001600160401b03811115611d8d57600080fd5b611c4988828901611880565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201526000611dea60a083018688611d99565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201526000611e27606083018486611d99565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9c57600080fd5b610749826116b4565b6000808335601e19843603018112611ebc57600080fd5b8301803591506001600160401b03821115611ed657600080fd5b60200191503681900382131561171157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611f1357611f13611eeb565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611f9e5782840389528135601e19883603018112611f5557600080fd5b870185810190356001600160401b03811115611f7057600080fd5b803603821315611f7f57600080fd5b611f8a868284611d99565b9a87019a9550505090840190600101611f34565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611fec576001600160a01b03611fd7846116b4565b16825260209283019290910190600101611fbe565b5083810360208501528881526001600160fb1b0389111561200c57600080fd5b8860051b9150818a602083013701828103602090810160408501526120349082018789611f1a565b60608401959095525050608001529695505050505050565b8082018082111561068157610681611eeb565b60005b8381101561207a578181015183820152602001612062565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516120b581601785016020880161205f565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516120e681602884016020880161205f565b01602801949350505050565b602081526000825180602084015261211181604085016020870161205f565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808202811582820484141761068157610681611eeb565b6000816121f0576121f0611eeb565b50600019019056fe5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783a26469706673582212208c4ac6ee4725f0516e68b3b8fd35d5032a14c3d674c139b53e29e06603e6e22464736f6c63430008130033","deployedBytecode":"0x6080604052600436106101865760003560e01c80638065657f116100d7578063bc197c8111610085578063bc197c811461048b578063c4c4c7b3146104b7578063c4d252f5146104d7578063d45c4435146104f7578063d547741f14610524578063e38335e514610544578063f23a6e6114610557578063f27a0c921461058357600080fd5b80638065657f146103b25780638f2a0bb0146103d25780638f61f4f5146103f257806391d1485414610414578063a217fddf14610434578063b08e51c014610449578063b1c5f4271461046b57600080fd5b8063248a9ca311610134578063248a9ca3146102b25780632ab0f529146102e25780632f2ff15d1461031257806331d507501461033257806336568abe14610352578063584b153e1461037257806364d623531461039257600080fd5b806301d5062a1461019257806301ffc9a7146101b457806307bd0265146101e95780630d3cf6fc14610219578063134008d31461023b57806313bc9f201461024e578063150b7a021461026e57600080fd5b3661018d57005b600080fd5b34801561019e57600080fd5b506101b26101ad366004611718565b610598565b005b3480156101c057600080fd5b506101d46101cf36600461178c565b61065c565b60405190151581526020015b60405180910390f35b3480156101f557600080fd5b5061020b60008051602061223983398151915281565b6040519081526020016101e0565b34801561022557600080fd5b5061020b6000805160206121f983398151915281565b6101b26102493660046117b6565b610687565b34801561025a57600080fd5b506101d4610269366004611821565b61072a565b34801561027a57600080fd5b506102996102893660046118ef565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016101e0565b3480156102be57600080fd5b5061020b6102cd366004611821565b60009081526065602052604090206001015490565b3480156102ee57600080fd5b506101d46102fd366004611821565b60009081526097602052604090205460011490565b34801561031e57600080fd5b506101b261032d366004611956565b610750565b34801561033e57600080fd5b506101d461034d366004611821565b61077a565b34801561035e57600080fd5b506101b261036d366004611956565b610793565b34801561037e57600080fd5b506101d461038d366004611821565b610816565b34801561039e57600080fd5b506101b26103ad366004611821565b61082d565b3480156103be57600080fd5b5061020b6103cd3660046117b6565b6108d1565b3480156103de57600080fd5b506101b26103ed3660046119c6565b610910565b3480156103fe57600080fd5b5061020b60008051602061221983398151915281565b34801561042057600080fd5b506101d461042f366004611956565b610a91565b34801561044057600080fd5b5061020b600081565b34801561045557600080fd5b5061020b60008051602061225983398151915281565b34801561047757600080fd5b5061020b610486366004611a77565b610abc565b34801561049757600080fd5b506102996104a6366004611bad565b63bc197c8160e01b95945050505050565b3480156104c357600080fd5b506101b26104d2366004611cb8565b610b01565b3480156104e357600080fd5b506101b26104f2366004611821565b610c1a565b34801561050357600080fd5b5061020b610512366004611821565b60009081526097602052604090205490565b34801561053057600080fd5b506101b261053f366004611956565b610cdd565b6101b2610552366004611a77565b610d02565b34801561056357600080fd5b50610299610572366004611d35565b63f23a6e6160e01b95945050505050565b34801561058f57600080fd5b5060985461020b565b6000805160206122198339815191526105b081610e7a565b60006105c08989898989896108d1565b90506105cc8184610e87565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a60405161060896959493929190611dc2565b60405180910390a3831561065157807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d03878560405161064891815260200190565b60405180910390a25b505050505050505050565b60006001600160e01b03198216630271189760e51b1480610681575061068182610f76565b92915050565b6000805160206122398339815191526106a1816000610a91565b6106af576106af8133610fab565b60006106bf8888888888886108d1565b90506106cb8185611004565b6106d78888888861109f565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a60405161070f9493929190611dff565b60405180910390a36107208161116b565b5050505050505050565b6000818152609760205260408120546001811180156107495750428111155b9392505050565b60008281526065602052604090206001015461076b81610e7a565b61077583836111a4565b505050565b60008181526097602052604081205481905b1192915050565b6001600160a01b03811633146108085760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610812828261122a565b5050565b60008181526097602052604081205460019061078c565b3330146108905760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b60648201526084016107ff565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b60008686868686866040516020016108ee96959493929190611dc2565b6040516020818303038152906040528051906020012090509695505050505050565b60008051602061221983398151915261092881610e7a565b8887146109475760405162461bcd60e51b81526004016107ff90611e31565b8885146109665760405162461bcd60e51b81526004016107ff90611e31565b60006109788b8b8b8b8b8b8b8b610abc565b90506109848184610e87565b60005b8a811015610a425780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e858181106109c4576109c4611e74565b90506020020160208101906109d99190611e8a565b8d8d868181106109eb576109eb611e74565b905060200201358c8c87818110610a0457610a04611e74565b9050602002810190610a169190611ea5565b8c8b604051610a2a96959493929190611dc2565b60405180910390a3610a3b81611f01565b9050610987565b508315610a8457807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610a7b91815260200190565b60405180910390a25b5050505050505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008888888888888888604051602001610add989796959493929190611fab565b60405160208183030381529060405280519060200120905098975050505050505050565b600054610100900460ff1615808015610b215750600054600160ff909116105b80610b3b5750303b158015610b3b575060005460ff166001145b610b9e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107ff565b6000805460ff191660011790558015610bc1576000805461ff0019166101001790555b610bcd85858585611291565b8015610c13576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b600080516020612259833981519152610c3281610e7a565b610c3b82610816565b610ca15760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b60648201526084016107ff565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b600082815260656020526040902060010154610cf881610e7a565b610775838361122a565b600080516020612239833981519152610d1c816000610a91565b610d2a57610d2a8133610fab565b878614610d495760405162461bcd60e51b81526004016107ff90611e31565b878414610d685760405162461bcd60e51b81526004016107ff90611e31565b6000610d7a8a8a8a8a8a8a8a8a610abc565b9050610d868185611004565b60005b89811015610e645760008b8b83818110610da557610da5611e74565b9050602002016020810190610dba9190611e8a565b905060008a8a84818110610dd057610dd0611e74565b9050602002013590503660008a8a86818110610dee57610dee611e74565b9050602002810190610e009190611ea5565b91509150610e108484848461109f565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b5886868686604051610e479493929190611dff565b60405180910390a35050505080610e5d90611f01565b9050610d89565b50610e6e8161116b565b50505050505050505050565b610e848133610fab565b50565b610e908261077a565b15610ef55760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b60648201526084016107ff565b609854811015610f565760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b60648201526084016107ff565b610f60814261204c565b6000928352609760205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b148061068157506301ffc9a760e01b6001600160e01b0319831614610681565b610fb58282610a91565b61081257610fc2816112ca565b610fcd8360206112dc565b604051602001610fde929190612083565b60408051601f198184030181529082905262461bcd60e51b82526107ff916004016120f2565b61100d8261072a565b6110295760405162461bcd60e51b81526004016107ff90612125565b80158061104457506000818152609760205260409020546001145b6108125760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b60648201526084016107ff565b6000846001600160a01b03168484846040516110bc92919061216f565b60006040518083038185875af1925050503d80600081146110f9576040519150601f19603f3d011682016040523d82523d6000602084013e6110fe565b606091505b5050905080610c135760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b60648201526084016107ff565b6111748161072a565b6111905760405162461bcd60e51b81526004016107ff90612125565b600090815260976020526040902060019055565b6111ae8282610a91565b6108125760008281526065602090815260408083206001600160a01b03851684529091529020805460ff191660011790556111e63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6112348282610a91565b156108125760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff166112b85760405162461bcd60e51b81526004016107ff9061217f565b6112c484848484611477565b50505050565b60606106816001600160a01b03831660145b606060006112eb8360026121ca565b6112f690600261204c565b6001600160401b0381111561130d5761130d61183a565b6040519080825280601f01601f191660200182016040528015611337576020820181803683370190505b509050600360fc1b8160008151811061135257611352611e74565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061138157611381611e74565b60200101906001600160f81b031916908160001a90535060006113a58460026121ca565b6113b090600161204c565b90505b6001811115611428576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106113e4576113e4611e74565b1a60f81b8282815181106113fa576113fa611e74565b60200101906001600160f81b031916908160001a90535060049490941c93611421816121e1565b90506113b3565b5083156107495760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016107ff565b600054610100900460ff1661149e5760405162461bcd60e51b81526004016107ff9061217f565b6114b66000805160206121f98339815191528061165f565b6114dc6000805160206122198339815191526000805160206121f983398151915261165f565b6115026000805160206122398339815191526000805160206121f983398151915261165f565b6115286000805160206122598339815191526000805160206121f983398151915261165f565b6115406000805160206121f9833981519152306116aa565b6001600160a01b03811615611567576115676000805160206121f9833981519152826116aa565b60005b83518110156115d8576115a460008051602061221983398151915285838151811061159757611597611e74565b60200260200101516116aa565b6115c860008051602061225983398151915285838151811061159757611597611e74565b6115d181611f01565b905061156a565b5060005b82518110156116195761160960008051602061223983398151915284838151811061159757611597611e74565b61161281611f01565b90506115dc565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b61081282826111a4565b80356001600160a01b03811681146116cb57600080fd5b919050565b60008083601f8401126116e257600080fd5b5081356001600160401b038111156116f957600080fd5b60208301915083602082850101111561171157600080fd5b9250929050565b600080600080600080600060c0888a03121561173357600080fd5b61173c886116b4565b96506020880135955060408801356001600160401b0381111561175e57600080fd5b61176a8a828b016116d0565b989b979a50986060810135976080820135975060a09091013595509350505050565b60006020828403121561179e57600080fd5b81356001600160e01b03198116811461074957600080fd5b60008060008060008060a087890312156117cf57600080fd5b6117d8876116b4565b95506020870135945060408701356001600160401b038111156117fa57600080fd5b61180689828a016116d0565b979a9699509760608101359660809091013595509350505050565b60006020828403121561183357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156118785761187861183a565b604052919050565b600082601f83011261189157600080fd5b81356001600160401b038111156118aa576118aa61183a565b6118bd601f8201601f1916602001611850565b8181528460208386010111156118d257600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561190557600080fd5b61190e856116b4565b935061191c602086016116b4565b92506040850135915060608501356001600160401b0381111561193e57600080fd5b61194a87828801611880565b91505092959194509250565b6000806040838503121561196957600080fd5b82359150611979602084016116b4565b90509250929050565b60008083601f84011261199457600080fd5b5081356001600160401b038111156119ab57600080fd5b6020830191508360208260051b850101111561171157600080fd5b600080600080600080600080600060c08a8c0312156119e457600080fd5b89356001600160401b03808211156119fb57600080fd5b611a078d838e01611982565b909b50995060208c0135915080821115611a2057600080fd5b611a2c8d838e01611982565b909950975060408c0135915080821115611a4557600080fd5b50611a528c828d01611982565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b60008060008060008060008060a0898b031215611a9357600080fd5b88356001600160401b0380821115611aaa57600080fd5b611ab68c838d01611982565b909a50985060208b0135915080821115611acf57600080fd5b611adb8c838d01611982565b909850965060408b0135915080821115611af457600080fd5b50611b018b828c01611982565b999c989b509699959896976060870135966080013595509350505050565b60006001600160401b03821115611b3857611b3861183a565b5060051b60200190565b600082601f830112611b5357600080fd5b81356020611b68611b6383611b1f565b611850565b82815260059290921b84018101918181019086841115611b8757600080fd5b8286015b84811015611ba25780358352918301918301611b8b565b509695505050505050565b600080600080600060a08688031215611bc557600080fd5b611bce866116b4565b9450611bdc602087016116b4565b935060408601356001600160401b0380821115611bf857600080fd5b611c0489838a01611b42565b94506060880135915080821115611c1a57600080fd5b611c2689838a01611b42565b93506080880135915080821115611c3c57600080fd5b50611c4988828901611880565b9150509295509295909350565b600082601f830112611c6757600080fd5b81356020611c77611b6383611b1f565b82815260059290921b84018101918181019086841115611c9657600080fd5b8286015b84811015611ba257611cab816116b4565b8352918301918301611c9a565b60008060008060808587031215611cce57600080fd5b8435935060208501356001600160401b0380821115611cec57600080fd5b611cf888838901611c56565b94506040870135915080821115611d0e57600080fd5b50611d1b87828801611c56565b925050611d2a606086016116b4565b905092959194509250565b600080600080600060a08688031215611d4d57600080fd5b611d56866116b4565b9450611d64602087016116b4565b9350604086013592506060860135915060808601356001600160401b03811115611d8d57600080fd5b611c4988828901611880565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a060408201526000611dea60a083018688611d99565b60608301949094525060800152949350505050565b60018060a01b0385168152836020820152606060408201526000611e27606083018486611d99565b9695505050505050565b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215611e9c57600080fd5b610749826116b4565b6000808335601e19843603018112611ebc57600080fd5b8301803591506001600160401b03821115611ed657600080fd5b60200191503681900382131561171157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201611f1357611f13611eeb565b5060010190565b81835260006020808501808196508560051b810191508460005b87811015611f9e5782840389528135601e19883603018112611f5557600080fd5b870185810190356001600160401b03811115611f7057600080fd5b803603821315611f7f57600080fd5b611f8a868284611d99565b9a87019a9550505090840190600101611f34565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015611fec576001600160a01b03611fd7846116b4565b16825260209283019290910190600101611fbe565b5083810360208501528881526001600160fb1b0389111561200c57600080fd5b8860051b9150818a602083013701828103602090810160408501526120349082018789611f1a565b60608401959095525050608001529695505050505050565b8082018082111561068157610681611eeb565b60005b8381101561207a578181015183820152602001612062565b50506000910152565b76020b1b1b2b9b9a1b7b73a3937b61d1030b1b1b7bab73a1604d1b8152600083516120b581601785016020880161205f565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516120e681602884016020880161205f565b01602801949350505050565b602081526000825180602084015261211181604085016020870161205f565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b808202811582820484141761068157610681611eeb565b6000816121f0576121f0611eeb565b50600019019056fe5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783a26469706673582212208c4ac6ee4725f0516e68b3b8fd35d5032a14c3d674c139b53e29e06603e6e22464736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` +var EntryPointArtifact string = `{"_format":"hh-sol-artifact-1","contractName":"EntryPoint","sourceName":"contracts/blade/accountAbstraction/EntryPoint.sol","abi":[{"inputs":[{"internalType":"uint256","name":"preOpGas","type":"uint256"},{"internalType":"uint256","name":"paid","type":"uint256"},{"internalType":"uint48","name":"validAfter","type":"uint48"},{"internalType":"uint48","name":"validUntil","type":"uint48"},{"internalType":"bool","name":"targetSuccess","type":"bool"},{"internalType":"bytes","name":"targetResult","type":"bytes"}],"name":"ExecutionResult","type":"error"},{"inputs":[{"internalType":"uint256","name":"opIndex","type":"uint256"},{"internalType":"string","name":"reason","type":"string"}],"name":"FailedOp","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"SenderAddressResult","type":"error"},{"inputs":[{"internalType":"address","name":"aggregator","type":"address"}],"name":"SignatureValidationFailed","type":"error"},{"inputs":[{"components":[{"internalType":"uint256","name":"preOpGas","type":"uint256"},{"internalType":"uint256","name":"prefund","type":"uint256"},{"internalType":"bool","name":"sigFailed","type":"bool"},{"internalType":"uint48","name":"validAfter","type":"uint48"},{"internalType":"uint48","name":"validUntil","type":"uint48"},{"internalType":"bytes","name":"paymasterContext","type":"bytes"}],"internalType":"struct IEntryPoint.ReturnInfo","name":"returnInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"senderInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"factoryInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"paymasterInfo","type":"tuple"}],"name":"ValidationResult","type":"error"},{"inputs":[{"components":[{"internalType":"uint256","name":"preOpGas","type":"uint256"},{"internalType":"uint256","name":"prefund","type":"uint256"},{"internalType":"bool","name":"sigFailed","type":"bool"},{"internalType":"uint48","name":"validAfter","type":"uint48"},{"internalType":"uint48","name":"validUntil","type":"uint48"},{"internalType":"bytes","name":"paymasterContext","type":"bytes"}],"internalType":"struct IEntryPoint.ReturnInfo","name":"returnInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"senderInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"factoryInfo","type":"tuple"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"paymasterInfo","type":"tuple"},{"components":[{"internalType":"address","name":"aggregator","type":"address"},{"components":[{"internalType":"uint256","name":"stake","type":"uint256"},{"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"internalType":"struct IStakeManager.StakeInfo","name":"stakeInfo","type":"tuple"}],"internalType":"struct IEntryPoint.AggregatorStakeInfo","name":"aggregatorInfo","type":"tuple"}],"name":"ValidationResultWithAggregation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"address","name":"factory","type":"address"},{"indexed":false,"internalType":"address","name":"paymaster","type":"address"}],"name":"AccountDeployed","type":"event"},{"anonymous":false,"inputs":[],"name":"BeforeExecution","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalDeposit","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"aggregator","type":"address"}],"name":"SignatureAggregatorChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalStaked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unstakeDelaySec","type":"uint256"}],"name":"StakeLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"withdrawTime","type":"uint256"}],"name":"StakeUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"withdrawAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"paymaster","type":"address"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"},{"indexed":false,"internalType":"uint256","name":"actualGasCost","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"actualGasUsed","type":"uint256"}],"name":"UserOperationEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"revertReason","type":"bytes"}],"name":"UserOperationRevertReason","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"withdrawAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"SIG_VALIDATION_FAILED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"address","name":"sender","type":"address"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"}],"name":"_validateSenderAndPaymaster","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"unstakeDelaySec","type":"uint32"}],"name":"addStake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"depositTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint112","name":"deposit","type":"uint112"},{"internalType":"bool","name":"staked","type":"bool"},{"internalType":"uint112","name":"stake","type":"uint112"},{"internalType":"uint32","name":"unstakeDelaySec","type":"uint32"},{"internalType":"uint48","name":"withdrawTime","type":"uint48"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getDepositInfo","outputs":[{"components":[{"internalType":"uint112","name":"deposit","type":"uint112"},{"internalType":"bool","name":"staked","type":"bool"},{"internalType":"uint112","name":"stake","type":"uint112"},{"internalType":"uint32","name":"unstakeDelaySec","type":"uint32"},{"internalType":"uint48","name":"withdrawTime","type":"uint48"}],"internalType":"struct IStakeManager.DepositInfo","name":"info","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint192","name":"key","type":"uint192"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"nonce","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"initCode","type":"bytes"}],"name":"getSenderAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation","name":"userOp","type":"tuple"}],"name":"getUserOpHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation[]","name":"userOps","type":"tuple[]"},{"internalType":"contract IAggregator","name":"aggregator","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct IEntryPoint.UserOpsPerAggregator[]","name":"opsPerAggregator","type":"tuple[]"},{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"handleAggregatedOps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation[]","name":"ops","type":"tuple[]"},{"internalType":"address payable","name":"beneficiary","type":"address"}],"name":"handleOps","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint192","name":"key","type":"uint192"}],"name":"incrementNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"callData","type":"bytes"},{"components":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"address","name":"paymaster","type":"address"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"}],"internalType":"struct EntryPoint.MemoryUserOp","name":"mUserOp","type":"tuple"},{"internalType":"bytes32","name":"userOpHash","type":"bytes32"},{"internalType":"uint256","name":"prefund","type":"uint256"},{"internalType":"uint256","name":"contextOffset","type":"uint256"},{"internalType":"uint256","name":"preOpGas","type":"uint256"}],"internalType":"struct EntryPoint.UserOpInfo","name":"opInfo","type":"tuple"},{"internalType":"bytes","name":"context","type":"bytes"}],"name":"innerHandleOp","outputs":[{"internalType":"uint256","name":"actualGasCost","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint192","name":"","type":"uint192"}],"name":"nonceSequenceNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation","name":"op","type":"tuple"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"targetCallData","type":"bytes"}],"name":"simulateHandleOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"initCode","type":"bytes"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"uint256","name":"callGasLimit","type":"uint256"},{"internalType":"uint256","name":"verificationGasLimit","type":"uint256"},{"internalType":"uint256","name":"preVerificationGas","type":"uint256"},{"internalType":"uint256","name":"maxFeePerGas","type":"uint256"},{"internalType":"uint256","name":"maxPriorityFeePerGas","type":"uint256"},{"internalType":"bytes","name":"paymasterAndData","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"internalType":"struct UserOperation","name":"userOp","type":"tuple"}],"name":"simulateValidation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"}],"name":"withdrawStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"withdrawAddress","type":"address"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"withdrawTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}],"bytecode":"0x60a0604052604051620000129062000055565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b03166080523480156200004957600080fd5b50600160025562000063565b6102138062003fcc83390190565b608051613f4662000086600039600081816112820152612d9d0152613f466000f3fe6080604052600436106101235760003560e01c80638f41ec5a116100a0578063bb9fe6bf11610064578063bb9fe6bf1461041a578063c23a5cea1461042f578063d6383f941461044f578063ee2194231461046f578063fc7e286d1461048f57600080fd5b80638f41ec5a14610392578063957122ab146103a75780639b249f69146103c7578063a6193531146103e7578063b760faf91461040757600080fd5b8063205c2878116100e7578063205c2878146101f657806335567e1a146102165780634b1d7cf5146102365780635287ce121461025657806370a082311461037257600080fd5b80630396cb60146101385780630bd28e3b1461014b5780631b2e01b81461016b5780631d732756146101b65780631fad948c146101d657600080fd5b366101335761013133610543565b005b600080fd5b610131610146366004613070565b6105aa565b34801561015757600080fd5b506101316101663660046130b2565b610830565b34801561017757600080fd5b506101a36101863660046130ed565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101c257600080fd5b506101a36101d13660046132e7565b610867565b3480156101e257600080fd5b506101316101f13660046133f0565b6109d4565b34801561020257600080fd5b50610131610211366004613446565b610b50565b34801561022257600080fd5b506101a36102313660046130ed565b610cc8565b34801561024257600080fd5b506101316102513660046133f0565b610d0e565b34801561026257600080fd5b5061031a610271366004613472565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a08101845281546001600160701b038082168352600160701b820460ff16151594830194909452600160781b90049092169282019290925260019091015463ffffffff81166060830152600160201b900465ffffffffffff16608082015290565b6040805182516001600160701b03908116825260208085015115159083015283830151169181019190915260608083015163ffffffff169082015260809182015165ffffffffffff169181019190915260a0016101ad565b34801561037e57600080fd5b506101a361038d366004613472565b61114b565b34801561039e57600080fd5b506101a3600181565b3480156103b357600080fd5b506101316103c236600461348f565b61116f565b3480156103d357600080fd5b506101316103e2366004613513565b611268565b3480156103f357600080fd5b506101a361040236600461356d565b611323565b610131610415366004613472565b610543565b34801561042657600080fd5b50610131611365565b34801561043b57600080fd5b5061013161044a366004613472565b61148d565b34801561045b57600080fd5b5061013161046a3660046135a1565b6116be565b34801561047b57600080fd5b5061013161048a36600461356d565b6117b9565b34801561049b57600080fd5b506104fd6104aa366004613472565b600060208190529081526040902080546001909101546001600160701b0380831692600160701b810460ff1692600160781b9091049091169063ffffffff811690600160201b900465ffffffffffff1685565b604080516001600160701b0396871681529415156020860152929094169183019190915263ffffffff16606082015265ffffffffffff909116608082015260a0016101ad565b61054d8134611995565b6001600160a01b03811660008181526020818152604091829020805492516001600160701b03909316835292917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c491015b60405180910390a25050565b33600090815260208190526040902063ffffffff82166106115760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff908116908316101561066f5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610608565b805460009061068f903490600160781b90046001600160701b0316613618565b9050600081116106d65760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b6044820152606401610608565b6001600160701b0381111561071e5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b6044820152606401610608565b6040805160a08101825283546001600160701b0390811682526001602080840182815286841685870190815263ffffffff808b16606088019081526000608089018181523380835296829052908a902098518954955194518916600160781b02600160781b600160e81b0319951515600160701b026001600160781b03199097169190991617949094179290921695909517865551949092018054925165ffffffffffff16600160201b0269ffffffffffffffffffff19909316949093169390931717905590517fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0190610823908490879091825263ffffffff16602082015260400190565b60405180910390a2505050565b3360009081526001602090815260408083206001600160c01b0385168452909152812080549161085f8361362b565b919050555050565b6000805a90503330146108b65760405162461bcd60e51b81526020600482015260176024820152764141393220696e7465726e616c2063616c6c206f6e6c7960481b6044820152606401610608565b8451604081015160608201518101611388015a10156108e05763deaddead60e01b60005260206000fd5b8751600090156109745760006108fd846000015160008c86611a31565b905080610972576000610911610800611a49565b80519091501561096c5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610963929190613694565b60405180910390a35b60019250505b505b600088608001515a86030190506109c66000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250611a75915050565b9a9950505050505050505050565b6109dc611d6c565b816000816001600160401b038111156109f7576109f7613122565b604051908082528060200260200182016040528015610a3057816020015b610a1d612fe6565b815260200190600190039081610a155790505b50905060005b82811015610aa9576000828281518110610a5257610a526136ad565b60200260200101519050600080610a8d848a8a87818110610a7557610a756136ad565b9050602002810190610a8791906136c3565b85611dc3565b91509150610a9e8483836000611fa1565b505050600101610a36565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b83811015610b3357610b2781888884818110610af657610af66136ad565b9050602002810190610b0891906136c3565b858481518110610b1a57610b1a6136ad565b6020026020010151612137565b90910190600101610ad8565b50610b3e848261225e565b505050610b4b6001600255565b505050565b33600090815260208190526040902080546001600160701b0316821115610bb55760405162461bcd60e51b8152602060048201526019602482015278576974686472617720616d6f756e7420746f6f206c6172676560381b6044820152606401610608565b8054610bcb9083906001600160701b03166136e4565b81546001600160701b0319166001600160701b0391909116178155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610c77576040519150601f19603f3d011682016040523d82523d6000602084013e610c7c565b606091505b5050905080610cc25760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b6044820152606401610608565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160c01b038516845290915290819020549082901b67ffffffffffffffff1916175b92915050565b610d16611d6c565b816000805b82811015610e845736868683818110610d3657610d366136ad565b9050602002810190610d4891906136f7565b9050366000610d57838061370d565b90925090506000610d6e6040850160208601613472565b90506000196001600160a01b03821601610dc45760405162461bcd60e51b815260206004820152601760248201527620a09c9b1034b73b30b634b21030b3b3b932b3b0ba37b960491b6044820152606401610608565b6001600160a01b03811615610e61576001600160a01b03811663e3563a4f8484610df16040890189613756565b6040518563ffffffff1660e01b8152600401610e109493929190613901565b60006040518083038186803b158015610e2857600080fd5b505afa925050508015610e39575060015b610e615760405163086a9f7560e41b81526001600160a01b0382166004820152602401610608565b610e6b8287613618565b9550505050508080610e7c9061362b565b915050610d1b565b506000816001600160401b03811115610e9f57610e9f613122565b604051908082528060200260200182016040528015610ed857816020015b610ec5612fe6565b815260200190600190039081610ebd5790505b506040519091507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a16000805b84811015610fed5736888883818110610f2457610f246136ad565b9050602002810190610f3691906136f7565b9050366000610f45838061370d565b90925090506000610f5c6040850160208601613472565b90508160005b81811015610fd4576000898981518110610f7e57610f7e6136ad565b60200260200101519050600080610fa18b898987818110610a7557610a756136ad565b91509150610fb184838389611fa1565b8a610fbb8161362b565b9b50505050508080610fcc9061362b565b915050610f62565b5050505050508080610fe59061362b565b915050610f09565b50600080915060005b858110156111065736898983818110611011576110116136ad565b905060200281019061102391906136f7565b90506110356040820160208301613472565b6001600160a01b03167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2366000611077838061370d565b90925090508060005b818110156110ee576110c28885858481811061109e5761109e6136ad565b90506020028101906110b091906136c3565b8b8b81518110610b1a57610b1a6136ad565b6110cc9088613618565b9650876110d88161362b565b98505080806110e69061362b565b915050611080565b505050505080806110fe9061362b565b915050610ff6565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a261113c868261225e565b5050505050610b4b6001600255565b6001600160a01b03166000908152602081905260409020546001600160701b031690565b8315801561118557506001600160a01b0383163b155b156111ce5760405162461bcd60e51b815260206004820152601960248201527810504c8c081858d8dbdd5b9d081b9bdd0819195c1b1bde5959603a1b6044820152606401610608565b601481106112465760006111e5601482848661397e565b6111ee916139a8565b60601c9050803b6000036112445760405162461bcd60e51b815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610608565b505b60405162461bcd60e51b81526020600482015260006024820152604401610608565b604051632b870d1b60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063570e1a36906112b990869086906004016139dd565b6020604051808303816000875af11580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc91906139f1565b604051633653dc0360e11b81526001600160a01b0382166004820152909150602401610608565b600061132e82612352565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b3360009081526020819052604081206001810154909163ffffffff90911690036113be5760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b6044820152606401610608565b8054600160701b900460ff1661140a5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b6044820152606401610608565b60018101546000906114229063ffffffff1642613a0e565b60018301805469ffffffffffff000000001916600160201b65ffffffffffff841690810291909117909155835460ff60701b1916845560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a9060200161059e565b3360009081526020819052604090208054600160781b90046001600160701b0316806114f25760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b6044820152606401610608565b6001820154600160201b900465ffffffffffff166115525760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610608565b600182015442600160201b90910465ffffffffffff1611156115b65760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610608565b60018201805469ffffffffffffffffffff191690558154600160781b600160e81b0319168255604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461166d576040519150601f19603f3d011682016040523d82523d6000602084013e611672565b606091505b5050905080610cc25760405162461bcd60e51b81526020600482015260186024820152776661696c656420746f207769746864726177207374616b6560401b6044820152606401610608565b6116c6612fe6565b6116cf8561236b565b6000806116de60008885611dc3565b9150915060006116ee8383612445565b90506116f943600052565b600061170760008a87612137565b905061171243600052565b600060606001600160a01b038a161561178857896001600160a01b0316898960405161173f929190613a34565b6000604051808303816000865af19150503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5090925090505b866080015183856020015186604001518585604051630116f59360e71b815260040161060896959493929190613a44565b6117c1612fe6565b6117ca8261236b565b6000806117d960008585611dc3565b9150915060006117f0846000015160a00151612511565b84515190915060009061180290612511565b9050611821604051806040016040528060008152602001600081525090565b36600061183160408a018a613756565b909250905060006014821015611848576000611863565b61185660146000848661397e565b61185f916139a8565b60601c5b905061186e81612511565b9350505050600061187f8686612445565b9050600081600001519050600060016001600160a01b0316826001600160a01b031614905060006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff1681526020016118fc8c6060015190565b905290506001600160a01b0383161580159061192257506001600160a01b038316600114155b156119745760006040518060400160405280856001600160a01b0316815260200161194c86612511565b81525090508187878a84604051633ebb2d3960e21b8152600401610608959493929190613ae6565b8086868960405163e0cff05f60e01b81526004016106089493929190613b66565b6001600160a01b038216600090815260208190526040812080549091906119c69084906001600160701b0316613618565b90506001600160701b03811115611a125760405162461bcd60e51b815260206004820152601060248201526f6465706f736974206f766572666c6f7760801b6044820152606401610608565b81546001600160701b0319166001600160701b03919091161790555050565b6000806000845160208601878987f195945050505050565b60603d82811115611a575750815b604051602082018101604052818152816000602083013e9392505050565b6000805a855190915060009081611a8b82612560565b60a08301519091506001600160a01b038116611aaa5782519350611c51565b809350600088511115611c5157868202955060028a6002811115611ad057611ad0613bbd565b14611b4257606083015160405163a9a2340960e01b81526001600160a01b0383169163a9a2340991611b0a908e908d908c90600401613bd3565b600060405180830381600088803b158015611b2457600080fd5b5087f1158015611b38573d6000803e3d6000fd5b5050505050611c51565b606083015160405163a9a2340960e01b81526001600160a01b0383169163a9a2340991611b77908e908d908c90600401613bd3565b600060405180830381600088803b158015611b9157600080fd5b5087f193505050508015611ba3575060015b611c5157611baf613c1a565b806308c379a003611c085750611bc3613c36565b80611bce5750611c0a565b8b81604051602001611be09190613cbf565b60408051601f1981840301815290829052631101335b60e11b82526106089291600401613694565b505b8a604051631101335b60e11b81526004016106089181526040602082018190526012908201527110504d4c081c1bdcdd13dc081c995d995c9d60721b606082015260800190565b5a85038701965081870295508589604001511015611cba578a604051631101335b60e11b815260040161060891815260406020808301829052908201527f414135312070726566756e642062656c6f772061637475616c476173436f7374606082015260800190565b6040890151869003611ccc8582611995565b6000808c6002811115611ce157611ce1613bbd565b1490508460a001516001600160a01b031685600001516001600160a01b03168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f604051611d54949392919093845291151560208401526040830152606082015260800190565b60405180910390a45050505050505095945050505050565b6002805403611dbd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610608565b60028055565b60008060005a8451909150611dd88682612590565b611de186611323565b6020860152604081015160608201516080830151171760e087013517610100870135176001600160781b03811115611e565760405162461bcd60e51b815260206004820152601860248201527741413934206761732076616c756573206f766572666c6f7760401b6044820152606401610608565b600080611e6284612689565b9050611e708a8a8a846126d6565b85516020870151919950919350611e8791906128f3565b611edd5789604051631101335b60e11b8152600401610608918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b611ee643600052565b60a08401516060906001600160a01b031615611f0e57611f098b8b8b8587612940565b975090505b60005a87039050808b60a001351015611f73578b604051631101335b60e11b8152600401610608918152604060208201819052601e908201527f41413430206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60408a018390528160608b015260c08b01355a8803018a608001818152505050505050505050935093915050565b600080611fad85612b63565b91509150816001600160a01b0316836001600160a01b0316146120135785604051631101335b60e11b81526004016106089181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b80156120655785604051631101335b60e11b815260040161060891815260406020820181905260179082015276414132322065787069726564206f72206e6f742064756560481b606082015260800190565b600061207085612b63565b925090506001600160a01b038116156120cc5786604051631101335b60e11b81526004016106089181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b811561212e5786604051631101335b60e11b81526004016106089181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b6000805a9050600061214a846060015190565b905030631d73275661215f6060880188613756565b87856040518563ffffffff1660e01b81526004016121809493929190613cfd565b6020604051808303816000875af19250505080156121bb575060408051601f3d908101601f191682019092526121b891810190613db0565b60015b61225257600060206000803e50600051632152215360e01b810161221d5786604051631101335b60e11b8152600401610608918152604060208201819052600f908201526e41413935206f7574206f662067617360881b606082015260800190565b600085608001515a61222f90866136e4565b6122399190613618565b9050612249886002888685611a75565b94505050612255565b92505b50509392505050565b6001600160a01b0382166122af5760405162461bcd60e51b81526020600482015260186024820152774141393020696e76616c69642062656e656669636961727960401b6044820152606401610608565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146122fc576040519150601f19603f3d011682016040523d82523d6000602084013e612301565b606091505b5050905080610b4b5760405162461bcd60e51b815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610608565b600061235d82612bb6565b805190602001209050919050565b3063957122ab61237e6040840184613756565b61238b6020860186613472565b612399610120870187613756565b6040518663ffffffff1660e01b81526004016123b9959493929190613dc9565b60006040518083038186803b1580156123d157600080fd5b505afa9250505080156123e2575060015b612442576123ee613c1a565b806308c379a0036124365750612402613c36565b8061240d5750612438565b80511561243257600081604051631101335b60e11b8152600401610608929190613694565b5050565b505b3d6000803e3d6000fd5b50565b604080516060810182526000808252602082018190529181018290529061246b84612c89565b9050600061247884612c89565b82519091506001600160a01b03811661248f575080515b602080840151604080860151928501519085015191929165ffffffffffff80831690851610156124bd578193505b8065ffffffffffff168365ffffffffffff1611156124d9578092505b5050604080516060810182526001600160a01b03909416845265ffffffffffff92831660208501529116908201529250505092915050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091208054600160781b90046001600160701b031682526001015463ffffffff1690915290565b60c081015160e08201516000919080820361257c575092915050565b61258882488301612cfa565b949350505050565b61259d6020830183613472565b6001600160a01b0316815260208083013590820152608080830135604083015260a0830135606083015260c0808401359183019190915260e08084013591830191909152610100830135908201523660006125fc610120850185613756565b9092509050801561267c5760148110156126585760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610608565b61266660146000838561397e565b61266f916139a8565b60601c60a0840152610cc2565b600060a084015250505050565b60a081015160009081906001600160a01b03166126a75760016126aa565b60035b60ff16905060008360800151828560600151028560400151010190508360c00151810292505050919050565b60008060005a85518051919250906126fb89886126f660408c018c613756565b612d12565b60a082015161270943600052565b60006001600160a01b03821661273c5760006127248461114b565b905088811161273557808903612738565b60005b9150505b606084015160208a0151604051633a871cdd60e01b81526001600160a01b03861692633a871cdd929091612776918f918790600401613dff565b60206040518083038160008887f1935050505080156127b2575060408051601f3d908101601f191682019092526127af91810190613db0565b60015b61283c576127be613c1a565b806308c379a0036127ef57506127d2613c36565b806127dd57506127f1565b8b81604051602001611be09190613e24565b505b8a604051631101335b60e11b8152600401610608918152604060208201819052601690820152754141323320726576657274656420286f72204f4f472960501b606082015260800190565b95506001600160a01b0382166128e0576001600160a01b038316600090815260208190526040902080546001600160701b0316808a11156128c3578c604051631101335b60e11b81526004016106089181526040602082018190526017908201527610504c8c48191a591b89dd081c185e481c1c99599d5b99604a1b606082015260800190565b81546001600160701b031916908a90036001600160701b03161790555b5a85039650505050505094509492505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856129328361362b565b909155501495945050505050565b8251606081810151909160009184811161299c5760405162461bcd60e51b815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152606401610608565b60a08201516001600160a01b038116600090815260208190526040902080548784039291906001600160701b031689811015612a24578c604051631101335b60e11b8152600401610608918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8981038260000160006101000a8154816001600160701b0302191690836001600160701b03160217905550826001600160a01b031663f465c77e858e8e602001518e6040518563ffffffff1660e01b8152600401612a8493929190613dff565b60006040518083038160008887f193505050508015612ac557506040513d6000823e601f3d908101601f19168201604052612ac29190810190613e5b565b60015b612b4f57612ad1613c1a565b806308c379a003612b025750612ae5613c36565b80612af05750612b04565b8d81604051602001611be09190613ee6565b505b8c604051631101335b60e11b8152600401610608918152604060208201819052601690820152754141333320726576657274656420286f72204f4f472960501b606082015260800190565b909e909d509b505050505050505050505050565b60008082600003612b7957506000928392509050565b6000612b8484612c89565b9050806040015165ffffffffffff16421180612bab5750806020015165ffffffffffff1642105b905194909350915050565b6060813560208301356000612bd6612bd16040870187613756565b612fd3565b90506000612bea612bd16060880188613756565b9050608086013560a087013560c088013560e08901356101008a01356000612c19612bd16101208e018e613756565b604080516001600160a01b039c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612cc5575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6000818310612d095781612d0b565b825b9392505050565b8015610cc2578251516001600160a01b0381163b15612d7d5784604051631101335b60e11b8152600401610608918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b835160600151604051632b870d1b60e11b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163570e1a369190612dd590889088906004016139dd565b60206040518083038160008887f1158015612df4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e1991906139f1565b90506001600160a01b038116612e7b5785604051631101335b60e11b8152600401610608918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b031614612ee55785604051631101335b60e11b815260040161060891815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b600003612f485785604051631101335b60e11b815260040161060891815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000612f57601482868861397e565b612f60916139a8565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a00151604051612fc29291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b6000604051828085833790209392505050565b6040518060a0016040528061304b60405180610100016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b60006020828403121561308257600080fd5b813563ffffffff81168114612d0b57600080fd5b80356001600160c01b03811681146130ad57600080fd5b919050565b6000602082840312156130c457600080fd5b612d0b82613096565b6001600160a01b038116811461244257600080fd5b80356130ad816130cd565b6000806040838503121561310057600080fd5b823561310b816130cd565b915061311960208401613096565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b038211171561315757613157613122565b60405250565b61010081018181106001600160401b038211171561315757613157613122565b601f8201601f191681016001600160401b03811182821017156131a2576131a2613122565b6040525050565b60006001600160401b038211156131c2576131c2613122565b50601f01601f191660200190565b60008183036101808112156131e457600080fd5b6040516131f081613138565b8092506101008083121561320357600080fd5b60405192506132118361315d565b61321a856130e2565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015261325060a086016130e2565b60a084015260c085013560c084015260e085013560e084015282825280850135602083015250610120840135604082015261014084013560608201526101608401356080820152505092915050565b60008083601f8401126132b157600080fd5b5081356001600160401b038111156132c857600080fd5b6020830191508360208285010111156132e057600080fd5b9250929050565b6000806000806101c085870312156132fe57600080fd5b84356001600160401b038082111561331557600080fd5b818701915087601f83011261332957600080fd5b8135613334816131a9565b604051613341828261317d565b8281528a602084870101111561335657600080fd5b8260208601602083013760006020848301015280985050505061337c88602089016131d0565b94506101a087013591508082111561339357600080fd5b506133a08782880161329f565b95989497509550505050565b60008083601f8401126133be57600080fd5b5081356001600160401b038111156133d557600080fd5b6020830191508360208260051b85010111156132e057600080fd5b60008060006040848603121561340557600080fd5b83356001600160401b0381111561341b57600080fd5b613427868287016133ac565b909450925050602084013561343b816130cd565b809150509250925092565b6000806040838503121561345957600080fd5b8235613464816130cd565b946020939093013593505050565b60006020828403121561348457600080fd5b8135612d0b816130cd565b6000806000806000606086880312156134a757600080fd5b85356001600160401b03808211156134be57600080fd5b6134ca89838a0161329f565b9097509550602088013591506134df826130cd565b909350604087013590808211156134f557600080fd5b506135028882890161329f565b969995985093965092949392505050565b6000806020838503121561352657600080fd5b82356001600160401b0381111561353c57600080fd5b6135488582860161329f565b90969095509350505050565b6000610160828403121561356757600080fd5b50919050565b60006020828403121561357f57600080fd5b81356001600160401b0381111561359557600080fd5b61258884828501613554565b600080600080606085870312156135b757600080fd5b84356001600160401b03808211156135ce57600080fd5b6135da88838901613554565b9550602087013591506135ec826130cd565b9093506040860135908082111561339357600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610d0857610d08613602565b60006001820161363d5761363d613602565b5060010190565b60005b8381101561365f578181015183820152602001613647565b50506000910152565b60008151808452613680816020860160208601613644565b601f01601f19169290920160200192915050565b8281526040602082015260006125886040830184613668565b634e487b7160e01b600052603260045260246000fd5b6000823561015e198336030181126136da57600080fd5b9190910192915050565b81810381811115610d0857610d08613602565b60008235605e198336030181126136da57600080fd5b6000808335601e1984360301811261372457600080fd5b8301803591506001600160401b0382111561373e57600080fd5b6020019150600581901b36038213156132e057600080fd5b6000808335601e1984360301811261376d57600080fd5b8301803591506001600160401b0382111561378757600080fd5b6020019150368190038213156132e057600080fd5b6000808335601e198436030181126137b357600080fd5b83016020810192503590506001600160401b038111156137d257600080fd5b8036038213156132e057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101606138298461381c856130e2565b6001600160a01b03169052565b60208301356020850152613840604084018461379c565b82604087015261385383870182846137e1565b92505050613864606084018461379c565b85830360608701526138778382846137e1565b925050506080830135608085015260a083013560a085015260c083013560c085015260e083013560e08501526101008084013581860152506101206138be8185018561379c565b868403838801526138d08482846137e1565b93505050506101406138e48185018561379c565b868403838801526138f68482846137e1565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b8981101561396757868503605f190184528235368c900361015e19018112613945578283fd5b613951868d830161380a565b955050602093840193929092019160010161391f565b5050505082810360208401526138f68185876137e1565b6000808585111561398e57600080fd5b8386111561399b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156139d55780818660140360031b1b83161692505b505092915050565b6020815260006125886020830184866137e1565b600060208284031215613a0357600080fd5b8151612d0b816130cd565b65ffffffffffff818116838216019080821115613a2d57613a2d613602565b5092915050565b8183823760009101908152919050565b868152856020820152600065ffffffffffff8087166040840152808616606084015250831515608083015260c060a0830152613a8360c0830184613668565b98975050505050505050565b80518252602081015160208301526040810151151560408301526000606082015165ffffffffffff8082166060860152806080850151166080860152505060a082015160c060a085015261258860c0850182613668565b6000610140808352613afa81840189613a8f565b915050613b14602083018780518252602090810151910152565b845160608301526020948501516080830152835160a08301529284015160c082015281516001600160a01b031660e0820152908301518051610100830152909201516101209092019190915292915050565b60e081526000613b7960e0830187613a8f565b9050613b92602083018680518252602090810151910152565b8351606083015260208401516080830152825160a0830152602083015160c083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b600060038510613bf357634e487b7160e01b600052602160045260246000fd5b84825260606020830152613c0a6060830185613668565b9050826040830152949350505050565b600060033d1115613c335760046000803e5060005160e01c5b90565b600060443d1015613c445790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715613c7357505050505090565b8285019150815181811115613c8b5750505050505090565b843d8701016020828501011115613ca55750505050505090565b613cb46020828601018761317d565b509095945050505050565b75020a09a98103837b9ba27b8103932bb32b93a32b21d160551b815260008251613cf0816016850160208701613644565b9190910160160192915050565b60006101c0808352613d1281840187896137e1565b9050845160018060a01b03808251166020860152602082015160408601526040820151606086015260608201516080860152608082015160a08601528060a08301511660c08601525060c081015160e085015260e08101516101008501525060208501516101208401526040850151610140840152606085015161016084015260808501516101808401528281036101a08401526138f68185613668565b600060208284031215613dc257600080fd5b5051919050565b606081526000613ddd6060830187896137e1565b6001600160a01b03861660208401528281036040840152613a838185876137e1565b606081526000613e12606083018661380a565b60208301949094525060400152919050565b6e020a09919903932bb32b93a32b21d1608d1b815260008251613e4e81600f850160208701613644565b91909101600f0192915050565b60008060408385031215613e6e57600080fd5b82516001600160401b03811115613e8457600080fd5b8301601f81018513613e9557600080fd5b8051613ea0816131a9565b604051613ead828261317d565b828152876020848601011115613ec257600080fd5b613ed3836020830160208701613644565b6020969096015195979596505050505050565b6e020a09999903932bb32b93a32b21d1608d1b815260008251613e4e81600f85016020870161364456fea2646970667358221220120e6d489b9833800efa8b73b01f2feea548f1bd9b45125892ac4ea0c489bc4364736f6c63430008130033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100ec565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b60008061006f601482858761015e565b61007891610188565b60601c9050600061008c846014818861015e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100e357600093505b50505092915050565b600080602083850312156100ff57600080fd5b823567ffffffffffffffff8082111561011757600080fd5b818501915085601f83011261012b57600080fd5b81358181111561013a57600080fd5b86602082850101111561014c57600080fd5b60209290920196919550909350505050565b6000808585111561016e57600080fd5b8386111561017b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156101b55780818660140360031b1b83161692505b50509291505056fea2646970667358221220a96a25cc46975a28f6e2a92abae59382fecc25c3aab3acfee3191a178e48c06464736f6c63430008130033","deployedBytecode":"0x6080604052600436106101235760003560e01c80638f41ec5a116100a0578063bb9fe6bf11610064578063bb9fe6bf1461041a578063c23a5cea1461042f578063d6383f941461044f578063ee2194231461046f578063fc7e286d1461048f57600080fd5b80638f41ec5a14610392578063957122ab146103a75780639b249f69146103c7578063a6193531146103e7578063b760faf91461040757600080fd5b8063205c2878116100e7578063205c2878146101f657806335567e1a146102165780634b1d7cf5146102365780635287ce121461025657806370a082311461037257600080fd5b80630396cb60146101385780630bd28e3b1461014b5780631b2e01b81461016b5780631d732756146101b65780631fad948c146101d657600080fd5b366101335761013133610543565b005b600080fd5b610131610146366004613070565b6105aa565b34801561015757600080fd5b506101316101663660046130b2565b610830565b34801561017757600080fd5b506101a36101863660046130ed565b600160209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156101c257600080fd5b506101a36101d13660046132e7565b610867565b3480156101e257600080fd5b506101316101f13660046133f0565b6109d4565b34801561020257600080fd5b50610131610211366004613446565b610b50565b34801561022257600080fd5b506101a36102313660046130ed565b610cc8565b34801561024257600080fd5b506101316102513660046133f0565b610d0e565b34801561026257600080fd5b5061031a610271366004613472565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a08101845281546001600160701b038082168352600160701b820460ff16151594830194909452600160781b90049092169282019290925260019091015463ffffffff81166060830152600160201b900465ffffffffffff16608082015290565b6040805182516001600160701b03908116825260208085015115159083015283830151169181019190915260608083015163ffffffff169082015260809182015165ffffffffffff169181019190915260a0016101ad565b34801561037e57600080fd5b506101a361038d366004613472565b61114b565b34801561039e57600080fd5b506101a3600181565b3480156103b357600080fd5b506101316103c236600461348f565b61116f565b3480156103d357600080fd5b506101316103e2366004613513565b611268565b3480156103f357600080fd5b506101a361040236600461356d565b611323565b610131610415366004613472565b610543565b34801561042657600080fd5b50610131611365565b34801561043b57600080fd5b5061013161044a366004613472565b61148d565b34801561045b57600080fd5b5061013161046a3660046135a1565b6116be565b34801561047b57600080fd5b5061013161048a36600461356d565b6117b9565b34801561049b57600080fd5b506104fd6104aa366004613472565b600060208190529081526040902080546001909101546001600160701b0380831692600160701b810460ff1692600160781b9091049091169063ffffffff811690600160201b900465ffffffffffff1685565b604080516001600160701b0396871681529415156020860152929094169183019190915263ffffffff16606082015265ffffffffffff909116608082015260a0016101ad565b61054d8134611995565b6001600160a01b03811660008181526020818152604091829020805492516001600160701b03909316835292917f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c491015b60405180910390a25050565b33600090815260208190526040902063ffffffff82166106115760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff908116908316101561066f5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152606401610608565b805460009061068f903490600160781b90046001600160701b0316613618565b9050600081116106d65760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b6044820152606401610608565b6001600160701b0381111561071e5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b6044820152606401610608565b6040805160a08101825283546001600160701b0390811682526001602080840182815286841685870190815263ffffffff808b16606088019081526000608089018181523380835296829052908a902098518954955194518916600160781b02600160781b600160e81b0319951515600160701b026001600160781b03199097169190991617949094179290921695909517865551949092018054925165ffffffffffff16600160201b0269ffffffffffffffffffff19909316949093169390931717905590517fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0190610823908490879091825263ffffffff16602082015260400190565b60405180910390a2505050565b3360009081526001602090815260408083206001600160c01b0385168452909152812080549161085f8361362b565b919050555050565b6000805a90503330146108b65760405162461bcd60e51b81526020600482015260176024820152764141393220696e7465726e616c2063616c6c206f6e6c7960481b6044820152606401610608565b8451604081015160608201518101611388015a10156108e05763deaddead60e01b60005260206000fd5b8751600090156109745760006108fd846000015160008c86611a31565b905080610972576000610911610800611a49565b80519091501561096c5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610963929190613694565b60405180910390a35b60019250505b505b600088608001515a86030190506109c66000838b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250889250611a75915050565b9a9950505050505050505050565b6109dc611d6c565b816000816001600160401b038111156109f7576109f7613122565b604051908082528060200260200182016040528015610a3057816020015b610a1d612fe6565b815260200190600190039081610a155790505b50905060005b82811015610aa9576000828281518110610a5257610a526136ad565b60200260200101519050600080610a8d848a8a87818110610a7557610a756136ad565b9050602002810190610a8791906136c3565b85611dc3565b91509150610a9e8483836000611fa1565b505050600101610a36565b506040516000907fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972908290a160005b83811015610b3357610b2781888884818110610af657610af66136ad565b9050602002810190610b0891906136c3565b858481518110610b1a57610b1a6136ad565b6020026020010151612137565b90910190600101610ad8565b50610b3e848261225e565b505050610b4b6001600255565b505050565b33600090815260208190526040902080546001600160701b0316821115610bb55760405162461bcd60e51b8152602060048201526019602482015278576974686472617720616d6f756e7420746f6f206c6172676560381b6044820152606401610608565b8054610bcb9083906001600160701b03166136e4565b81546001600160701b0319166001600160701b0391909116178155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610c77576040519150601f19603f3d011682016040523d82523d6000602084013e610c7c565b606091505b5050905080610cc25760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b6044820152606401610608565b50505050565b6001600160a01b03821660009081526001602090815260408083206001600160c01b038516845290915290819020549082901b67ffffffffffffffff1916175b92915050565b610d16611d6c565b816000805b82811015610e845736868683818110610d3657610d366136ad565b9050602002810190610d4891906136f7565b9050366000610d57838061370d565b90925090506000610d6e6040850160208601613472565b90506000196001600160a01b03821601610dc45760405162461bcd60e51b815260206004820152601760248201527620a09c9b1034b73b30b634b21030b3b3b932b3b0ba37b960491b6044820152606401610608565b6001600160a01b03811615610e61576001600160a01b03811663e3563a4f8484610df16040890189613756565b6040518563ffffffff1660e01b8152600401610e109493929190613901565b60006040518083038186803b158015610e2857600080fd5b505afa925050508015610e39575060015b610e615760405163086a9f7560e41b81526001600160a01b0382166004820152602401610608565b610e6b8287613618565b9550505050508080610e7c9061362b565b915050610d1b565b506000816001600160401b03811115610e9f57610e9f613122565b604051908082528060200260200182016040528015610ed857816020015b610ec5612fe6565b815260200190600190039081610ebd5790505b506040519091507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f97290600090a16000805b84811015610fed5736888883818110610f2457610f246136ad565b9050602002810190610f3691906136f7565b9050366000610f45838061370d565b90925090506000610f5c6040850160208601613472565b90508160005b81811015610fd4576000898981518110610f7e57610f7e6136ad565b60200260200101519050600080610fa18b898987818110610a7557610a756136ad565b91509150610fb184838389611fa1565b8a610fbb8161362b565b9b50505050508080610fcc9061362b565b915050610f62565b5050505050508080610fe59061362b565b915050610f09565b50600080915060005b858110156111065736898983818110611011576110116136ad565b905060200281019061102391906136f7565b90506110356040820160208301613472565b6001600160a01b03167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d60405160405180910390a2366000611077838061370d565b90925090508060005b818110156110ee576110c28885858481811061109e5761109e6136ad565b90506020028101906110b091906136c3565b8b8b81518110610b1a57610b1a6136ad565b6110cc9088613618565b9650876110d88161362b565b98505080806110e69061362b565b915050611080565b505050505080806110fe9061362b565b915050610ff6565b506040516000907f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d908290a261113c868261225e565b5050505050610b4b6001600255565b6001600160a01b03166000908152602081905260409020546001600160701b031690565b8315801561118557506001600160a01b0383163b155b156111ce5760405162461bcd60e51b815260206004820152601960248201527810504c8c081858d8dbdd5b9d081b9bdd0819195c1b1bde5959603a1b6044820152606401610608565b601481106112465760006111e5601482848661397e565b6111ee916139a8565b60601c9050803b6000036112445760405162461bcd60e51b815260206004820152601b60248201527f41413330207061796d6173746572206e6f74206465706c6f79656400000000006044820152606401610608565b505b60405162461bcd60e51b81526020600482015260006024820152604401610608565b604051632b870d1b60e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063570e1a36906112b990869086906004016139dd565b6020604051808303816000875af11580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fc91906139f1565b604051633653dc0360e11b81526001600160a01b0382166004820152909150602401610608565b600061132e82612352565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b3360009081526020819052604081206001810154909163ffffffff90911690036113be5760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b6044820152606401610608565b8054600160701b900460ff1661140a5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b6044820152606401610608565b60018101546000906114229063ffffffff1642613a0e565b60018301805469ffffffffffff000000001916600160201b65ffffffffffff841690810291909117909155835460ff60701b1916845560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a9060200161059e565b3360009081526020819052604090208054600160781b90046001600160701b0316806114f25760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b6044820152606401610608565b6001820154600160201b900465ffffffffffff166115525760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152606401610608565b600182015442600160201b90910465ffffffffffff1611156115b65760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152606401610608565b60018201805469ffffffffffffffffffff191690558154600160781b600160e81b0319168255604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461166d576040519150601f19603f3d011682016040523d82523d6000602084013e611672565b606091505b5050905080610cc25760405162461bcd60e51b81526020600482015260186024820152776661696c656420746f207769746864726177207374616b6560401b6044820152606401610608565b6116c6612fe6565b6116cf8561236b565b6000806116de60008885611dc3565b9150915060006116ee8383612445565b90506116f943600052565b600061170760008a87612137565b905061171243600052565b600060606001600160a01b038a161561178857896001600160a01b0316898960405161173f929190613a34565b6000604051808303816000865af19150503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5090925090505b866080015183856020015186604001518585604051630116f59360e71b815260040161060896959493929190613a44565b6117c1612fe6565b6117ca8261236b565b6000806117d960008585611dc3565b9150915060006117f0846000015160a00151612511565b84515190915060009061180290612511565b9050611821604051806040016040528060008152602001600081525090565b36600061183160408a018a613756565b909250905060006014821015611848576000611863565b61185660146000848661397e565b61185f916139a8565b60601c5b905061186e81612511565b9350505050600061187f8686612445565b9050600081600001519050600060016001600160a01b0316826001600160a01b031614905060006040518060c001604052808b6080015181526020018b6040015181526020018315158152602001856020015165ffffffffffff168152602001856040015165ffffffffffff1681526020016118fc8c6060015190565b905290506001600160a01b0383161580159061192257506001600160a01b038316600114155b156119745760006040518060400160405280856001600160a01b0316815260200161194c86612511565b81525090508187878a84604051633ebb2d3960e21b8152600401610608959493929190613ae6565b8086868960405163e0cff05f60e01b81526004016106089493929190613b66565b6001600160a01b038216600090815260208190526040812080549091906119c69084906001600160701b0316613618565b90506001600160701b03811115611a125760405162461bcd60e51b815260206004820152601060248201526f6465706f736974206f766572666c6f7760801b6044820152606401610608565b81546001600160701b0319166001600160701b03919091161790555050565b6000806000845160208601878987f195945050505050565b60603d82811115611a575750815b604051602082018101604052818152816000602083013e9392505050565b6000805a855190915060009081611a8b82612560565b60a08301519091506001600160a01b038116611aaa5782519350611c51565b809350600088511115611c5157868202955060028a6002811115611ad057611ad0613bbd565b14611b4257606083015160405163a9a2340960e01b81526001600160a01b0383169163a9a2340991611b0a908e908d908c90600401613bd3565b600060405180830381600088803b158015611b2457600080fd5b5087f1158015611b38573d6000803e3d6000fd5b5050505050611c51565b606083015160405163a9a2340960e01b81526001600160a01b0383169163a9a2340991611b77908e908d908c90600401613bd3565b600060405180830381600088803b158015611b9157600080fd5b5087f193505050508015611ba3575060015b611c5157611baf613c1a565b806308c379a003611c085750611bc3613c36565b80611bce5750611c0a565b8b81604051602001611be09190613cbf565b60408051601f1981840301815290829052631101335b60e11b82526106089291600401613694565b505b8a604051631101335b60e11b81526004016106089181526040602082018190526012908201527110504d4c081c1bdcdd13dc081c995d995c9d60721b606082015260800190565b5a85038701965081870295508589604001511015611cba578a604051631101335b60e11b815260040161060891815260406020808301829052908201527f414135312070726566756e642062656c6f772061637475616c476173436f7374606082015260800190565b6040890151869003611ccc8582611995565b6000808c6002811115611ce157611ce1613bbd565b1490508460a001516001600160a01b031685600001516001600160a01b03168c602001517f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f8860200151858d8f604051611d54949392919093845291151560208401526040830152606082015260800190565b60405180910390a45050505050505095945050505050565b6002805403611dbd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610608565b60028055565b60008060005a8451909150611dd88682612590565b611de186611323565b6020860152604081015160608201516080830151171760e087013517610100870135176001600160781b03811115611e565760405162461bcd60e51b815260206004820152601860248201527741413934206761732076616c756573206f766572666c6f7760401b6044820152606401610608565b600080611e6284612689565b9050611e708a8a8a846126d6565b85516020870151919950919350611e8791906128f3565b611edd5789604051631101335b60e11b8152600401610608918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b611ee643600052565b60a08401516060906001600160a01b031615611f0e57611f098b8b8b8587612940565b975090505b60005a87039050808b60a001351015611f73578b604051631101335b60e11b8152600401610608918152604060208201819052601e908201527f41413430206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b60408a018390528160608b015260c08b01355a8803018a608001818152505050505050505050935093915050565b600080611fad85612b63565b91509150816001600160a01b0316836001600160a01b0316146120135785604051631101335b60e11b81526004016106089181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b80156120655785604051631101335b60e11b815260040161060891815260406020820181905260179082015276414132322065787069726564206f72206e6f742064756560481b606082015260800190565b600061207085612b63565b925090506001600160a01b038116156120cc5786604051631101335b60e11b81526004016106089181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b811561212e5786604051631101335b60e11b81526004016106089181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b6000805a9050600061214a846060015190565b905030631d73275661215f6060880188613756565b87856040518563ffffffff1660e01b81526004016121809493929190613cfd565b6020604051808303816000875af19250505080156121bb575060408051601f3d908101601f191682019092526121b891810190613db0565b60015b61225257600060206000803e50600051632152215360e01b810161221d5786604051631101335b60e11b8152600401610608918152604060208201819052600f908201526e41413935206f7574206f662067617360881b606082015260800190565b600085608001515a61222f90866136e4565b6122399190613618565b9050612249886002888685611a75565b94505050612255565b92505b50509392505050565b6001600160a01b0382166122af5760405162461bcd60e51b81526020600482015260186024820152774141393020696e76616c69642062656e656669636961727960401b6044820152606401610608565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146122fc576040519150601f19603f3d011682016040523d82523d6000602084013e612301565b606091505b5050905080610b4b5760405162461bcd60e51b815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152606401610608565b600061235d82612bb6565b805190602001209050919050565b3063957122ab61237e6040840184613756565b61238b6020860186613472565b612399610120870187613756565b6040518663ffffffff1660e01b81526004016123b9959493929190613dc9565b60006040518083038186803b1580156123d157600080fd5b505afa9250505080156123e2575060015b612442576123ee613c1a565b806308c379a0036124365750612402613c36565b8061240d5750612438565b80511561243257600081604051631101335b60e11b8152600401610608929190613694565b5050565b505b3d6000803e3d6000fd5b50565b604080516060810182526000808252602082018190529181018290529061246b84612c89565b9050600061247884612c89565b82519091506001600160a01b03811661248f575080515b602080840151604080860151928501519085015191929165ffffffffffff80831690851610156124bd578193505b8065ffffffffffff168365ffffffffffff1611156124d9578092505b5050604080516060810182526001600160a01b03909416845265ffffffffffff92831660208501529116908201529250505092915050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091208054600160781b90046001600160701b031682526001015463ffffffff1690915290565b60c081015160e08201516000919080820361257c575092915050565b61258882488301612cfa565b949350505050565b61259d6020830183613472565b6001600160a01b0316815260208083013590820152608080830135604083015260a0830135606083015260c0808401359183019190915260e08084013591830191909152610100830135908201523660006125fc610120850185613756565b9092509050801561267c5760148110156126585760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152606401610608565b61266660146000838561397e565b61266f916139a8565b60601c60a0840152610cc2565b600060a084015250505050565b60a081015160009081906001600160a01b03166126a75760016126aa565b60035b60ff16905060008360800151828560600151028560400151010190508360c00151810292505050919050565b60008060005a85518051919250906126fb89886126f660408c018c613756565b612d12565b60a082015161270943600052565b60006001600160a01b03821661273c5760006127248461114b565b905088811161273557808903612738565b60005b9150505b606084015160208a0151604051633a871cdd60e01b81526001600160a01b03861692633a871cdd929091612776918f918790600401613dff565b60206040518083038160008887f1935050505080156127b2575060408051601f3d908101601f191682019092526127af91810190613db0565b60015b61283c576127be613c1a565b806308c379a0036127ef57506127d2613c36565b806127dd57506127f1565b8b81604051602001611be09190613e24565b505b8a604051631101335b60e11b8152600401610608918152604060208201819052601690820152754141323320726576657274656420286f72204f4f472960501b606082015260800190565b95506001600160a01b0382166128e0576001600160a01b038316600090815260208190526040902080546001600160701b0316808a11156128c3578c604051631101335b60e11b81526004016106089181526040602082018190526017908201527610504c8c48191a591b89dd081c185e481c1c99599d5b99604a1b606082015260800190565b81546001600160701b031916908a90036001600160701b03161790555b5a85039650505050505094509492505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856129328361362b565b909155501495945050505050565b8251606081810151909160009184811161299c5760405162461bcd60e51b815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152606401610608565b60a08201516001600160a01b038116600090815260208190526040902080548784039291906001600160701b031689811015612a24578c604051631101335b60e11b8152600401610608918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8981038260000160006101000a8154816001600160701b0302191690836001600160701b03160217905550826001600160a01b031663f465c77e858e8e602001518e6040518563ffffffff1660e01b8152600401612a8493929190613dff565b60006040518083038160008887f193505050508015612ac557506040513d6000823e601f3d908101601f19168201604052612ac29190810190613e5b565b60015b612b4f57612ad1613c1a565b806308c379a003612b025750612ae5613c36565b80612af05750612b04565b8d81604051602001611be09190613ee6565b505b8c604051631101335b60e11b8152600401610608918152604060208201819052601690820152754141333320726576657274656420286f72204f4f472960501b606082015260800190565b909e909d509b505050505050505050505050565b60008082600003612b7957506000928392509050565b6000612b8484612c89565b9050806040015165ffffffffffff16421180612bab5750806020015165ffffffffffff1642105b905194909350915050565b6060813560208301356000612bd6612bd16040870187613756565b612fd3565b90506000612bea612bd16060880188613756565b9050608086013560a087013560c088013560e08901356101008a01356000612c19612bd16101208e018e613756565b604080516001600160a01b039c909c1660208d01528b81019a909a5260608b019890985250608089019590955260a088019390935260c087019190915260e08601526101008501526101208401526101408084019190915281518084039091018152610160909201905292915050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612cc5575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b6000818310612d095781612d0b565b825b9392505050565b8015610cc2578251516001600160a01b0381163b15612d7d5784604051631101335b60e11b8152600401610608918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b835160600151604051632b870d1b60e11b81526000916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163570e1a369190612dd590889088906004016139dd565b60206040518083038160008887f1158015612df4573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e1991906139f1565b90506001600160a01b038116612e7b5785604051631101335b60e11b8152600401610608918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b031614612ee55785604051631101335b60e11b815260040161060891815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b600003612f485785604051631101335b60e11b815260040161060891815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b6000612f57601482868861397e565b612f60916139a8565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160a00151604051612fc29291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b6000604051828085833790209392505050565b6040518060a0016040528061304b60405180610100016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b60006020828403121561308257600080fd5b813563ffffffff81168114612d0b57600080fd5b80356001600160c01b03811681146130ad57600080fd5b919050565b6000602082840312156130c457600080fd5b612d0b82613096565b6001600160a01b038116811461244257600080fd5b80356130ad816130cd565b6000806040838503121561310057600080fd5b823561310b816130cd565b915061311960208401613096565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b60a081018181106001600160401b038211171561315757613157613122565b60405250565b61010081018181106001600160401b038211171561315757613157613122565b601f8201601f191681016001600160401b03811182821017156131a2576131a2613122565b6040525050565b60006001600160401b038211156131c2576131c2613122565b50601f01601f191660200190565b60008183036101808112156131e457600080fd5b6040516131f081613138565b8092506101008083121561320357600080fd5b60405192506132118361315d565b61321a856130e2565b83526020850135602084015260408501356040840152606085013560608401526080850135608084015261325060a086016130e2565b60a084015260c085013560c084015260e085013560e084015282825280850135602083015250610120840135604082015261014084013560608201526101608401356080820152505092915050565b60008083601f8401126132b157600080fd5b5081356001600160401b038111156132c857600080fd5b6020830191508360208285010111156132e057600080fd5b9250929050565b6000806000806101c085870312156132fe57600080fd5b84356001600160401b038082111561331557600080fd5b818701915087601f83011261332957600080fd5b8135613334816131a9565b604051613341828261317d565b8281528a602084870101111561335657600080fd5b8260208601602083013760006020848301015280985050505061337c88602089016131d0565b94506101a087013591508082111561339357600080fd5b506133a08782880161329f565b95989497509550505050565b60008083601f8401126133be57600080fd5b5081356001600160401b038111156133d557600080fd5b6020830191508360208260051b85010111156132e057600080fd5b60008060006040848603121561340557600080fd5b83356001600160401b0381111561341b57600080fd5b613427868287016133ac565b909450925050602084013561343b816130cd565b809150509250925092565b6000806040838503121561345957600080fd5b8235613464816130cd565b946020939093013593505050565b60006020828403121561348457600080fd5b8135612d0b816130cd565b6000806000806000606086880312156134a757600080fd5b85356001600160401b03808211156134be57600080fd5b6134ca89838a0161329f565b9097509550602088013591506134df826130cd565b909350604087013590808211156134f557600080fd5b506135028882890161329f565b969995985093965092949392505050565b6000806020838503121561352657600080fd5b82356001600160401b0381111561353c57600080fd5b6135488582860161329f565b90969095509350505050565b6000610160828403121561356757600080fd5b50919050565b60006020828403121561357f57600080fd5b81356001600160401b0381111561359557600080fd5b61258884828501613554565b600080600080606085870312156135b757600080fd5b84356001600160401b03808211156135ce57600080fd5b6135da88838901613554565b9550602087013591506135ec826130cd565b9093506040860135908082111561339357600080fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610d0857610d08613602565b60006001820161363d5761363d613602565b5060010190565b60005b8381101561365f578181015183820152602001613647565b50506000910152565b60008151808452613680816020860160208601613644565b601f01601f19169290920160200192915050565b8281526040602082015260006125886040830184613668565b634e487b7160e01b600052603260045260246000fd5b6000823561015e198336030181126136da57600080fd5b9190910192915050565b81810381811115610d0857610d08613602565b60008235605e198336030181126136da57600080fd5b6000808335601e1984360301811261372457600080fd5b8301803591506001600160401b0382111561373e57600080fd5b6020019150600581901b36038213156132e057600080fd5b6000808335601e1984360301811261376d57600080fd5b8301803591506001600160401b0382111561378757600080fd5b6020019150368190038213156132e057600080fd5b6000808335601e198436030181126137b357600080fd5b83016020810192503590506001600160401b038111156137d257600080fd5b8036038213156132e057600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101606138298461381c856130e2565b6001600160a01b03169052565b60208301356020850152613840604084018461379c565b82604087015261385383870182846137e1565b92505050613864606084018461379c565b85830360608701526138778382846137e1565b925050506080830135608085015260a083013560a085015260c083013560c085015260e083013560e08501526101008084013581860152506101206138be8185018561379c565b868403838801526138d08482846137e1565b93505050506101406138e48185018561379c565b868403838801526138f68482846137e1565b979650505050505050565b6040808252810184905260006060600586901b830181019083018783805b8981101561396757868503605f190184528235368c900361015e19018112613945578283fd5b613951868d830161380a565b955050602093840193929092019160010161391f565b5050505082810360208401526138f68185876137e1565b6000808585111561398e57600080fd5b8386111561399b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156139d55780818660140360031b1b83161692505b505092915050565b6020815260006125886020830184866137e1565b600060208284031215613a0357600080fd5b8151612d0b816130cd565b65ffffffffffff818116838216019080821115613a2d57613a2d613602565b5092915050565b8183823760009101908152919050565b868152856020820152600065ffffffffffff8087166040840152808616606084015250831515608083015260c060a0830152613a8360c0830184613668565b98975050505050505050565b80518252602081015160208301526040810151151560408301526000606082015165ffffffffffff8082166060860152806080850151166080860152505060a082015160c060a085015261258860c0850182613668565b6000610140808352613afa81840189613a8f565b915050613b14602083018780518252602090810151910152565b845160608301526020948501516080830152835160a08301529284015160c082015281516001600160a01b031660e0820152908301518051610100830152909201516101209092019190915292915050565b60e081526000613b7960e0830187613a8f565b9050613b92602083018680518252602090810151910152565b8351606083015260208401516080830152825160a0830152602083015160c083015295945050505050565b634e487b7160e01b600052602160045260246000fd5b600060038510613bf357634e487b7160e01b600052602160045260246000fd5b84825260606020830152613c0a6060830185613668565b9050826040830152949350505050565b600060033d1115613c335760046000803e5060005160e01c5b90565b600060443d1015613c445790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715613c7357505050505090565b8285019150815181811115613c8b5750505050505090565b843d8701016020828501011115613ca55750505050505090565b613cb46020828601018761317d565b509095945050505050565b75020a09a98103837b9ba27b8103932bb32b93a32b21d160551b815260008251613cf0816016850160208701613644565b9190910160160192915050565b60006101c0808352613d1281840187896137e1565b9050845160018060a01b03808251166020860152602082015160408601526040820151606086015260608201516080860152608082015160a08601528060a08301511660c08601525060c081015160e085015260e08101516101008501525060208501516101208401526040850151610140840152606085015161016084015260808501516101808401528281036101a08401526138f68185613668565b600060208284031215613dc257600080fd5b5051919050565b606081526000613ddd6060830187896137e1565b6001600160a01b03861660208401528281036040840152613a838185876137e1565b606081526000613e12606083018661380a565b60208301949094525060400152919050565b6e020a09919903932bb32b93a32b21d1608d1b815260008251613e4e81600f850160208701613644565b91909101600f0192915050565b60008060408385031215613e6e57600080fd5b82516001600160401b03811115613e8457600080fd5b8301601f81018513613e9557600080fd5b8051613ea0816131a9565b604051613ead828261317d565b828152876020848601011115613ec257600080fd5b613ed3836020830160208701613644565b6020969096015195979596505050505050565b6e020a09999903932bb32b93a32b21d1608d1b815260008251613e4e81600f85016020870161364456fea2646970667358221220120e6d489b9833800efa8b73b01f2feea548f1bd9b45125892ac4ea0c489bc4364736f6c63430008130033","linkReferences":{},"deployedLinkReferences":{}}` diff --git a/consensus/polybft/contractsapi/init.go b/consensus/polybft/contractsapi/init.go index a4e0ed100d..c765792518 100644 --- a/consensus/polybft/contractsapi/init.go +++ b/consensus/polybft/contractsapi/init.go @@ -64,6 +64,9 @@ var ( ChildGovernor *contracts.Artifact ChildTimelock *contracts.Artifact + // Account Abstraction + EntryPoint *contracts.Artifact + // test smart contracts //go:embed test-contracts/* testContracts embed.FS @@ -342,6 +345,11 @@ func init() { log.Fatal(err) } + EntryPoint, err = contracts.DecodeArtifact([]byte(EntryPointArtifact)) + if err != nil { + log.Fatal(err) + } + contractArtifacts = map[string]*contracts.Artifact{ "CheckpointManager": CheckpointManager, "ExitHelper": ExitHelper, From 51154aac6afd3dfa798675f221c4c6c2338287ab Mon Sep 17 00:00:00 2001 From: Goran Rojovic Date: Mon, 25 Dec 2023 10:37:11 +0100 Subject: [PATCH 2/5] Deploy EntryPoint contract --- command/genesis/polybft_params.go | 4 ++++ contracts/system_addresses.go | 8 +++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/command/genesis/polybft_params.go b/command/genesis/polybft_params.go index 29f4a38965..7d15c71cb9 100644 --- a/command/genesis/polybft_params.go +++ b/command/genesis/polybft_params.go @@ -432,6 +432,10 @@ func (p *genesisParams) deployContracts(rewardTokenByteCode []byte, artifact: contractsapi.ChildTimelock, address: contracts.ChildTimelockContractV1, }, + { + artifact: contractsapi.EntryPoint, + address: contracts.EntryPointContractV1, + }, } if !params.nativeTokenConfig.IsMintable { diff --git a/contracts/system_addresses.go b/contracts/system_addresses.go index 1e8bf3daf6..72522f57a2 100644 --- a/contracts/system_addresses.go +++ b/contracts/system_addresses.go @@ -87,7 +87,7 @@ var ( NetworkParamsContractV1 = types.StringToAddress("0x100e1") // ForkParamsContract is an address of ForkParams contract which holds data of enabled forks ForkParamsContract = types.StringToAddress("0x100f") - // ForkParamsContract is the proxy address of ForkParams contract which holds data of enabled forks + // ForkParamsContract is an address of ForkParams contract which holds data of enabled forks ForkParamsContractV1 = types.StringToAddress("0x100f1") // SystemCaller is address of account, used for system calls to smart contracts @@ -111,6 +111,11 @@ var ( AllowListBridgeAddr = types.StringToAddress("0x0200000000000000000000000000000000000004") // BlockListBridgeAddr is the address of the bridge block list BlockListBridgeAddr = types.StringToAddress("0x0300000000000000000000000000000000000004") + + // EntryPointContract is the proxy address of EntryPoint contract which is a center point of account abstraction + EntryPointContract = types.StringToAddress("0x2001") + // EntryPointContract is an address of EntryPoint contract which is a center point of account abstraction + EntryPointContractV1 = types.StringToAddress("0x20011") ) // GetProxyImplementationMapping retrieves the addresses of proxy contracts that should be deployed unconditionally @@ -133,5 +138,6 @@ func GetProxyImplementationMapping() map[types.Address]types.Address { ForkParamsContract: ForkParamsContractV1, ChildTimelockContract: ChildTimelockContractV1, ChildGovernorContract: ChildGovernorContractV1, + EntryPointContract: EntryPointContractV1, } } From a6f5a751be32436d8eff9fc74f11253dc16c133f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Negovanovi=C4=87?= Date: Thu, 28 Dec 2023 13:57:35 +0100 Subject: [PATCH 3/5] Build fix --- blade-contracts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blade-contracts b/blade-contracts index 0df8f5284a..8666c4e077 160000 --- a/blade-contracts +++ b/blade-contracts @@ -1 +1 @@ -Subproject commit 0df8f5284adfcd02b3bfff46a74168eb5db405f4 +Subproject commit 8666c4e077f78b18a00a273c141ebf8bbec83fa7 From 89f4654e9e69d4b21c0ae45c9efb5dc27f2b4ea3 Mon Sep 17 00:00:00 2001 From: Goran Rojovic Date: Fri, 29 Dec 2023 09:55:57 +0100 Subject: [PATCH 4/5] EntryPoint address --- contracts/system_addresses.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contracts/system_addresses.go b/contracts/system_addresses.go index 72522f57a2..c0dbd4b75b 100644 --- a/contracts/system_addresses.go +++ b/contracts/system_addresses.go @@ -113,7 +113,8 @@ var ( BlockListBridgeAddr = types.StringToAddress("0x0300000000000000000000000000000000000004") // EntryPointContract is the proxy address of EntryPoint contract which is a center point of account abstraction - EntryPointContract = types.StringToAddress("0x2001") + // EntryPoint must be deployed on this address, as it is the same on all networks + EntryPointContract = types.StringToAddress("0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789") // EntryPointContract is an address of EntryPoint contract which is a center point of account abstraction EntryPointContractV1 = types.StringToAddress("0x20011") ) From f98fcc0407842fe074c9af5233886352899c1058 Mon Sep 17 00:00:00 2001 From: Goran Rojovic Date: Mon, 19 Feb 2024 18:41:11 +0100 Subject: [PATCH 5/5] Rebase fix --- consensus/polybft/contractsapi/init.go | 1 + 1 file changed, 1 insertion(+) diff --git a/consensus/polybft/contractsapi/init.go b/consensus/polybft/contractsapi/init.go index c765792518..473a1d6b3f 100644 --- a/consensus/polybft/contractsapi/init.go +++ b/consensus/polybft/contractsapi/init.go @@ -403,6 +403,7 @@ func init() { "TestRewardToken": TestRewardToken, "ZexCoinERC20": ZexCoinERC20, "ZexNFT": ZexNFT, + "EntryPoint": EntryPoint, } }