Loading
[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "implementation", "type": "address" } ], "name": "ERC1967InvalidImplementation", "type": "error" }, { "inputs": [], "name": "ERC1967NonPayable", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "increasedSupply", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20ExceededCap", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "cap", "type": "uint256" } ], "name": "ERC20InvalidCap", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [], "name": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxFee", "type": "uint256" }, { "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "GT3MaxFee", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "GT3OnlyMinter", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "GT3OnlyOwnerOrPairFactory", "type": "error" }, { "inputs": [], "name": "GT3VoterAlreadySetted", "type": "error" }, { "inputs": [], "name": "GT3ZeroAddress", "type": "error" }, { "inputs": [], "name": "GT3ZeroFeeRecipient", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "UUPSUnauthorizedCallContext", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "slot", "type": "bytes32" } ], "name": "UUPSUnsupportedProxiableUUID", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "feeRecipient", "type": "address" } ], "name": "UpdateFeeRecipient", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "feeBuy", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "feeSell", "type": "uint256" } ], "name": "UpdateFees", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" } ], "name": "UpdateMinter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pair", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "UpdatePair", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "router", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "UpdateRouter", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "implementation", "type": "address" } ], "name": "Upgraded", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_BPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_FEE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "UPGRADE_INTERFACE_VERSION", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "burned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [], "name": "feeBuy", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeRecipient", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeSell", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "implementation", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner_", "type": "address" }, { "internalType": "address", "name": "feeRecipient_", "type": "address" }, { "internalType": "address", "name": "router_", "type": "address" }, { "internalType": "address", "name": "pairFactory_", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isPair", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "isRouter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account_", "type": "address" }, { "internalType": "uint256", "name": "amount_", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minter", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pairFactory", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "proxiableUUID", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "setMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newFeeRecipient_", "type": "address" } ], "name": "updateFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newFeeBuy_", "type": "uint256" }, { "internalType": "uint256", "name": "newFeeSell_", "type": "uint256" } ], "name": "updateFees", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter_", "type": "address" } ], "name": "updateMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pair_", "type": "address" }, { "internalType": "bool", "name": "status_", "type": "bool" } ], "name": "updatePair", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "router_", "type": "address" }, { "internalType": "bool", "name": "status_", "type": "bool" } ], "name": "updateRouter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newImplementation", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "upgradeToAndCall", "outputs": [], "stateMutability": "payable", "type": "function" } ]
60a0604052306080523480156200001557600080fd5b506200002062000026565b620000da565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000775760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051612c5862000104600039600081816113480152818161137101526114b20152612c586000f3fe60806040526004361061027d5760003560e01c806379cc67901161014f578063d505accf116100c1578063f2fde38b1161007a578063f2fde38b1461077a578063f3d7d2821461079a578063f4cb4ed0146107ca578063f8c8765e146107e0578063fca3b5aa14610800578063fd967f471461082057600080fd5b8063d505accf146106b5578063dd62ed3e146106d5578063e14f870d146106f5578063e30c397814610715578063e5e31b131461072a578063f160d3691461075a57600080fd5b806395d89b411161011357806395d89b4114610603578063a9059cbb14610618578063ad3cb1cc14610638578063bc063e1a14610669578063c5b0fe9d1461067f578063d1927fde1461069557600080fd5b806379cc6790146105715780637ecebe00146105915780638456cb59146105b157806384b0196e146105c65780638da5cb5b146105ee57600080fd5b806346904840116101f35780636db79437116101ac5780636db79437146104d157806370a08231146104f1578063715018a61461051157806373f425611461052657806376c730641461053c57806379ba50971461055c57600080fd5b8063469048401461042f5780634eb03f6e1461044f5780634f1ef2861461046f57806352d1902d146104825780635c60da1b146104975780635c975abb146104ac57600080fd5b8063313ce56711610245578063313ce56714610373578063355274ea1461038f5780633644e515146103c35780633f4ba83a146103d857806340c10f19146103ef57806342966c681461040f57600080fd5b806306fdde031461028257806307546172146102ad578063095ea7b3146102e557806318160ddd1461031557806323b872dd14610353575b600080fd5b34801561028e57600080fd5b50610297610836565b6040516102a491906125e1565b60405180910390f35b3480156102b957600080fd5b506000546102cd906001600160a01b031681565b6040516001600160a01b0390911681526020016102a4565b3480156102f157600080fd5b50610305610300366004612609565b6108df565b60405190151581526020016102a4565b34801561032157600080fd5b507f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040519081526020016102a4565b34801561035f57600080fd5b5061030561036e366004612635565b6108f9565b34801561037f57600080fd5b50604051601281526020016102a4565b34801561039b57600080fd5b507f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d0054610345565b3480156103cf57600080fd5b5061034561091f565b3480156103e457600080fd5b506103ed61092e565b005b3480156103fb57600080fd5b506103ed61040a366004612609565b610940565b34801561041b57600080fd5b506103ed61042a366004612676565b610980565b34801561043b57600080fd5b506003546102cd906001600160a01b031681565b34801561045b57600080fd5b506103ed61046a36600461268f565b6109a4565b6103ed61047d3660046126c2565b6109b5565b34801561048e57600080fd5b506103456109d0565b3480156104a357600080fd5b506102cd6109ed565b3480156104b857600080fd5b50600080516020612c038339815191525460ff16610305565b3480156104dd57600080fd5b506103ed6104ec366004612786565b610a0e565b3480156104fd57600080fd5b5061034561050c36600461268f565b610a20565b34801561051d57600080fd5b506103ed610a53565b34801561053257600080fd5b5061034560025481565b34801561054857600080fd5b506103ed6105573660046127a8565b610a65565b34801561056857600080fd5b506103ed610acc565b34801561057d57600080fd5b506103ed61058c366004612609565b610b11565b34801561059d57600080fd5b506103456105ac36600461268f565b610b33565b3480156105bd57600080fd5b506103ed610b3e565b3480156105d257600080fd5b506105db610b4e565b6040516102a497969594939291906127e6565b3480156105fa57600080fd5b506102cd610bfa565b34801561060f57600080fd5b50610297610c2f565b34801561062457600080fd5b50610305610633366004612609565b610c6e565b34801561064457600080fd5b50610297604051806040016040528060058152602001640352e302e360dc1b81525081565b34801561067557600080fd5b506103456103e881565b34801561068b57600080fd5b5061034560045481565b3480156106a157600080fd5b506103ed6106b03660046127a8565b610c7c565b3480156106c157600080fd5b506103ed6106d036600461287c565b610c8e565b3480156106e157600080fd5b506103456106f03660046128f3565b610de7565b34801561070157600080fd5b506001546102cd906001600160a01b031681565b34801561072157600080fd5b506102cd610e31565b34801561073657600080fd5b5061030561074536600461268f565b60066020526000908152604090205460ff1681565b34801561076657600080fd5b506103ed61077536600461268f565b610e5a565b34801561078657600080fd5b506103ed61079536600461268f565b610e6b565b3480156107a657600080fd5b506103056107b536600461268f565b60076020526000908152604090205460ff1681565b3480156107d657600080fd5b5061034560055481565b3480156107ec57600080fd5b506103ed6107fb366004612921565b610ef0565b34801561080c57600080fd5b506103ed61081b36600461268f565b6110f1565b34801561082c57600080fd5b5061034561271081565b60606000600080516020612ba38339815191525b905080600301805461085b9061297d565b80601f01602080910402602001604051908101604052809291908181526020018280546108879061297d565b80156108d45780601f106108a9576101008083540402835291602001916108d4565b820191906000526020600020905b8154815290600101906020018083116108b757829003601f168201915b505050505091505090565b6000336108ed81858561111b565b60019150505b92915050565b60003361090785828561112d565b610912858585611193565b60019150505b9392505050565b60006109296111f2565b905090565b6109366111fc565b61093e61122e565b565b6000546001600160a01b03163314610972576040516343fae5c160e11b81523360048201526024015b60405180910390fd5b61097c828261128e565b5050565b806002600082825461099291906129cd565b909155506109a19050816112c4565b50565b6109ac6111fc565b6109a1816112ce565b6109bd61133d565b6109c6826113e2565b61097c82826113ea565b60006109da6114a7565b50600080516020612be383398151915290565b6000610929600080516020612be3833981519152546001600160a01b031690565b610a166111fc565b61097c82826114f0565b600080600080516020612ba38339815191525b6001600160a01b0390931660009081526020939093525050604090205490565b610a5b6111fc565b61093e6000611593565b6001546001600160a01b0316336001600160a01b031614158015610aa25750610a8c610bfa565b6001600160a01b0316336001600160a01b031614155b15610ac25760405163fd7f8f5760e01b8152336004820152602401610969565b61097c82826115cb565b3380610ad6610e31565b6001600160a01b031614610b085760405163118cdaa760e01b81526001600160a01b0382166004820152602401610969565b6109a181611593565b8060026000828254610b2391906129cd565b9091555061097c9050828261162b565b60006108f382611640565b610b466111fc565b61093e611669565b60006060808280808381600080516020612bc38339815191528054909150158015610b7b57506001810154155b610bbf5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610969565b610bc76116b2565b610bcf6116f1565b60408051600080825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b6000807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace048054606091600080516020612ba38339815191529161085b9061297d565b6000336108ed818585611193565b610c846111fc565b61097c8282611709565b83421115610cb25760405163313c898160e11b815260048101859052602401610969565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610d1e8c6001600160a01b031660009081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610d7982611761565b90506000610d898287878761178e565b9050896001600160a01b0316816001600160a01b031614610dd0576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610969565b610ddb8a8a8a61111b565b50505050505050505050565b6001600160a01b0391821660009081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6000807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610c1f565b610e626111fc565b6109a1816117bc565b610e736111fc565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b0319166001600160a01b0383169081178255610eb7610bfa565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff16600081158015610f365750825b905060008267ffffffffffffffff166001148015610f535750303b155b905081158015610f61575080155b15610f7f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610fa957845460ff60401b1916600160401b1785555b60006aa56fa5b99019a5c80000009050610fff6040518060400160405280600981526020016823aa19902a37b5b2b760b91b8152506040518060400160405280600381526020016247543360e81b815250611864565b61100881611876565b611010611887565b61103a6040518060400160405280600981526020016823aa19902a37b5b2b760b91b81525061188f565b6110438a6118ba565b61104b611887565b6110536118cb565b61105b611887565b611063611887565b611070600a6101f46114f0565b611079896117bc565b611084886001611709565b50600180546001600160a01b0319166001600160a01b03881617905583156110e657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b6000546001600160a01b0316156109ac5760405163d292e89b60e01b815260040160405180910390fd5b61112883838360016118db565b505050565b60006111398484610de7565b9050600019811461118d578181101561117e57604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610969565b61118d848484840360006118db565b50505050565b6001600160a01b0383166111bd57604051634b637e8f60e11b815260006004820152602401610969565b6001600160a01b0382166111e75760405163ec442f0560e01b815260006004820152602401610969565b6111288383836119c3565b6000610929611c91565b33611205610bfa565b6001600160a01b03161461093e5760405163118cdaa760e01b8152336004820152602401610969565b611236611d05565b600080516020612c03833981519152805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a150565b6001600160a01b0382166112b85760405163ec442f0560e01b815260006004820152602401610969565b61097c600083836119c3565b6109a13382611d35565b6001600160a01b0381166112f557604051630c9395af60e11b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b038316908117825560405190917f94a0a7c0a7a455351029a521046d4438bc63e58a1ee8d984d624eb3161583b2c91a250565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113c457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166113b8600080516020612be3833981519152546001600160a01b031690565b6001600160a01b031614155b1561093e5760405163703e46dd60e11b815260040160405180910390fd5b6109a16111fc565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611444575060408051601f3d908101601f19168201909252611441918101906129e0565b60015b61146c57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610969565b600080516020612be3833981519152811461149d57604051632a87526960e21b815260048101829052602401610969565b6111288383611d6b565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461093e5760405163703e46dd60e11b815260040160405180910390fd5b6103e882111561151e57604051631872f21b60e01b81526103e8600482015260248101839052604401610969565b6103e881111561154c57604051631872f21b60e01b81526103e8600482015260248101829052604401610969565b6004829055600581905560408051838152602081018390527f53482196ef67ac615caab1c3eca2c270acbfdcd75e57c5f24c1b98b10c8e6e04910160405180910390a15050565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c0080546001600160a01b031916815561097c82611dc1565b6001600160a01b038216600081815260066020908152604091829020805460ff191685151590811790915591519182527f3f0b268e8f1181d8b2dbf5e8582c2c0ff30850d691f11ca23984075488f9c55791015b60405180910390a25050565b61163682338361112d565b61097c8282611d35565b6000807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610a33565b611671611e32565b600080516020612c03833981519152805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611270565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1028054606091600080516020612bc38339815191529161085b9061297d565b60606000600080516020612bc383398151915261084a565b6001600160a01b038216600081815260076020908152604091829020805460ff191685151590811790915591519182527fcf2e41776efc14e59953a1d95a34fc8a2947377f19cf451c946fc2400665dee3910161161f565b60006108f361176e6111f2565b8360405161190160f01b8152600281019290925260228201526042902090565b6000806000806117a088888888611e63565b9250925092506117b08282611f32565b50909695505050505050565b6001600160a01b0381166117e3576040516321f3bfbd60e11b815260040160405180910390fd5b6003546001600160a01b03161561180d5760035461180d9030906001600160a01b0316600061111b565b61181a308260001961111b565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f6632de8ab33c46549f7bb29f647ea0d751157b25fe6a14b1bcc7527cdfbeb79c90600090a250565b61186c611feb565b61097c8282612034565b61187e611feb565b6109a181612085565b61093e611feb565b611897611feb565b6109a181604051806040016040528060018152602001603160f81b8152506120d6565b6118c2611feb565b6109a181612137565b6118d3611feb565b61093e612169565b600080516020612ba38339815191526001600160a01b0385166119145760405163e602df0560e01b815260006004820152602401610969565b6001600160a01b03841661193e57604051634a1406b160e11b815260006004820152602401610969565b6001600160a01b038086166000908152600183016020908152604080832093881683529290522083905581156119bc57836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040516119b391815260200190565b60405180910390a35b5050505050565b6119cb611e32565b6001600160a01b038316600090815260066020526040812054829060ff1615611b9b576000336001600160a01b03166318aa6e8c6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611a4a575060408051601f3d908101601f19168201909252611a47918101906129f9565b60015b611a575750600454611ae5565b6001600160a01b03811660009081526007602052604090205460ff16611a7f57600454611ae1565b806001600160a01b03166314208bea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae191906129e0565b9150505b336001600160a01b0316639af1d35a6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b3f575060408051601f3d908101601f19168201909252611b3c918101906129f9565b60015b15611b6457856001600160a01b0316816001600160a01b031603611b6257600091505b505b6103e8811115611b7357506004545b611b7f816127106129cd565b611b898286612a16565b611b939190612a2d565b925050611c69565b6001600160a01b03841660009081526006602052604090205460ff1615611c69573360009081526007602052604081205460ff16611bdb57600554611c3d565b336001600160a01b03166314208bea6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c3d91906129e0565b90506103e8811115611c4e57506005545b612710611c5b8286612a16565b611c659190612a2d565b9250505b8115611c8657611c798284612a4f565b9050611c8685308461218a565b6119bc85858361218a565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611cbc612226565b611cc4612290565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600080516020612c038339815191525460ff1661093e57604051638dfc202b60e01b815260040160405180910390fd5b6001600160a01b038216611d5f57604051634b637e8f60e11b815260006004820152602401610969565b61097c826000836119c3565b611d74826122d4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2805115611db9576111288282612339565b61097c6123af565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b600080516020612c038339815191525460ff161561093e5760405163d93c066560e01b815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611e9e5750600091506003905082611f28565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611ef2573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611f1e57506000925060019150829050611f28565b9250600091508190505b9450945094915050565b6000826003811115611f4657611f46612a62565b03611f4f575050565b6001826003811115611f6357611f63612a62565b03611f815760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115611f9557611f95612a62565b03611fb65760405163fce698f760e01b815260048101829052602401610969565b6003826003811115611fca57611fca612a62565b0361097c576040516335e2f38360e21b815260048101829052602401610969565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661093e57604051631afcd79f60e31b815260040160405180910390fd5b61203c611feb565b600080516020612ba38339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036120768482612ac6565b506004810161118d8382612ac6565b61208d611feb565b7f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d0060008290036120d35760405163392e1e2760e01b815260006004820152602401610969565b55565b6120de611feb565b600080516020612bc38339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026121188482612ac6565b50600381016121278382612ac6565b5060008082556001909101555050565b61213f611feb565b6001600160a01b038116610b0857604051631e4fbdf760e01b815260006004820152602401610969565b612171611feb565b600080516020612c03833981519152805460ff19169055565b6121958383836123ce565b6001600160a01b0383166111285760006121cd7f0f070392f17d5f958cc1ac31867dabecfc5c9758b4a419a200803226d7155d005490565b905060006121f97f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b9050818111156119bc5760405163279e7e1560e21b81526004810182905260248101839052604401610969565b6000600080516020612bc3833981519152816122406116b2565b80519091501561225857805160209091012092915050565b81548015612267579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b6000600080516020612bc3833981519152816122aa6116f1565b8051909150156122c257805160209091012092915050565b60018201548015612267579392505050565b806001600160a01b03163b60000361230a57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610969565b600080516020612be383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b0316846040516123569190612b86565b600060405180830381855af49150503d8060008114612391576040519150601f19603f3d011682016040523d82523d6000602084013e612396565b606091505b50915091506123a685838361250c565b95945050505050565b341561093e5760405163b398979f60e01b815260040160405180910390fd5b600080516020612ba38339815191526001600160a01b03841661240a57818160020160008282546123ff91906129cd565b9091555061247c9050565b6001600160a01b0384166000908152602082905260409020548281101561245d5760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610969565b6001600160a01b03851660009081526020839052604090209083900390555b6001600160a01b03831661249a5760028101805483900390556124b9565b6001600160a01b03831660009081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124fe91815260200190565b60405180910390a350505050565b6060826125215761251c82612568565b610918565b815115801561253857506001600160a01b0384163b155b1561256157604051639996b31560e01b81526001600160a01b0385166004820152602401610969565b5080610918565b8051156125785780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60005b838110156125ac578181015183820152602001612594565b50506000910152565b600081518084526125cd816020860160208601612591565b601f01601f19169290920160200192915050565b60208152600061091860208301846125b5565b6001600160a01b03811681146109a157600080fd5b6000806040838503121561261c57600080fd5b8235612627816125f4565b946020939093013593505050565b60008060006060848603121561264a57600080fd5b8335612655816125f4565b92506020840135612665816125f4565b929592945050506040919091013590565b60006020828403121561268857600080fd5b5035919050565b6000602082840312156126a157600080fd5b8135610918816125f4565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156126d557600080fd5b82356126e0816125f4565b9150602083013567ffffffffffffffff808211156126fd57600080fd5b818501915085601f83011261271157600080fd5b813581811115612723576127236126ac565b604051601f8201601f19908116603f0116810190838211818310171561274b5761274b6126ac565b8160405282815288602084870101111561276457600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b6000806040838503121561279957600080fd5b50508035926020909101359150565b600080604083850312156127bb57600080fd5b82356127c6816125f4565b9150602083013580151581146127db57600080fd5b809150509250929050565b60ff60f81b881681526000602060e08184015261280660e084018a6125b5565b8381036040850152612818818a6125b5565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b8181101561286a5783518352928401929184019160010161284e565b50909c9b505050505050505050505050565b600080600080600080600060e0888a03121561289757600080fd5b87356128a2816125f4565b965060208801356128b2816125f4565b95506040880135945060608801359350608088013560ff811681146128d657600080fd5b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561290657600080fd5b8235612911816125f4565b915060208301356127db816125f4565b6000806000806080858703121561293757600080fd5b8435612942816125f4565b93506020850135612952816125f4565b92506040850135612962816125f4565b91506060850135612972816125f4565b939692955090935050565b600181811c9082168061299157607f821691505b6020821081036129b157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b808201808211156108f3576108f36129b7565b6000602082840312156129f257600080fd5b5051919050565b600060208284031215612a0b57600080fd5b8151610918816125f4565b80820281158282048414176108f3576108f36129b7565b600082612a4a57634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156108f3576108f36129b7565b634e487b7160e01b600052602160045260246000fd5b601f82111561112857600081815260208120601f850160051c81016020861015612a9f5750805b601f850160051c820191505b81811015612abe57828155600101612aab565b505050505050565b815167ffffffffffffffff811115612ae057612ae06126ac565b612af481612aee845461297d565b84612a78565b602080601f831160018114612b295760008415612b115750858301515b600019600386901b1c1916600185901b178555612abe565b600085815260208120601f198616915b82811015612b5857888601518255948401946001909101908401612b39565b5085821015612b765787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008251612b98818460208701612591565b919091019291505056fe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbccd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300a2646970667358221220c55e2f7ebc4e5f8fdd5ca1450b4b88e45b19ab33bbdd990d778a775920e5ff8d64736f6c63430008140033