[ { "inputs": [], "name": "AlreadyClaimed", "type": "error" }, { "inputs": [], "name": "ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "FailedToSendEther", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "paid", "type": "uint256" }, { "internalType": "uint256", "name": "requiredAmount", "type": "uint256" } ], "name": "IncorrectFee", "type": "error" }, { "inputs": [], "name": "IncorrectSender", "type": "error" }, { "inputs": [], "name": "IncorrectSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "maxSupply", "type": "uint256" } ], "name": "MaxSupplyReached", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "NonExistentToken", "type": "error" }, { "inputs": [], "name": "Soulbound", "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": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Claimed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newFee", "type": "uint256" } ], "name": "FeeChanged", "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": "tokenId", "type": "uint256" } ], "name": "Locked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "MaxSupplyChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MetadataUpdate", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newAmount", "type": "uint256" } ], "name": "MintableAmountPerUserChanged", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "newTreasury", "type": "address" } ], "name": "TreasuryChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Unlocked", "type": "event" }, { "inputs": [], "name": "SIGNATURE_VALIDITY", "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": [ { "internalType": "uint256", "name": "userId", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "uint256", "name": "userId", "type": "uint256" }, { "internalType": "uint256", "name": "signedAt", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "userId", "type": "uint256" }, { "internalType": "uint256", "name": "signedAt", "type": "uint256" }, { "internalType": "bytes", "name": "signature", "type": "bytes" } ], "name": "claim", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "factoryProxy", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "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": [], "name": "getFeeData", "outputs": [ { "internalType": "uint256", "name": "tokenFee", "type": "uint256" }, { "internalType": "address payable", "name": "treasuryAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "string", "name": "cid", "type": "string" }, { "internalType": "address", "name": "tokenOwner", "type": "address" }, { "internalType": "address payable", "name": "treasury", "type": "address" }, { "internalType": "uint256", "name": "tokenFee", "type": "uint256" }, { "internalType": "bool", "name": "soulbound", "type": "bool" }, { "internalType": "uint256", "name": "maxSupply", "type": "uint256" }, { "internalType": "uint256", "name": "mintableAmountPerUser", "type": "uint256" } ], "internalType": "struct IGuildRewardNFTFactory.ConfigurableNFTConfig", "name": "nftConfig", "type": "tuple" }, { "internalType": "address", "name": "factoryProxyAddress", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "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": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "locked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "locked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintableAmountPerUser", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes[]", "name": "data", "type": "bytes[]" } ], "name": "multicall", "outputs": [ { "internalType": "bytes[]", "name": "results", "type": "bytes[]" } ], "stateMutability": "nonpayable", "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": "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": "uint256", "name": "newFee", "type": "uint256" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newLocked", "type": "bool" } ], "name": "setLocked", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newAmount", "type": "uint256" } ], "name": "setMintableAmountPerUser", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "newTreasury", "type": "address" } ], "name": "setTreasury", "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": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "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": "treasury", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newCid", "type": "string" } ], "name": "updateTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50613561806100206000396000f3fe6080604052600436106102305760003560e01c80637509c39b1161012e578063c87b56dd116100ab578063e985e9c51161006f578063e985e9c51461069a578063ef490fbd146106ba578063f0f44260146106d1578063f2fde38b146106f1578063f62411151461071157600080fd5b8063c87b56dd14610615578063cf30901214610635578063d5abeb011461064d578063ddca3f4314610664578063e2bdca4f1461067a57600080fd5b80639cc7f708116100f25780639cc7f7081461055a578063a22cb46514610588578063ac9650d8146105a8578063b45a3c0e146105d5578063b88d4fde146105f557600080fd5b80637509c39b146104c65780638da5cb5b146104e757806395d89b411461050557806398cd61531461051a578063994d97051461053a57600080fd5b80632e4dbe8f116101bc5780636352211e116101805780636352211e1461043157806369fe0e2d146104515780636f8b44b01461047157806370a0823114610491578063715018a6146104b157600080fd5b80632e4dbe8f146103995780632f745c59146103ac57806342842e0e146103cc5780634f6ccce7146103ec57806361d027b31461040c57600080fd5b806318160ddd1161020357806318160ddd146102e6578063211e28b61461030557806323b872dd14610325578063256a4935146103455780632a73dead1461038357600080fd5b806301ffc9a71461023557806306fdde031461026a578063081812fc1461028c578063095ea7b3146102c4575b600080fd5b34801561024157600080fd5b506102556102503660046128f9565b610731565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f610777565b6040516102619190612966565b34801561029857600080fd5b506102ac6102a7366004612979565b610809565b6040516001600160a01b039091168152602001610261565b3480156102d057600080fd5b506102e46102df3660046129b7565b610830565b005b3480156102f257600080fd5b506099545b604051908152602001610261565b34801561031157600080fd5b506102e46103203660046129f3565b610862565b34801561033157600080fd5b506102e4610340366004612a0e565b6108ed565b34801561035157600080fd5b5060fc5460fb5461010090046001600160a01b0316604080519283526001600160a01b03909116602083015201610261565b34801561038f57600080fd5b506102f7610e1081565b6102e46103a7366004612a90565b610921565b3480156103b857600080fd5b506102f76103c73660046129b7565b610c41565b3480156103d857600080fd5b506102e46103e7366004612a0e565b610cd7565b3480156103f857600080fd5b506102f7610407366004612979565b610d06565b34801561041857600080fd5b5060fb546102ac9061010090046001600160a01b031681565b34801561043d57600080fd5b506102ac61044c366004612979565b610d99565b34801561045d57600080fd5b506102e461046c366004612979565b610df9565b34801561047d57600080fd5b506102e461048c366004612979565b610e36565b34801561049d57600080fd5b506102f76104ac366004612b02565b610e74565b3480156104bd57600080fd5b506102e4610efa565b3480156104d257600080fd5b5061015f546102ac906001600160a01b031681565b3480156104f357600080fd5b5060c9546001600160a01b03166102ac565b34801561051157600080fd5b5061027f610f0e565b34801561052657600080fd5b506102e4610535366004612b1f565b610f1d565b34801561054657600080fd5b506102e4610555366004612ba4565b610f61565b34801561056657600080fd5b506102f7610575366004612979565b6000908152610163602052604090205490565b34801561059457600080fd5b506102e46105a3366004612c14565b61105b565b3480156105b457600080fd5b506105c86105c3366004612c49565b611089565b6040516102619190612c7e565b3480156105e157600080fd5b506102556105f0366004612979565b61117b565b34801561060157600080fd5b506102e4610610366004612d94565b6111be565b34801561062157600080fd5b5061027f610630366004612979565b6111f4565b34801561064157600080fd5b5060fb5460ff16610255565b34801561065957600080fd5b506102f76101605481565b34801561067057600080fd5b506102f760fc5481565b34801561068657600080fd5b506102e4610695366004612e33565b611258565b3480156106a657600080fd5b506102556106b5366004612f44565b6113db565b3480156106c657600080fd5b506102f76101615481565b3480156106dd57600080fd5b506102e46106ec366004612b02565b611433565b3480156106fd57600080fd5b506102e461070c366004612b02565b611491565b34801561071d57600080fd5b506102e461072c366004612979565b611507565b60006001600160e01b03198216635a2d1e0760e11b148061076257506001600160e01b0319821663780e9d6360e01b145b80610771575061077182611545565b92915050565b60606065805461078690612f7d565b80601f01602080910402602001604051908101604052809291908181526020018280546107b290612f7d565b80156107ff5780601f106107d4576101008083540402835291602001916107ff565b820191906000526020600020905b8154815290600101906020018083116107e257829003601f168201915b5050505050905090565b60006108148261156a565b506000908152606960205260409020546001600160a01b031690565b60fb5460ff16156108545760405163a4420a9560e01b815260040160405180910390fd5b61085e82826115c9565b5050565b61086a6116d9565b60fb805460ff191682158015919091179091556108b957604051600081527f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a1611906020015b60405180910390a150565b604051600081527ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f1842906020016108ae565b50565b60fb5460ff16156109115760405163a4420a9560e01b815260040160405180910390fd5b61091c838383611733565b505050565b61092d610e1042612fcd565b83101561094d5760405163df4cc36d60e01b815260040160405180910390fd5b610161548015801590610993575061096486610e74565b61096e9082612fcd565b8711806109935750600085815261016360205260409020546109909082612fcd565b87115b156109b157604051630c8d9eab60e31b815260040160405180910390fd5b6109bf878588888787611764565b6109dc5760405163c1606c2f60e01b815260040160405180910390fd5b61015f546040805163256a493560e01b8152815160009384936001600160a01b039091169263256a493592600480830193928290030181865afa158015610a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4b9190612fe0565b60008981526101636020526040812080549395509193508b92610a6f908490613005565b909155505060995460006001610a858c84613005565b610a8f9190612fcd565b610160549091508015801590610aa55750808210155b15610acb5760405163f9f8491560e01b8152600481018290526024015b60405180910390fd5b825b828111610ba057610ade8c826118e8565b60fb5460ff1615610b21576040518181527f032bc66be43dbccb7487781d168eb7bda224628a3b2c3388bdf69b532a3a16119060200160405180910390a1610b55565b6040518181527ff27b6ce5b2f5e68ddb2fd95a8a909d4ecf1daaac270935fff052feacb24f18429060200160405180910390a15b8b6001600160a01b03167fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a82604051610b9091815260200190565b60405180910390a2600101610acd565b506000610bad868e613018565b9050600060fc548e610bbf9190613018565b9050610bcb8183613005565b3403610c0457610be46001600160a01b03871683611902565b60fb54610bff9061010090046001600160a01b031682611902565b610c31565b34610c0f8284613005565b60405163dcf6afcb60e01b815260048101929092526024820152604401610ac2565b5050505050505050505050505050565b6000610c4c83610e74565b8210610cae5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610ac2565b506001600160a01b03919091166000908152609760209081526040808320938352929052205490565b60fb5460ff1615610cfb5760405163a4420a9560e01b815260040160405180910390fd5b61091c838383611981565b6000610d1160995490565b8210610d745760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610ac2565b60998281548110610d8757610d8761302f565b90600052602060002001549050919050565b6000818152606760205260408120546001600160a01b0316806107715760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ac2565b610e016116d9565b60fc8190556040518181527f6bbc57480a46553fa4d156ce702beef5f3ad66303b0ed1a5d4cb44966c6584c3906020016108ae565b610e3e6116d9565b6101608190556040518181527f28a10a2e0b5582da7164754cb994f6214b8af6aa7f7e003305fbc09e7106c513906020016108ae565b60006001600160a01b038216610ede5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610ac2565b506001600160a01b031660009081526068602052604090205490565b610f026116d9565b610f0c600061199c565b565b60606066805461078690612f7d565b610f256116d9565b610162610f33828483613093565b506040517f22e4f6d6e52498ce761f4a367a6aaff84750f8bfb036d99abbb027e50eddacd990600090a15050565b610f6d610e1042612fcd565b831015610f8d5760405163df4cc36d60e01b815260040160405180910390fd5b84610f9c818533888787611764565b610fb95760405163c1606c2f60e01b815260040160405180910390fd5b60005b8181101561102d576000888883818110610fd857610fd861302f565b905060200201359050610fea81610d99565b6001600160a01b0316336001600160a01b03161461101b57604051637d1c29f360e01b815260040160405180910390fd5b611024816119ee565b50600101610fbc565b50600085815261016360205260408120805483929061104d908490612fcd565b909155505050505050505050565b60fb5460ff161561107f5760405163a4420a9560e01b815260040160405180910390fd5b61085e8282611a91565b604080516000815260208101909152606090826001600160401b038111156110b3576110b3612ce0565b6040519080825280602002602001820160405280156110e657816020015b60608152602001906001900390816110d15790505b50915060005b83811015611173576111433086868481811061110a5761110a61302f565b905060200281019061111c9190613152565b8560405160200161112f93929190613198565b604051602081830303815290604052611a9c565b8382815181106111555761115561302f565b6020026020010181905250808061116b906131bf565b9150506110ec565b505092915050565b6000818152606760205260408120546001600160a01b03166111b3576040516338077a2b60e01b815260048101839052602401610ac2565b505060fb5460ff1690565b60fb5460ff16156111e25760405163a4420a9560e01b815260040160405180910390fd5b6111ee84848484611ac1565b50505050565b6000818152606760205260409020546060906001600160a01b031661122f576040516338077a2b60e01b815260048101839052602401610ac2565b61016260405160200161124291906131d8565b6040516020818303038152906040529050919050565b600054610100900460ff16158080156112785750600054600160ff909116105b806112925750303b158015611292575060005460ff166001145b6112f55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ac2565b6000805460ff191660011790558015611318576000805461ff0019166101001790555b60408301516101629061132b9082613261565b5060e0830151610160556101008301516101615561015f80546001600160a01b0319166001600160a01b0384161790558251602084015160c0850151611372929190611af3565b61138483608001518460a00151611b3a565b611391836060015161199c565b801561091c576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b60fb5460009060ff16156114025760405163a4420a9560e01b815260040160405180910390fd5b6001600160a01b038084166000908152606a602090815260408083209386168352929052205460ff165b9392505050565b61143b6116d9565b60fb8054610100600160a81b0319166101006001600160a01b038416908102919091179091556040519081527fc714d22a2f08b695f81e7c707058db484aa5b4d6b4c9fd64beb10fe85832f608906020016108ae565b6114996116d9565b6001600160a01b0381166114fe5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ac2565b6108ea8161199c565b61150f6116d9565b6101618190556040518181527f9e472eca58c4e042d7c8d0a56efae67c6dd8b50f80ceb64d1520b14d82926e5b906020016108ae565b60006001600160e01b0319821663780e9d6360e01b1480610771575061077182611b8d565b6000818152606760205260409020546001600160a01b03166108ea5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610ac2565b60006115d482610d99565b9050806001600160a01b0316836001600160a01b0316036116415760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610ac2565b336001600160a01b038216148061165d575061165d81336113db565b6116cf5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610ac2565b61091c8383611bdd565b60c9546001600160a01b03163314610f0c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ac2565b61173d3382611c4b565b6117595760405162461bcd60e51b8152600401610ac290613320565b61091c838383611caa565b6000604182146117875760405163c1606c2f60e01b815260040160405180910390fd5b60408051602081018990529081018790526001600160a01b0386166060820152608081018590524660a08201523060c082015260009061180d9060e001604051602081830303815290604052805190602001207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905061015f60009054906101000a90046001600160a01b03166001600160a01b0316631cc7d7436040518163ffffffff1660e01b8152600401602060405180830381865afa158015611863573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611887919061336d565b6001600160a01b03166118d285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611e1b9050565b6001600160a01b03161498975050505050505050565b61085e828260405180602001604052806000815250611e3f565b6000826001600160a01b03168260405160006040518083038185875af1925050503d806000811461194f576040519150601f19603f3d011682016040523d82523d6000602084013e611954565b606091505b505090508061091c57604051632499e3bb60e11b81526001600160a01b0384166004820152602401610ac2565b61091c838383604051806020016040528060008152506111be565b60c980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006119f982610d99565b9050611a09816000846001611e72565b611a1282610d99565b600083815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526068845282852080546000190190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b61085e338383611e7e565b606061142c838360405180606001604052806027815260200161350560279139611f4c565b611acb3383611c4b565b611ae75760405162461bcd60e51b8152600401610ac290613320565b6111ee84848484611fc4565b600054610100900460ff16611b1a5760405162461bcd60e51b8152600401610ac29061338a565b60fb805460ff1916821515179055611b328383611ff7565b61091c612028565b600054610100900460ff16611b615760405162461bcd60e51b8152600401610ac29061338a565b60fb80546001600160a01b0390931661010002610100600160a81b03199093169290921790915560fc55565b60006001600160e01b031982166380ac58cd60e01b1480611bbe57506001600160e01b03198216635b5e139f60e01b145b8061077157506301ffc9a760e01b6001600160e01b0319831614610771565b600081815260696020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611c1282610d99565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611c5783610d99565b9050806001600160a01b0316846001600160a01b03161480611c7e5750611c7e81856113db565b80611ca25750836001600160a01b0316611c9784610809565b6001600160a01b0316145b949350505050565b826001600160a01b0316611cbd82610d99565b6001600160a01b031614611ce35760405162461bcd60e51b8152600401610ac2906133d5565b6001600160a01b038216611d455760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610ac2565b611d528383836001611e72565b826001600160a01b0316611d6582610d99565b6001600160a01b031614611d8b5760405162461bcd60e51b8152600401610ac2906133d5565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000806000611e2a858561204f565b91509150611e3781612094565b509392505050565b611e4983836121de565b611e566000848484612377565b61091c5760405162461bcd60e51b8152600401610ac29061341a565b6111ee84848484612478565b816001600160a01b0316836001600160a01b031603611edf5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610ac2565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6060600080856001600160a01b031685604051611f69919061346c565b600060405180830381855af49150503d8060008114611fa4576040519150601f19603f3d011682016040523d82523d6000602084013e611fa9565b606091505b5091509150611fba868383876125ac565b9695505050505050565b611fcf848484611caa565b611fdb84848484612377565b6111ee5760405162461bcd60e51b8152600401610ac29061341a565b600054610100900460ff1661201e5760405162461bcd60e51b8152600401610ac29061338a565b61085e8282612625565b600054610100900460ff16610f0c5760405162461bcd60e51b8152600401610ac29061338a565b60008082516041036120855760208301516040840151606085015160001a61207987828585612665565b9450945050505061208d565b506000905060025b9250929050565b60008160048111156120a8576120a8613488565b036120b05750565b60018160048111156120c4576120c4613488565b036121115760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610ac2565b600281600481111561212557612125613488565b036121725760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610ac2565b600381600481111561218657612186613488565b036108ea5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610ac2565b6001600160a01b0382166122345760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610ac2565b6000818152606760205260409020546001600160a01b0316156122995760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ac2565b6122a7600083836001611e72565b6000818152606760205260409020546001600160a01b03161561230c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610ac2565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001600160a01b0384163b1561246d57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906123bb90339089908890889060040161349e565b6020604051808303816000875af19250505080156123f6575060408051601f3d908101601f191682019092526123f3918101906134d1565b60015b612453573d808015612424576040519150601f19603f3d011682016040523d82523d6000602084013e612429565b606091505b50805160000361244b5760405162461bcd60e51b8152600401610ac29061341a565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611ca2565b506001949350505050565b60018111156124e75760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610ac2565b816001600160a01b0385166125435761253e81609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b612566565b836001600160a01b0316856001600160a01b031614612566576125668582612729565b6001600160a01b0384166125825761257d816127c6565b6125a5565b846001600160a01b0316846001600160a01b0316146125a5576125a58482612875565b5050505050565b6060831561261b578251600003612614576001600160a01b0385163b6126145760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ac2565b5081611ca2565b611ca283836128b9565b600054610100900460ff1661264c5760405162461bcd60e51b8152600401610ac29061338a565b60656126588382613261565b50606661091c8282613261565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561269c5750600090506003612720565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156126f0573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661271957600060019250925050612720565b9150600090505b94509492505050565b6000600161273684610e74565b6127409190612fcd565b600083815260986020526040902054909150808214612793576001600160a01b03841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b5060009182526098602090815260408084208490556001600160a01b039094168352609781528383209183525290812055565b6099546000906127d890600190612fcd565b6000838152609a6020526040812054609980549394509092849081106128005761280061302f565b9060005260206000200154905080609983815481106128215761282161302f565b6000918252602080832090910192909255828152609a90915260408082208490558582528120556099805480612859576128596134ee565b6001900381819060005260206000200160009055905550505050565b600061288083610e74565b6001600160a01b039093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b8151156128c95781518083602001fd5b8060405162461bcd60e51b8152600401610ac29190612966565b6001600160e01b0319811681146108ea57600080fd5b60006020828403121561290b57600080fd5b813561142c816128e3565b60005b83811015612931578181015183820152602001612919565b50506000910152565b60008151808452612952816020860160208601612916565b601f01601f19169290920160200192915050565b60208152600061142c602083018461293a565b60006020828403121561298b57600080fd5b5035919050565b6001600160a01b03811681146108ea57600080fd5b80356129b281612992565b919050565b600080604083850312156129ca57600080fd5b82356129d581612992565b946020939093013593505050565b803580151581146129b257600080fd5b600060208284031215612a0557600080fd5b61142c826129e3565b600080600060608486031215612a2357600080fd5b8335612a2e81612992565b92506020840135612a3e81612992565b929592945050506040919091013590565b60008083601f840112612a6157600080fd5b5081356001600160401b03811115612a7857600080fd5b60208301915083602082850101111561208d57600080fd5b60008060008060008060a08789031215612aa957600080fd5b863595506020870135612abb81612992565b9450604087013593506060870135925060808701356001600160401b03811115612ae457600080fd5b612af089828a01612a4f565b979a9699509497509295939492505050565b600060208284031215612b1457600080fd5b813561142c81612992565b60008060208385031215612b3257600080fd5b82356001600160401b03811115612b4857600080fd5b612b5485828601612a4f565b90969095509350505050565b60008083601f840112612b7257600080fd5b5081356001600160401b03811115612b8957600080fd5b6020830191508360208260051b850101111561208d57600080fd5b60008060008060008060808789031215612bbd57600080fd5b86356001600160401b0380821115612bd457600080fd5b612be08a838b01612b60565b909850965060208901359550604089013594506060890135915080821115612c0757600080fd5b50612af089828a01612a4f565b60008060408385031215612c2757600080fd5b8235612c3281612992565b9150612c40602084016129e3565b90509250929050565b60008060208385031215612c5c57600080fd5b82356001600160401b03811115612c7257600080fd5b612b5485828601612b60565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015612cd357603f19888603018452612cc185835161293a565b94509285019290850190600101612ca5565b5092979650505050505050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612d1957612d19612ce0565b60405290565b60006001600160401b0380841115612d3957612d39612ce0565b604051601f8501601f19908116603f01168101908282118183101715612d6157612d61612ce0565b81604052809350858152868686011115612d7a57600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215612daa57600080fd5b8435612db581612992565b93506020850135612dc581612992565b92506040850135915060608501356001600160401b03811115612de757600080fd5b8501601f81018713612df857600080fd5b612e0787823560208401612d1f565b91505092959194509250565b600082601f830112612e2457600080fd5b61142c83833560208501612d1f565b60008060408385031215612e4657600080fd5b82356001600160401b0380821115612e5d57600080fd5b908401906101208287031215612e7257600080fd5b612e7a612cf6565b823582811115612e8957600080fd5b612e9588828601612e13565b825250602083013582811115612eaa57600080fd5b612eb688828601612e13565b602083015250604083013582811115612ece57600080fd5b612eda88828601612e13565b604083015250612eec606084016129a7565b6060820152612efd608084016129a7565b608082015260a083013560a0820152612f1860c084016129e3565b60c082015260e083810135908201526101009283013592810192909252509150612c40602084016129a7565b60008060408385031215612f5757600080fd5b8235612f6281612992565b91506020830135612f7281612992565b809150509250929050565b600181811c90821680612f9157607f821691505b602082108103612fb157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561077157610771612fb7565b60008060408385031215612ff357600080fd5b825191506020830151612f7281612992565b8082018082111561077157610771612fb7565b808202811582820484141761077157610771612fb7565b634e487b7160e01b600052603260045260246000fd5b601f82111561091c57600081815260208120601f850160051c8101602086101561306c5750805b601f850160051c820191505b8181101561308b57828155600101613078565b505050505050565b6001600160401b038311156130aa576130aa612ce0565b6130be836130b88354612f7d565b83613045565b6000601f8411600181146130f257600085156130da5750838201355b600019600387901b1c1916600186901b1783556125a5565b600083815260209020601f19861690835b828110156131235786850135825560209485019460019092019101613103565b50868210156131405760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6000808335601e1984360301811261316957600080fd5b8301803591506001600160401b0382111561318357600080fd5b60200191503681900382131561208d57600080fd5b8284823760008382016000815283516131b5818360208801612916565b0195945050505050565b6000600182016131d1576131d1612fb7565b5060010190565b66697066733a2f2f60c81b815260006007600084546131f681612f7d565b6001828116801561320e576001811461322757612cd3565b60ff198416888701528215158302880186019450612cd3565b8860005260208060002060005b8581101561324f5781548b82018a0152908401908201613234565b50505050950190920195945050505050565b81516001600160401b0381111561327a5761327a612ce0565b61328e816132888454612f7d565b84613045565b602080601f8311600181146132c357600084156132ab5750858301515b600019600386901b1c1916600185901b17855561308b565b600085815260208120601f198616915b828110156132f2578886015182559484019460019091019084016132d3565b50858210156133105787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b60006020828403121561337f57600080fd5b815161142c81612992565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000825161347e818460208701612916565b9190910192915050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090611fba9083018461293a565b6000602082840312156134e357600080fd5b815161142c816128e3565b634e487b7160e01b600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e82010764ec14d4b6cd6d7285f5dbc08fcdcb59073195aacdf4e8170cbf11ff664736f6c63430008130033