[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApprovalToCurrentOwner", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "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": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "FOR_SALE_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVED_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "RESERVED_TOKENS_ADDRESS", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STAGE_PRESALE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STAGE_PUBLIC", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "STAGE_STOPPED", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentStage", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "getContractInfo", "outputs": [ { "internalType": "uint256", "name": "_currentStage", "type": "uint256" }, { "internalType": "uint256", "name": "_maxTokensAllowed", "type": "uint256" }, { "internalType": "uint256", "name": "_tokenPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_soldAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_purchasedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "_presaleTotalLimit", "type": "uint256" }, { "internalType": "bytes32", "name": "_whitelistRoot", "type": "bytes32" }, { "internalType": "uint256", "name": "_totalForSale", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "getMaxTokensAllowed", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "getMaxTokensForPhase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokensPerAddress", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokensPerAddressPresale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokensPerTransaction", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "presaleTotalLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "purchased", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "URI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_currentForSaleLimit", "type": "uint256" } ], "name": "setCurrentForSaleLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "setMaxTokensPerAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "setMaxTokensPerTransaction", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "setPresaleTotalLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "setTokenPricePresale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "val", "type": "uint256" } ], "name": "setTokenPricePublicSale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "val", "type": "bytes32" } ], "name": "setWhitelistRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "soldAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "startPresale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "startPublicSale", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stopSale", "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": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenBaseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bytes32[]", "name": "proof", "type": "bytes32[]" } ], "name": "tokenPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenPricePresale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenPricePublicSale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "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": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "whitelistRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405261001160fa6109c461042b565b6009555f600a5567011c37937e080000600b5567011c37937e080000600c556003600d556006600e556006600f556109c46010557f5cbb7b059a18f24e66ab9e16fce1ba1f309953713cee37b7f29bcf278d658db65f1b60115560405180608001604052806043815260200161294b6043913960129061009190826104e0565b505f6013553480156100a1575f80fd5b506040805180820182526009808252680888aac92988c92a6960bb1b60208084018290528451808601909552918452908301529060026100e183826104e0565b5060036100ee82826104e0565b505060015f55506100fe33610122565b61011d73bbac2d92f53ae3eaebeede1ab9cc6fd05ff4d4f760fa610173565b610622565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610192828260405180602001604052805f81525061019660201b60201c565b5050565b6101a383838360016101a8565b505050565b5f546001600160a01b0385166101d057604051622e076360e81b815260040160405180910390fd5b835f036101f05760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0385165f81815260056020908152604080832080546001600160801b031981166001600160401b038083168c018116918217680100000000000000006001600160401b031990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b42909216919091021790558080850183801561029657506001600160a01b0387163b15155b15610308575b60405182906001600160a01b038916905f905f8051602061298e833981519152908290a460018201916102d3905f90899088610344565b6102f0576040516368d2bf6b60e11b815260040160405180910390fd5b80820361029c57825f5414610303575f80fd5b610339565b5b6040516001830192906001600160a01b038916905f905f8051602061298e833981519152908290a4808203610309575b505f555b5050505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a029061037890339089908890889060040161059a565b6020604051808303815f875af19250505080156103b2575060408051601f3d908101601f191682019092526103af918101906105f4565b60015b61040e573d8080156103df576040519150601f19603f3d011682016040523d82523d5f602084013e6103e4565b606091505b5080515f03610406576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b8181038181111561044a57634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061047857607f821691505b60208210810361049657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101a357805f5260205f20601f840160051c810160208510156104c15750805b601f840160051c820191505b8181101561033d575f81556001016104cd565b81516001600160401b038111156104f9576104f9610450565b61050d816105078454610464565b8461049c565b6020601f82116001811461053f575f83156105285750848201515b5f19600385901b1c1916600184901b17845561033d565b5f84815260208120601f198516915b8281101561056e578785015182556020948501946001909201910161054e565b508482101561058b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60018060a01b038516815260018060a01b0384166020820152826040820152608060608201525f8251806080840152806020850160a085015e5f60a0828501015260a0601f19601f83011684010191505095945050505050565b5f60208284031215610604575f80fd5b81516001600160e01b03198116811461061b575f80fd5b9392505050565b61231c8061062f5f395ff3fe6080604052600436106102d9575f3560e01c806355f804b311610189578063ae3aa72f116100d8578063e36b0b3711610092578063f2fde38b1161006d578063f2fde38b14610863578063f5aa406d14610882578063f85aff94146108a1578063fa1a5f59146108b6575f80fd5b8063e36b0b37146107f4578063e8812ae314610808578063e985e9c51461081c575f80fd5b8063ae3aa72f1461073e578063b88d4fde1461075d578063ba41b0c61461077c578063c87b56dd1461078f578063dbb84f11146107ae578063dc504f13146107cd575f80fd5b806378c5fe37116101435780638da5cb5b1161011e5780638da5cb5b146106d957806395d89b41146106f6578063a22cb4651461070a578063a4ac791514610729575f80fd5b806378c5fe371461069057806379666ccd146106a55780637e046f30146106c4575f80fd5b806355f804b3146105f65780635bf5d54c146106155780636352211e1461062a57806368fc68c71461064957806370a082311461065d578063715018a61461067c575f80fd5b80632b038411116102455780634324851a116101ff5780634d8fae95116101da5780634d8fae951461058e5780634e99b800146105a3578063522fe98e146105b757806355e6738d146105e2575f80fd5b80634324851a1461053d57806346c4dc271461055c57806348e342581461057b575f80fd5b80632b038411146104675780632d84a94c1461047c578063311df29a146104d6578063386bfc98146104f55780633ccfd60b1461050a57806342842e0e1461051e575f80fd5b80631449d3e6116102965780631449d3e6146103b257806314ff2779146103d157806318160ddd146103f057806323a1baaa1461041457806323b872dd14610429578063285de8ca14610448575f80fd5b806301ffc9a7146102dd57806304c98b2b1461031157806306fdde0314610327578063081812fc14610348578063095ea7b31461037f5780630c1c972a1461039e575b5f80fd5b3480156102e8575f80fd5b506102fc6102f7366004611c24565b6108cb565b60405190151581526020015b60405180910390f35b34801561031c575f80fd5b5061032561091c565b005b348015610332575f80fd5b5061033b610956565b6040516103089190611c6d565b348015610353575f80fd5b50610367610362366004611c7f565b6109e6565b6040516001600160a01b039091168152602001610308565b34801561038a575f80fd5b50610325610399366004611cb1565b610a28565b3480156103a9575f80fd5b50610325610ab4565b3480156103bd575f80fd5b506103256103cc366004611c7f565b610ae5565b3480156103dc575f80fd5b506103256103eb366004611c7f565b610b14565b3480156103fb575f80fd5b506001545f54035f19015b604051908152602001610308565b34801561041f575f80fd5b50610406600e5481565b348015610434575f80fd5b50610325610443366004611cd9565b610b43565b348015610453575f80fd5b50610406610462366004611d57565b610b4e565b348015610472575f80fd5b50610406600b5481565b348015610487575f80fd5b5061049b610496366004611d57565b610bcc565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610308565b3480156104e1575f80fd5b506103256104f0366004611c7f565b610c2a565b348015610500575f80fd5b5061040660115481565b348015610515575f80fd5b50610325610c59565b348015610529575f80fd5b50610325610538366004611cd9565b610ca7565b348015610548575f80fd5b50610406610557366004611d57565b610cc1565b348015610567575f80fd5b50610325610576366004611c7f565b610d5e565b348015610586575f80fd5b506104065f81565b348015610599575f80fd5b5061040660095481565b3480156105ae575f80fd5b5061033b610d8d565b3480156105c2575f80fd5b506104066105d1366004611e14565b60146020525f908152604090205481565b3480156105ed575f80fd5b50610406600281565b348015610601575f80fd5b50610325610610366004611e2d565b610e19565b348015610620575f80fd5b50610406600a5481565b348015610635575f80fd5b50610367610644366004611c7f565b610e50565b348015610654575f80fd5b5061040660fa81565b348015610668575f80fd5b50610406610677366004611e14565b610e61565b348015610687575f80fd5b50610325610ead565b34801561069b575f80fd5b50610406600c5481565b3480156106b0575f80fd5b506103256106bf366004611c7f565b610ee0565b3480156106cf575f80fd5b5061040660105481565b3480156106e4575f80fd5b506008546001600160a01b0316610367565b348015610701575f80fd5b5061033b610f1b565b348015610715575f80fd5b50610325610724366004611e99565b610f2a565b348015610734575f80fd5b50610406600d5481565b348015610749575f80fd5b50610406610758366004611d57565b610fbe565b348015610768575f80fd5b50610325610777366004611ed2565b61102a565b61032561078a366004611f8e565b61107b565b34801561079a575f80fd5b5061033b6107a9366004611c7f565b6111f0565b3480156107b9575f80fd5b506103256107c8366004611c7f565b611271565b3480156107d8575f80fd5b5061036773bbac2d92f53ae3eaebeede1ab9cc6fd05ff4d4f781565b3480156107ff575f80fd5b506103256112a0565b348015610813575f80fd5b50610406600181565b348015610827575f80fd5b506102fc610836366004612006565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b34801561086e575f80fd5b5061032561087d366004611e14565b6112d0565b34801561088d575f80fd5b5061032561089c366004611c7f565b61136b565b3480156108ac575f80fd5b50610406600f5481565b3480156108c1575f80fd5b5061040660135481565b5f6001600160e01b031982166380ac58cd60e01b14806108fb57506001600160e01b03198216635b5e139f60e01b145b8061091657506301ffc9a760e01b6001600160e01b03198316145b92915050565b6008546001600160a01b0316331461094f5760405162461bcd60e51b815260040161094690612037565b60405180910390fd5b6001600a55565b6060600280546109659061206c565b80601f01602080910402602001604051908101604052809291908181526020018280546109919061206c565b80156109dc5780601f106109b3576101008083540402835291602001916109dc565b820191905f5260205f20905b8154815290600101906020018083116109bf57829003601f168201915b5050505050905090565b5f6109f08261139a565b610a0d576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f610a3282610e50565b9050806001600160a01b0316836001600160a01b031603610a665760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610a865750610a848133610836565b155b15610aa4576040516367d9dca160e11b815260040160405180910390fd5b610aaf8383836113d0565b505050565b6008546001600160a01b03163314610ade5760405162461bcd60e51b815260040161094690612037565b6002600a55565b6008546001600160a01b03163314610b0f5760405162461bcd60e51b815260040161094690612037565b600f55565b6008546001600160a01b03163314610b3e5760405162461bcd60e51b815260040161094690612037565b601055565b610aaf83838361142b565b6040516bffffffffffffffffffffffff19606084901b1660208201525f9081906034016040516020818303038152906040528051906020012090506002600a5403610b9d575050600e54610916565b6001600a5403610bc357610bb48360115483611612565b15610bc3575050600d54610916565b505f9392505050565b600a545f808080808080610be08a8a610cc1565b9650610bec8a8a610fbe565b6013546001600160a01b03909b165f908152601460205260409020546010546011546009549b9e9a9d939c50929a9199909850919650945092505050565b6008546001600160a01b03163314610c545760405162461bcd60e51b815260040161094690612037565b600b55565b6008546001600160a01b03163314610c835760405162461bcd60e51b815260040161094690612037565b60405133904780156108fc02915f818181858888f19350505050610ca5575f80fd5b565b610aaf83838360405180602001604052805f81525061102a565b5f80610ccd8484610b4e565b6001600160a01b0385165f9081526014602052604081205491925090610cf4908390611627565b9050610d008282611641565b91506001600a5403610d2b575f610d1b601054601354611627565b9050610d278382611641565b9250505b5f610d3a600954601354611627565b9050610d468382611641565b9250610d5483600f54611641565b9695505050505050565b6008546001600160a01b03163314610d885760405162461bcd60e51b815260040161094690612037565b600c55565b60128054610d9a9061206c565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc69061206c565b8015610e115780601f10610de857610100808354040283529160200191610e11565b820191905f5260205f20905b815481529060010190602001808311610df457829003601f168201915b505050505081565b6008546001600160a01b03163314610e435760405162461bcd60e51b815260040161094690612037565b6012610aaf8284836120e8565b5f610e5a82611656565b5192915050565b5f6001600160a01b038216610e89576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03165f908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610ed75760405162461bcd60e51b815260040161094690612037565b610ca55f611778565b6008546001600160a01b03163314610f0a5760405162461bcd60e51b815260040161094690612037565b610f1560fa826121b5565b60095550565b6060600380546109659061206c565b336001600160a01b03831603610f535760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6040516bffffffffffffffffffffffff19606084901b1660208201525f9081906034016040516020818303038152906040528051906020012090506001600a540361101f576110108360115483611612565b1561101f575050600b54610916565b5050600c5492915050565b61103584848461142b565b6001600160a01b0383163b151580156110575750611055848484846117c9565b155b15611075576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b826110b8338484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610fbe92505050565b6110c291906121c8565b3410156111065760405162461bcd60e51b8152602060048201526012602482015271125b98dbdc9c9958dd08115512081cd95b9d60721b6044820152606401610946565b611142338383808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250610cc192505050565b8311156111a65760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f74206d696e74206d6f7265207468616e20746865206d617820616c60448201526b6c6f77656420746f6b656e7360a01b6064820152608401610946565b6111b033846118b1565b335f90815260146020526040812080548592906111ce9084906121df565b925050819055508260135f8282546111e691906121df565b9091555050505050565b60606111fb8261139a565b61121857604051630a14c4b560e41b815260040160405180910390fd5b5f6112216118ce565b905080515f0361123f5760405180602001604052805f81525061126a565b80611249846118dd565b60405160200161125a929190612209565b6040516020818303038152906040525b9392505050565b6008546001600160a01b0316331461129b5760405162461bcd60e51b815260040161094690612037565b600e55565b6008546001600160a01b031633146112ca5760405162461bcd60e51b815260040161094690612037565b5f600a55565b6008546001600160a01b031633146112fa5760405162461bcd60e51b815260040161094690612037565b6001600160a01b03811661135f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610946565b61136881611778565b50565b6008546001600160a01b031633146113955760405162461bcd60e51b815260040161094690612037565b601155565b5f816001111580156113ac57505f5482105b80156109165750505f90815260046020526040902054600160e01b900460ff161590565b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b5f61143582611656565b9050836001600160a01b0316815f01516001600160a01b03161461146b5760405162a1148160e81b815260040160405180910390fd5b5f336001600160a01b038616148061148857506114888533610836565b806114a3575033611498846109e6565b6001600160a01b0316145b9050806114c357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166114ea57604051633a954ecd60e21b815260040160405180910390fd5b6114f55f84876113d0565b6001600160a01b038581165f908152600560209081526040808320805467ffffffffffffffff198082166001600160401b039283165f1901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166115c6575f5482146115c657805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050505050565b5f8261161e85846119d9565b14949350505050565b5f8183101561163757505f610916565b61126a82846121b5565b5f81831061164f578161126a565b5090919050565b604080516060810182525f8082526020820181905291810191909152818060011115801561168457505f5481105b1561175f575f81815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff1615159181018290529061175d5780516001600160a01b0316156116f6579392505050565b505f19015f81815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215611758579392505050565b6116f6565b505b604051636f96cda160e11b815260040160405180910390fd5b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906117fd903390899088908890600401612233565b6020604051808303815f875af1925050508015611837575060408051601f3d908101601f1916820190925261183491810190612265565b60015b611893573d808015611864576040519150601f19603f3d011682016040523d82523d5f602084013e611869565b606091505b5080515f0361188b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6118ca828260405180602001604052805f815250611a3f565b5050565b6060601280546109659061206c565b6060815f036119035750506040805180820190915260018152600360fc1b602082015290565b815f5b811561192c578061191681612280565b91506119259050600a836122ac565b9150611906565b5f816001600160401b0381111561194557611945611d13565b6040519080825280601f01601f19166020018201604052801561196f576020820181803683370190505b5090505b84156118a9576119846001836121b5565b9150611991600a866122bf565b61199c9060306121df565b60f81b8183815181106119b1576119b16122d2565b60200101906001600160f81b03191690815f1a9053506119d2600a866122ac565b9450611973565b5f81815b8451811015611a37575f8582815181106119f9576119f96122d2565b60200260200101519050808311611a1e575f8381526020829052604090209250611a2e565b5f81815260208490526040902092505b506001016119dd565b509392505050565b610aaf83838360015f546001600160a01b038516611a6f57604051622e076360e81b815260040160405180910390fd5b835f03611a8f5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0385165f81815260056020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168c0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168c01811690920217909155858452600490925290912080546001600160e01b031916909217600160a01b429092169190910217905580808501838015611b3f57506001600160a01b0387163b15155b15611bc3575b60405182906001600160a01b038916905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611b8e5f8884806001019550886117c9565b611bab576040516368d2bf6b60e11b815260040160405180910390fd5b808203611b4557825f5414611bbe575f80fd5b611c07565b5b6040516001830192906001600160a01b038916905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808203611bc4575b505f5561160b565b6001600160e01b031981168114611368575f80fd5b5f60208284031215611c34575f80fd5b813561126a81611c0f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61126a6020830184611c3f565b5f60208284031215611c8f575f80fd5b5035919050565b80356001600160a01b0381168114611cac575f80fd5b919050565b5f8060408385031215611cc2575f80fd5b611ccb83611c96565b946020939093013593505050565b5f805f60608486031215611ceb575f80fd5b611cf484611c96565b9250611d0260208501611c96565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611d4f57611d4f611d13565b604052919050565b5f8060408385031215611d68575f80fd5b611d7183611c96565b915060208301356001600160401b03811115611d8b575f80fd5b8301601f81018513611d9b575f80fd5b80356001600160401b03811115611db457611db4611d13565b8060051b611dc460208201611d27565b91825260208184018101929081019088841115611ddf575f80fd5b6020850194505b83851015611e0557843580835260209586019590935090910190611de6565b80955050505050509250929050565b5f60208284031215611e24575f80fd5b61126a82611c96565b5f8060208385031215611e3e575f80fd5b82356001600160401b03811115611e53575f80fd5b8301601f81018513611e63575f80fd5b80356001600160401b03811115611e78575f80fd5b856020828401011115611e89575f80fd5b6020919091019590945092505050565b5f8060408385031215611eaa575f80fd5b611eb383611c96565b915060208301358015158114611ec7575f80fd5b809150509250929050565b5f805f8060808587031215611ee5575f80fd5b611eee85611c96565b9350611efc60208601611c96565b92506040850135915060608501356001600160401b03811115611f1d575f80fd5b8501601f81018713611f2d575f80fd5b80356001600160401b03811115611f4657611f46611d13565b611f59601f8201601f1916602001611d27565b818152886020838501011115611f6d575f80fd5b816020840160208301375f6020838301015280935050505092959194509250565b5f805f60408486031215611fa0575f80fd5b8335925060208401356001600160401b03811115611fbc575f80fd5b8401601f81018613611fcc575f80fd5b80356001600160401b03811115611fe1575f80fd5b8660208260051b8401011115611ff5575f80fd5b939660209190910195509293505050565b5f8060408385031215612017575f80fd5b61202083611c96565b915061202e60208401611c96565b90509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061208057607f821691505b60208210810361209e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610aaf57805f5260205f20601f840160051c810160208510156120c95750805b601f840160051c820191505b8181101561160b575f81556001016120d5565b6001600160401b038311156120ff576120ff611d13565b6121138361210d835461206c565b836120a4565b5f601f841160018114612144575f851561212d5750838201355b5f19600387901b1c1916600186901b17835561160b565b5f83815260208120601f198716915b828110156121735786850135825560209485019460019092019101612153565b508682101561218f575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610916576109166121a1565b8082028115828204841417610916576109166121a1565b80820180821115610916576109166121a1565b5f81518060208401855e5f93019283525090919050565b5f61221d61221783866121f2565b846121f2565b64173539b7b760d91b8152600501949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f90610d5490830184611c3f565b5f60208284031215612275575f80fd5b815161126a81611c0f565b5f60018201612291576122916121a1565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f826122ba576122ba612298565b500490565b5f826122cd576122cd612298565b500690565b634e487b7160e01b5f52603260045260245ffdfea26469706673582212205eb2f299d73ab9a593d1219744de7bbd8e538a2ba6911a2d819d33b504368b8564736f6c634300081a0033697066733a2f2f6261667962656966676b7164633774623565706f7a6d6432346669776e7967726d366f6770643676377a6e6179346271376c3461676f33706c34342fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef