[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminRevoked", "type": "event" }, { "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": false, "internalType": "address", "name": "extension", "type": "address" } ], "name": "ApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "DefaultRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ExtensionApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "ExtensionRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "permissions", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "MintPermissionsUpdated", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "RoyaltiesUpdated", "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": "VERSION", "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": "admin", "type": "address" } ], "name": "approveAdmin", "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": "address", "name": "extension", "type": "address" } ], "name": "blacklistExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAdmins", "outputs": [ { "internalType": "address[]", "name": "admins", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getApproveTransfer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "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": "getExtensions", "outputs": [ { "internalType": "address[]", "name": "extensions", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeBps", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeRecipients", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFees", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80", "name": "data", "type": "uint80" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80[]", "name": "data", "type": "uint80[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "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": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bool", "name": "baseURIIdentical", "type": "bool" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "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": "address", "name": "extension", "type": "address" } ], "name": "setApproveTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setApproveTransferExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "bool", "name": "identical", "type": "bool" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address", "name": "permissions", "type": "address" } ], "name": "setMintPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyaltiesExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefixExtension", "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": "tokenId", "type": "uint256" } ], "name": "tokenData", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenExtension", "outputs": [ { "internalType": "address", "name": "extension", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [ { "internalType": "address", "name": "extension", "type": "address" } ], "name": "unregisterExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526000600a553480156200001657600080fd5b506040516200565b3803806200565b833981016040819052620000399162000187565b8181620000463362000072565b60018055600462000058838262000280565b50600562000067828262000280565b50505050506200034c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620000ea57600080fd5b81516001600160401b0380821115620001075762000107620000c2565b604051601f8301601f19908116603f01168101908282118183101715620001325762000132620000c2565b816040528381526020925086838588010111156200014f57600080fd5b600091505b8382101562000173578582018301518183018401529082019062000154565b600093810190920192909252949350505050565b600080604083850312156200019b57600080fd5b82516001600160401b0380821115620001b357600080fd5b620001c186838701620000d8565b93506020850151915080821115620001d857600080fd5b50620001e785828601620000d8565b9150509250929050565b600181811c908216806200020657607f821691505b6020821081036200022757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027b57600081815260208120601f850160051c81016020861015620002565750805b601f850160051c820191505b81811015620002775782815560010162000262565b5050505b505050565b81516001600160401b038111156200029c576200029c620000c2565b620002b481620002ad8454620001f1565b846200022d565b602080601f831160018114620002ec5760008415620002d35750858301515b600019600386901b1c1916600185901b17855562000277565b600085815260208120601f198616915b828110156200031d57888601518255948401946001909101908401620002fc565b50858210156200033c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6152ff806200035c6000396000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806370a08231116101e9578063b4b5b48f1161010f578063d5a06d4c116100ad578063f0cdc4991161007c578063f0cdc4991461085f578063f2fde38b14610872578063fe2e1f5814610885578063ffa1ad741461089857600080fd5b8063d5a06d4c146107cc578063e00aab4b14610826578063e92a89f614610839578063e985e9c51461084c57600080fd5b8063bb3bafd6116100e9578063bb3bafd6146107cc578063c87b56dd146107ed578063ce8aee9d14610800578063d39737191461081357600080fd5b8063b4b5b48f14610748578063b88d4fde14610799578063b9c4d9fb146107ac57600080fd5b80638da5cb5b11610187578063aafb2d4411610156578063aafb2d44146106fc578063ac0c8cfa1461070f578063ad2d0ddd14610722578063b0fe87c91461073557600080fd5b80638da5cb5b146106bd57806395d89b41146106ce57806399e0dd7c146106d6578063a22cb465146106e957600080fd5b80637884af44116101c35780637884af441461067c5780637aa15f161461068f57806382dcc0c8146106a257806383b7db63146106b557600080fd5b806370a082311461064e578063715018a61461066157806372ff03d31461066957600080fd5b806330176e13116102ce5780634278330e1161026c57806361e5bc6b1161023b57806361e5bc6b146106025780636352211e1461061557806366d1e9d0146106285780636d73e6691461063b57600080fd5b80634278330e146105b657806342842e0e146105c957806342966c68146105dc578063596798ad146105ef57600080fd5b8063332dd1ae116102a8578063332dd1ae1461056a57806338e52e781461057d5780633e6134b8146105905780633f0f37f6146105a357600080fd5b806330176e131461052f5780633071a0f91461054257806331ae450b1461055557600080fd5b806320e4afe21161034657806324d7806c1161031557806324d7806c146104b65780632928ca58146104c95780632a55205a146104ea5780632d3456701461051c57600080fd5b806320e4afe21461046c57806322f374d01461047f578063239be3171461049057806323b872dd146104a357600080fd5b8063081812fc11610382578063081812fc146103fb578063095ea7b3146104265780630ebd4c7f14610439578063162094c41461045957600080fd5b806301ffc9a7146103a957806302e7afb7146103d157806306fdde03146103e6575b600080fd5b6103bc6103b73660046142c2565b6108a0565b60405190151581526020015b60405180910390f35b6103e46103df3660046142f4565b6108cf565b005b6103ee61092e565b6040516103c89190614361565b61040e610409366004614374565b6109c0565b6040516001600160a01b0390911681526020016103c8565b6103e461043436600461438d565b6109e7565b61044c610447366004614374565b610afc565b6040516103c891906143f4565b6103e4610467366004614448565b610b2c565b6103e461047a3660046144d7565b610b81565b600b546001600160a01b031661040e565b61040e61049e366004614374565b610c04565b6103e46104b1366004614550565b610cb2565b6103bc6104c43660046142f4565b610ce3565b6104dc6104d73660046142f4565b610d1c565b6040519081526020016103c8565b6104fd6104f8366004614591565b610d55565b604080516001600160a01b0390931683526020830191909152016103c8565b6103e461052a3660046142f4565b610d93565b6103e461053d3660046145b3565b610df0565b6103e46105503660046145f4565b610e44565b61055d610ea4565b6040516103c8919061462f565b6103e461057836600461467c565b610f52565b61044c61058b3660046146e7565b610fb0565b6103e461059e3660046145b3565b6110e3565b6103e46105b136600461473c565b6110f7565b61044c6105c43660046146e7565b611156565b6103e46105d7366004614550565b61124f565b6103e46105ea366004614374565b61126a565b6103e46105fd3660046142f4565b611301565b6103e461061036600461467c565b611354565b61040e610623366004614374565b6113d3565b6103e46106363660046145b3565b611433565b6103e46106493660046142f4565b611445565b6104dc61065c3660046142f4565b61149d565b6103e4611523565b6104dc6106773660046142f4565b611537565b6104dc61068a3660046145f4565b6115a6565b61044c61069d3660046146e7565b611645565b6103e46106b03660046147a3565b6117a9565b61055d6117bc565b6000546001600160a01b031661040e565b6103ee61185c565b6103e46106e43660046145b3565b61186b565b6103e46106f73660046147f9565b6118bf565b6103e461070a36600461467c565b6118ca565b6103e461071d366004614832565b61198b565b61044c61073036600461484f565b61199d565b6103e4610743366004614884565b611ac7565b61077e610756366004614374565b600090815260066020526040902054600160a01b900460101c69ffffffffffffffffffff1690565b60405169ffffffffffffffffffff90911681526020016103c8565b6103e46107a7366004614930565b611b1e565b6107bf6107ba366004614374565b611b50565b6040516103c89190614a17565b6107df6107da366004614374565b611b80565b6040516103c8929190614a2a565b6103ee6107fb366004614374565b611bba565b6103e461080e3660046142f4565b611bea565b6104dc610821366004614a72565b611c3d565b61044c61083436600461484f565b611c76565b6103e4610847366004614448565b611d55565b6103bc61085a366004614aa7565b611d68565b6103e461086d366004614aa7565b611d96565b6103e46108803660046142f4565b611dea565b6104dc6108933660046145f4565b611e60565b6104dc600381565b60006108ab82611eb4565b806108ba57506108ba82611ef4565b806108c957506108c982611f2f565b92915050565b336108e26000546001600160a01b031690565b6001600160a01b031614806108fd57506108fd600233611f64565b6109225760405162461bcd60e51b815260040161091990614ad5565b60405180910390fd5b61092b81611f86565b50565b60606004805461093d90614b19565b80601f016020809104026020016040519081016040528092919081815260200182805461096990614b19565b80156109b65780601f1061098b576101008083540402835291602001916109b6565b820191906000526020600020905b81548152906001019060200180831161099957829003601f168201915b5050505050905090565b60006109cb82612096565b506000908152600860205260409020546001600160a01b031690565b60006109f2826113d3565b9050806001600160a01b0316836001600160a01b031603610a5f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610919565b336001600160a01b0382161480610a7b5750610a7b8133611d68565b610aed5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610919565b610af783836120e6565b505050565b6060610b0782612154565b610b235760405162461bcd60e51b815260040161091990614b4d565b6108c982612171565b33610b3f6000546001600160a01b031690565b6001600160a01b03161480610b5a5750610b5a600233611f64565b610b765760405162461bcd60e51b815260040161091990614ad5565b610af783838361217c565b33610b946000546001600160a01b031690565b6001600160a01b03161480610baf5750610baf600233611f64565b610bcb5760405162461bcd60e51b815260040161091990614ad5565b610bd485612154565b610bf05760405162461bcd60e51b815260040161091990614b4d565b610bfd8585858585612200565b5050505050565b6000610c0f82612154565b610c2b5760405162461bcd60e51b815260040161091990614b4d565b610c3482612287565b90506001600160a01b038116610c855760405162461bcd60e51b815260206004820152601660248201527527379032bc3a32b739b4b7b7103337b9103a37b5b2b760511b6044820152606401610919565b610c90600e82611f64565b15610cad5760405162461bcd60e51b815260040161091990614b78565b919050565b610cbc33826122dd565b610cd85760405162461bcd60e51b815260040161091990614ba7565b610af783838361233c565b6000816001600160a01b0316610d016000546001600160a01b031690565b6001600160a01b031614806108c957506108c9600283611f64565b6000610d266124db565b610d2e612534565b610d4a826040518060200160405280600081525060008061258b565b9050610cad60018055565b600080610d6184612154565b610d7d5760405162461bcd60e51b815260040161091990614b4d565b610d878484612614565b915091505b9250929050565b610d9b6126eb565b610da6600282611f64565b1561092b5760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a3610dec600282612745565b5050565b33610e036000546001600160a01b031690565b6001600160a01b03161480610e1e5750610e1e600233611f64565b610e3a5760405162461bcd60e51b815260040161091990614ad5565b610dec828261275a565b33610e576000546001600160a01b031690565b6001600160a01b03161480610e725750610e72600233611f64565b610e8e5760405162461bcd60e51b815260040161091990614ad5565b610e978361278f565b610af783838360006127b7565b6060610eb060026128b4565b6001600160401b03811115610ec757610ec76148c3565b604051908082528060200260200182016040528015610ef0578160200160208202803683370190505b50905060005b610f0060026128b4565b811015610f4e57610f126002826128be565b828281518110610f2457610f24614bf4565b6001600160a01b039092166020928302919091019091015280610f4681614c20565b915050610ef6565b5090565b33610f656000546001600160a01b031690565b6001600160a01b03161480610f805750610f80600233611f64565b610f9c5760405162461bcd60e51b815260040161091990614ad5565b610faa6000858585856128ca565b50505050565b6060610fba6124db565b610fc2612534565b816001600160401b03811115610fda57610fda6148c3565b604051908082528060200260200182016040528015611003578160200160208202803683370190505b5090506000600a5460016110179190614c39565b905083839050600a600082825461102e9190614c39565b90915550600090505b838110156110d1576110ac8686868481811061105557611055614bf4565b90506020028101906110679190614c4c565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506110a7915086905087614c39565b61258b565b8382815181106110be576110be614bf4565b6020908102919091010152600101611037565b50506110dc60018055565b9392505050565b6110eb612534565b610dec828260006129b7565b3361110a6000546001600160a01b031690565b6001600160a01b031614806111255750611125600233611f64565b6111415760405162461bcd60e51b815260040161091990614ad5565b61114a8461278f565b610faa848484846127b7565b60606111606124db565b611168612534565b816001600160401b03811115611180576111806148c3565b6040519080825280602002602001820160405280156111a9578160200160208202803683370190505b5090506000600a5460016111bd9190614c39565b905083839050600a60008282546111d49190614c39565b90915550600090505b838110156110d15761122a866040518060200160405280600081525087878581811061120b5761120b614bf4565b90506020020160208101906112209190614c92565b6110a78587614c39565b83828151811061123c5761123c614bf4565b60209081029190910101526001016111dd565b610af783838360405180602001604052806000815250611b1e565b6112726124db565b61127c33826122dd565b6112c85760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220617070726f766564006044820152606401610919565b60006112d3826113d3565b905060006112e083612287565b90506112eb836129f4565b6112f6828483612aae565b505061092b60018055565b336113146000546001600160a01b031690565b6001600160a01b0316148061132f575061132f600233611f64565b61134b5760405162461bcd60e51b815260040161091990614ad5565b61092b81612b6d565b61135c612534565b82811461137b5760405162461bcd60e51b815260040161091990614cad565b60005b83811015610bfd576113cb85858381811061139b5761139b614bf4565b905060200201358484848181106113b4576113b4614bf4565b90506020028101906113c69190614c4c565b612bc1565b60010161137e565b6000818152600660205260408120546001600160a01b0316806108c95760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610919565b61143b612534565b610dec8282612bcb565b61144d6126eb565b611458600282611f64565b61092b5760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a3610dec600282612be5565b60006001600160a01b0382166115075760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610919565b506001600160a01b031660009081526007602052604090205490565b61152b6126eb565b6115356000612bfa565b565b60006115416124db565b336115546000546001600160a01b031690565b6001600160a01b0316148061156f575061156f600233611f64565b61158b5760405162461bcd60e51b815260040161091990614ad5565b610d4a82604051806020016040528060008152506000612c4a565b60006115b06124db565b336115c36000546001600160a01b031690565b6001600160a01b031614806115de57506115de600233611f64565b6115fa5760405162461bcd60e51b815260040161091990614ad5565b61163a8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250612c4a915050565b90506110dc60018055565b606061164f6124db565b336116626000546001600160a01b031690565b6001600160a01b0316148061167d575061167d600233611f64565b6116995760405162461bcd60e51b815260040161091990614ad5565b816001600160401b038111156116b1576116b16148c3565b6040519080825280602002602001820160405280156116da578160200160208202803683370190505b5090506000600a5460016116ee9190614c39565b905083839050600a60008282546117059190614c39565b90915550600090505b838110156110d1576117848686868481811061172c5761172c614bf4565b905060200281019061173e9190614c4c565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177f9250869150879050614c39565b612c4a565b83828151811061179657611796614bf4565b602090810291909101015260010161170e565b6117b1612534565b610af78383836129b7565b60606117c8600c6128b4565b6001600160401b038111156117df576117df6148c3565b604051908082528060200260200182016040528015611808578160200160208202803683370190505b50905060005b611818600c6128b4565b811015610f4e5761182a600c826128be565b82828151811061183c5761183c614bf4565b6001600160a01b039092166020928302919091019091015260010161180e565b60606005805461093d90614b19565b3361187e6000546001600160a01b031690565b6001600160a01b031614806118995750611899600233611f64565b6118b55760405162461bcd60e51b815260040161091990614ad5565b610dec8282612ca1565b610dec338383612cd6565b336118dd6000546001600160a01b031690565b6001600160a01b031614806118f857506118f8600233611f64565b6119145760405162461bcd60e51b815260040161091990614ad5565b8281146119335760405162461bcd60e51b815260040161091990614cad565b60005b83811015610bfd5761198385858381811061195357611953614bf4565b9050602002013584848481811061196c5761196c614bf4565b905060200281019061197e9190614c4c565b61217c565b600101611936565b611993612534565b61092b3382612da4565b60606119a76124db565b336119ba6000546001600160a01b031690565b6001600160a01b031614806119d557506119d5600233611f64565b6119f15760405162461bcd60e51b815260040161091990614ad5565b8161ffff166001600160401b03811115611a0d57611a0d6148c3565b604051908082528060200260200182016040528015611a36578160200160208202803683370190505b5090506000600a546001611a4a9190614c39565b90508261ffff16600a6000828254611a629190614c39565b90915550600090505b8361ffff16811015611abc57611a978560405180602001604052806000815250838561177f9190614c39565b838281518110611aa957611aa9614bf4565b6020908102919091010152600101611a6b565b50506108c960018055565b33611ada6000546001600160a01b031690565b6001600160a01b03161480611af55750611af5600233611f64565b611b115760405162461bcd60e51b815260040161091990614ad5565b610bfd85858585856128ca565b611b2833836122dd565b611b445760405162461bcd60e51b815260040161091990614ba7565b610faa84848484612e19565b6060611b5b82612154565b611b775760405162461bcd60e51b815260040161091990614b4d565b6108c982612e4c565b606080611b8c83612154565b611ba85760405162461bcd60e51b815260040161091990614b4d565b611bb183612e53565b91509150915091565b6060611bc582612154565b611be15760405162461bcd60e51b815260040161091990614b4d565b6108c982613201565b33611bfd6000546001600160a01b031690565b6001600160a01b03161480611c185750611c18600233611f64565b611c345760405162461bcd60e51b815260040161091990614ad5565b61092b816134bd565b6000611c476124db565b611c4f612534565b611c6b836040518060200160405280600081525084600061258b565b90506108c960018055565b6060611c806124db565b611c88612534565b8161ffff166001600160401b03811115611ca457611ca46148c3565b604051908082528060200260200182016040528015611ccd578160200160208202803683370190505b5090506000600a546001611ce19190614c39565b90508261ffff16600a6000828254611cf99190614c39565b90915550600090505b8361ffff16811015611abc57611d308560405180602001604052806000815250600084866110a79190614c39565b838281518110611d4257611d42614bf4565b6020908102919091010152600101611d02565b611d5d612534565b610af7838383612bc1565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b33611da96000546001600160a01b031690565b6001600160a01b03161480611dc45750611dc4600233611f64565b611de05760405162461bcd60e51b815260040161091990614ad5565b610dec82826134fe565b611df26126eb565b6001600160a01b038116611e575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610919565b61092b81612bfa565b6000611e6a6124db565b611e72612534565b61163a8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925082915061258b9050565b60006001600160e01b0319821663b5d2729f60e01b1480611ee557506001600160e01b03198216639088c20760e01b145b806108c957506108c982613633565b60006001600160e01b031982166380ac58cd60e01b14806108ba57506001600160e01b03198216635b5e139f60e01b14806108c957506108c9825b60006001600160e01b03198216632a9f3abf60e11b14806108c957506301ffc9a760e01b6001600160e01b03198316146108c9565b6001600160a01b038116600090815260018301602052604081205415156110dc565b6001600160a01b03811615801590611fa757506001600160a01b0381163014155b611ff35760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610919565b611ffe600c82611f64565b156120465760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3612044600c82612745565b505b612051600e82611f64565b61092b5760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a3610dec600e82612be5565b61209f81612154565b61092b5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610919565b600081815260086020526040902080546001600160a01b0319166001600160a01b038416908117909155819061211b826113d3565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000908152600660205260409020546001600160a01b0316151590565b60606110dc82612e53565b60008311801561218e5750600a548311155b80156121ab575060006121a084612287565b6001600160a01b0316145b6121e75760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610919565b6000838152601360205260409020610faa828483614d1a565b61220c848484846136e4565b600085815260156020526040812061222391614220565b61224284848484601560008b815260200190815260200160002061378f565b847fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee858585856040516122789493929190614dd9565b60405180910390a25050505050565b600081815260066020526040812054600160a01b90046001600160601b0381169061ffff1682036122bb5750600092915050565b61ffff166000908152601a60205260409020546001600160a01b031692915050565b6000806122e9836113d3565b9050806001600160a01b0316846001600160a01b0316148061231057506123108185611d68565b806123345750836001600160a01b0316612329846109c0565b6001600160a01b0316145b949350505050565b6000818152600660209081526040918290208251808401909352546001600160a01b03808216808552600160a01b9092046001600160601b03169284019290925290851681146123dc5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610919565b6001600160a01b03841661243e5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610919565b602082015161244f8686868461384a565b61245a6000856120e6565b6001600160a01b038087166000818152600760209081526040808320805460001901905593891680835284832080546001019055888352600690915283822080546001600160a01b031916821790559251879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45b505050505050565b60026001540361252d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610919565b6002600155565b61253f600c33611f64565b6115355760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265207265676973746572656420657874656e73696f6e000000006044820152606401610919565b6000816000036125ae57600a600081546125a490614c20565b90915550600a5491505b6125b88583613856565b336000908152601960205260409020546125eb908690849061ffff16601087901b69ffffffffffffffff000016176138ea565b83511561260c57600082815260136020526040902061260a8582614e57565b505b509392505050565b60008060008061262386612e53565b915091506001825111156126795760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610919565b815160000361269057306000935093505050610d8c565b816000815181106126a3576126a3614bf4565b602002602001015161271086836000815181106126c2576126c2614bf4565b60200260200101516126d49190614f16565b6126de9190614f2d565b9350935050509250929050565b6000546001600160a01b031633146115355760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610919565b60006110dc836001600160a01b038416613905565b6000805260106020527f6e0956cda88cad152e89927e53611735b61a5c762d1428573c6931b0a5efcb01610af7828483614d1a565b61279a600e82611f64565b1561092b5760405162461bcd60e51b815260040161091990614b78565b60185461ffff908116106128035760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e7920657874656e73696f6e7360681b6044820152606401610919565b6001600160a01b03841660009081526019602052604081205461ffff1690036128a8576018805460009061283a9061ffff16614f4f565b82546101009290920a61ffff818102199093169183160217909155601880546001600160a01b0387166000818152601960209081526040808320805495881661ffff199096169590951790945593549094168452601a90925290912080546001600160a01b03191690911790555b610faa848484846139f8565b60006108c9825490565b60006110dc8383613ae5565b6128d6848484846136e4565b6001600160a01b03851660009081526014602052604081206128f791614220565b61292884848484601460008b6001600160a01b03166001600160a01b0316815260200190815260200160002061378f565b6001600160a01b038516612978577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b8484848460405161296b9493929190614dd9565b60405180910390a1610bfd565b846001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f858585856040516122789493929190614dd9565b3360009081526010602052604090206129d1838583614d1a565b50336000908152601160205260409020805460ff19169115159190911790555050565b60008181526006602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b03169282018390529092909190612a44908390868461384a565b612a4f6000856120e6565b6001600160a01b038216600081815260076020908152604080832080546000190190558783526006909152808220829055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4610faa565b6001600160a01b03811615612b3657612ace816311686e4b60e21b613b0f565b15612b36576040516311686e4b60e21b81526001600160a01b038481166004830152602482018490528216906345a1b92c90604401600060405180830381600087803b158015612b1d57600080fd5b505af1158015612b31573d6000803e3d6000fd5b505050505b60008281526013602052604090208054612b4f90614b19565b159050610af7576000828152601360205260408120610af79161423e565b600b80546001600160a01b0319166001600160a01b0383169081179091556040519081527f959c0e47a2fe3cf01e237ba4892e2cc3194d77cbfb33e434e40873225d6b595f9060200160405180910390a150565b336121a084612287565b336000908152601260205260409020610af7828483614d1a565b60006110dc836001600160a01b038416613b2b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081600003612c6d57600a60008154612c6390614c20565b90915550600a5491505b612c79848360006138ea565b825115612c9a576000828152601360205260409020612c988482614e57565b505b5092915050565b6000805260126020527f7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7b610af7828483614d1a565b816001600160a01b0316836001600160a01b031603612d375760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610919565b6001600160a01b03838116600081815260096020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612db5826345ffcdad60e01b613b0f565b15610dec576001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a25050565b612e2484848461233c565b612e3084848484613b7a565b610faa5760405162461bcd60e51b815260040161091990614f70565b6060612c9a825b606080600060156000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b82821015612ed557600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101612e8b565b5050505090508051600003613022576000612eef85612287565b90506001600160a01b0381161561302057612f1181634e53ee3d60e11b613b0f565b15612f9c57604051634e53ee3d60e11b8152306004820152602481018690526001600160a01b03821690639ca7dc7a90604401600060405180830381865afa158015612f61573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612f89919081019061504b565b8151919550935015612f9c575050915091565b6001600160a01b038116600090815260146020908152604080832080548251818502810185019093528083529193909284015b8282101561301957600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101612fcf565b5050505091505b505b80516000036130c5576000808052601460209081527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c8054604080518285028101850190915281815293919290919084015b828210156130be57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613074565b5050505090505b8051156131fb5780516001600160401b038111156130e5576130e56148c3565b60405190808252806020026020018201604052801561310e578160200160208202803683370190505b50925080516001600160401b0381111561312a5761312a6148c3565b604051908082528060200260200182016040528015613153578160200160208202803683370190505b50915060005b81518110156131f95781818151811061317457613174614bf4565b60200260200101516000015184828151811061319257613192614bf4565b60200260200101906001600160a01b031690816001600160a01b0316815250508181815181106131c4576131c4614bf4565b60200260200101516020015161ffff168382815181106131e6576131e6614bf4565b6020908102919091010152600101613159565b505b50915091565b60606000821180156132155750600a548211155b6132515760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610919565b600061325c83612287565b9050613269600e82611f64565b156132865760405162461bcd60e51b815260040161091990614b78565b6000838152601360205260409020805461329f90614b19565b1590506133b9576001600160a01b038116600090815260126020526040902080546132c990614b19565b15905061331a576001600160a01b038116600090815260126020908152604080832086845260138352928190209051613303939201615182565b604051602081830303815290604052915050919050565b6000838152601360205260409020805461333390614b19565b80601f016020809104026020016040519081016040528092919081815260200182805461335f90614b19565b80156133ac5780601f10613381576101008083540402835291602001916133ac565b820191906000526020600020905b81548152906001019060200180831161338f57829003601f168201915b5050505050915050919050565b6133ca8163e9dc637560e01b613b0f565b156134425760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa15801561341a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110dc9190810190615197565b6001600160a01b03811660009081526011602052604090205460ff16613494576001600160a01b038116600090815260106020526040902061348384613c78565b604051602001613303929190615204565b6001600160a01b0381166000908152601060205260409020805461333390614b19565b50919050565b60405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a3610dec600c82612745565b613509600c83611f64565b6135555760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610919565b6001600160a01b0381161580613577575061357781631e05385b60e31b613b0f565b6135b55760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610919565b6001600160a01b03828116600090815260176020526040902054811690821614610dec576001600160a01b0382811660008181526017602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982166314d9799760e21b148061366457506001600160e01b031982166328f10a2160e01b145b80613673575061367382611ef4565b8061368e57506001600160e01b03198216635d9dd7eb60e11b145b806136a957506001600160e01b03198216632dde656160e21b145b806136c457506001600160e01b031982166335681b5360e21b145b806108c957506001600160e01b0319821663152a902d60e11b1492915050565b8281146137035760405162461bcd60e51b815260040161091990614cad565b6000805b8281101561373d5783838281811061372157613721614bf4565b90506020020135826137339190614c39565b9150600101613707565b506127108110610bfd5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f74616c20726f79616c746965730000000000000000006044820152606401610919565b60005b828110156124d3578160405180604001604052808888858181106137b8576137b8614bf4565b90506020020160208101906137cd91906142f4565b6001600160a01b031681526020018686858181106137ed576137ed614bf4565b61ffff602091820293909301358316909352508354600181810186556000958652948390208451910180549490930151909116600160a01b026001600160b01b03199093166001600160a01b039091161791909117905501613792565b610faa84848484613d0a565b336000908152601760205260409020546001600160a01b031615610dec573360008181526017602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401600060405180830381600087803b1580156138d657600080fd5b505af11580156124d3573d6000803e3d6000fd5b610af783838360405180602001604052806000815250613d45565b600081815260018301602052604081205480156139ee576000613929600183615229565b855490915060009061393d90600190615229565b90508181146139a257600086600001828154811061395d5761395d614bf4565b906000526020600020015490508087600001848154811061398057613980614bf4565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806139b3576139b361523c565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108c9565b60009150506108c9565b6001600160a01b0384163014801590613a1a57506001600160a01b0384163b15155b613a505760405162461bcd60e51b8152602060048201526007602482015266125b9d985b1a5960ca1b6044820152606401610919565b60405133906001600160a01b038616907fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a90600090a36001600160a01b0384166000908152601060205260409020613aa9838583614d1a565b506001600160a01b0384166000908152601160205260409020805460ff1916821515179055613ad9600c85612be5565b50610faa846001612da4565b6000826000018281548110613afc57613afc614bf4565b9060005260206000200154905092915050565b6000613b1a83613e94565b80156110dc57506110dc8383613ec7565b6000818152600183016020526040812054613b72575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556108c9565b5060006108c9565b60006001600160a01b0384163b15613c7057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613bbe903390899088908890600401615252565b6020604051808303816000875af1925050508015613bf9575060408051601f3d908101601f19168201909252613bf69181019061528f565b60015b613c56573d808015613c27576040519150601f19603f3d011682016040523d82523d6000602084013e613c2c565b606091505b508051600003613c4e5760405162461bcd60e51b815260040161091990614f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612334565b506001612334565b60606000613c8583613f50565b60010190506000816001600160401b03811115613ca457613ca46148c3565b6040519080825280601f01601f191660200182016040528015613cce576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613cd857509392505050565b6001600160a01b03841615610faa5761ffff81166000908152601a6020526040902054610faa908590859085906001600160a01b0316614028565b6001600160a01b038416613d9b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610919565b613da483612154565b15613df15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610919565b613dfe600085858561384a565b6001600160a01b03808516600081815260076020908152604080832080546001019055805180820182528481526001600160601b038089168285019081528a865260069094528285209151935116600160a01b02929095169190911790935591518592907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4612e306000858584613b7a565b6000613ea7826301ffc9a760e01b613ec7565b80156108c95750613ec0826001600160e01b0319613ec7565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180516001600160e01b03166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015613f39575060208210155b8015613f455750600081115b979650505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613f8f5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613fbb576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613fd957662386f26fc10000830492506010015b6305f5e1008310613ff1576305f5e100830492506008015b612710831061400557612710830492506004015b60648310614017576064830492506002015b600a83106108c95760010192915050565b6001600160a01b03841615610faa576001600160a01b0381161580159061406757506001600160a01b03811660009081526016602052604090205460ff165b1561413e57604051632f3537c560e11b81523360048201526001600160a01b038581166024830152848116604483015260648201849052821690635e6a6f8a906084016020604051808303816000875af11580156140c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140ed91906152ac565b6141395760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610919565b610faa565b600b546001600160a01b031615610faa57600b54604051632f3537c560e11b81523360048201526001600160a01b03868116602483015285811660448301526064820185905290911690635e6a6f8a906084016020604051808303816000875af11580156141b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d491906152ac565b610faa5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610919565b508054600082559060005260206000209081019061092b9190614278565b50805461424a90614b19565b6000825580601f1061425a575050565b601f01602090049060005260206000209081019061092b9190614297565b5b80821115610f4e5780546001600160b01b0319168155600101614279565b5b80821115610f4e5760008155600101614298565b6001600160e01b03198116811461092b57600080fd5b6000602082840312156142d457600080fd5b81356110dc816142ac565b6001600160a01b038116811461092b57600080fd5b60006020828403121561430657600080fd5b81356110dc816142df565b60005b8381101561432c578181015183820152602001614314565b50506000910152565b6000815180845261434d816020860160208601614311565b601f01601f19169290920160200192915050565b6020815260006110dc6020830184614335565b60006020828403121561438657600080fd5b5035919050565b600080604083850312156143a057600080fd5b82356143ab816142df565b946020939093013593505050565b600081518084526020808501945080840160005b838110156143e9578151875295820195908201906001016143cd565b509495945050505050565b6020815260006110dc60208301846143b9565b60008083601f84011261441957600080fd5b5081356001600160401b0381111561443057600080fd5b602083019150836020828501011115610d8c57600080fd5b60008060006040848603121561445d57600080fd5b8335925060208401356001600160401b0381111561447a57600080fd5b61448686828701614407565b9497909650939450505050565b60008083601f8401126144a557600080fd5b5081356001600160401b038111156144bc57600080fd5b6020830191508360208260051b8501011115610d8c57600080fd5b6000806000806000606086880312156144ef57600080fd5b8535945060208601356001600160401b038082111561450d57600080fd5b61451989838a01614493565b9096509450604088013591508082111561453257600080fd5b5061453f88828901614493565b969995985093965092949392505050565b60008060006060848603121561456557600080fd5b8335614570816142df565b92506020840135614580816142df565b929592945050506040919091013590565b600080604083850312156145a457600080fd5b50508035926020909101359150565b600080602083850312156145c657600080fd5b82356001600160401b038111156145dc57600080fd5b6145e885828601614407565b90969095509350505050565b60008060006040848603121561460957600080fd5b8335614614816142df565b925060208401356001600160401b0381111561447a57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156146705783516001600160a01b03168352928401929184019160010161464b565b50909695505050505050565b6000806000806040858703121561469257600080fd5b84356001600160401b03808211156146a957600080fd5b6146b588838901614493565b909650945060208701359150808211156146ce57600080fd5b506146db87828801614493565b95989497509550505050565b6000806000604084860312156146fc57600080fd5b8335614707816142df565b925060208401356001600160401b0381111561472257600080fd5b61448686828701614493565b801515811461092b57600080fd5b6000806000806060858703121561475257600080fd5b843561475d816142df565b935060208501356001600160401b0381111561477857600080fd5b61478487828801614407565b90945092505060408501356147988161472e565b939692955090935050565b6000806000604084860312156147b857600080fd5b83356001600160401b038111156147ce57600080fd5b6147da86828701614407565b90945092505060208401356147ee8161472e565b809150509250925092565b6000806040838503121561480c57600080fd5b8235614817816142df565b915060208301356148278161472e565b809150509250929050565b60006020828403121561484457600080fd5b81356110dc8161472e565b6000806040838503121561486257600080fd5b823561486d816142df565b9150602083013561ffff8116811461482757600080fd5b60008060008060006060868803121561489c57600080fd5b85356148a7816142df565b945060208601356001600160401b038082111561450d57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715614901576149016148c3565b604052919050565b60006001600160401b03821115614922576149226148c3565b50601f01601f191660200190565b6000806000806080858703121561494657600080fd5b8435614951816142df565b93506020850135614961816142df565b92506040850135915060608501356001600160401b0381111561498357600080fd5b8501601f8101871361499457600080fd5b80356149a76149a282614909565b6148d9565b8181528860208385010111156149bc57600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b600081518084526020808501945080840160005b838110156143e95781516001600160a01b0316875295820195908201906001016149f2565b6020815260006110dc60208301846149de565b604081526000614a3d60408301856149de565b8281036020840152614a4f81856143b9565b95945050505050565b803569ffffffffffffffffffff81168114610cad57600080fd5b60008060408385031215614a8557600080fd5b8235614a90816142df565b9150614a9e60208401614a58565b90509250929050565b60008060408385031215614aba57600080fd5b8235614ac5816142df565b91506020830135614827816142df565b60208082526024908201527f41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f7220616040820152633236b4b760e11b606082015260800190565b600181811c90821680614b2d57607f821691505b6020821081036134b757634e487b7160e01b600052602260045260246000fd5b6020808252601190820152702737b732bc34b9ba32b73a103a37b5b2b760791b604082015260600190565b602080825260159082015274115e1d195b9cda5bdb88189b1858dadb1a5cdd1959605a1b604082015260600190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060018201614c3257614c32614c0a565b5060010190565b808201808211156108c9576108c9614c0a565b6000808335601e19843603018112614c6357600080fd5b8301803591506001600160401b03821115614c7d57600080fd5b602001915036819003821315610d8c57600080fd5b600060208284031215614ca457600080fd5b6110dc82614a58565b6020808252600d908201526c125b9d985b1a59081a5b9c1d5d609a1b604082015260600190565b601f821115610af757600081815260208120601f850160051c81016020861015614cfb5750805b601f850160051c820191505b818110156124d357828155600101614d07565b6001600160401b03831115614d3157614d316148c3565b614d4583614d3f8354614b19565b83614cd4565b6000601f841160018114614d795760008515614d615750838201355b600019600387901b1c1916600186901b178355610bfd565b600083815260209020601f19861690835b82811015614daa5786850135825560209485019460019092019101614d8a565b5086821015614dc75760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b87811015614e1c578235614dff816142df565b6001600160a01b0316825260209283019290910190600101614dec565b5083810360208501528481526001600160fb1b03851115614e3c57600080fd5b8460051b915081866020830137016020019695505050505050565b81516001600160401b03811115614e7057614e706148c3565b614e8481614e7e8454614b19565b84614cd4565b602080601f831160018114614eb95760008415614ea15750858301515b600019600386901b1c1916600185901b1785556124d3565b600085815260208120601f198616915b82811015614ee857888601518255948401946001909101908401614ec9565b5085821015614f065787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176108c9576108c9614c0a565b600082614f4a57634e487b7160e01b600052601260045260246000fd5b500490565b600061ffff808316818103614f6657614f66614c0a565b6001019392505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006001600160401b03821115614fdb57614fdb6148c3565b5060051b60200190565b600082601f830112614ff657600080fd5b815160206150066149a283614fc2565b82815260059290921b8401810191818101908684111561502557600080fd5b8286015b848110156150405780518352918301918301615029565b509695505050505050565b6000806040838503121561505e57600080fd5b82516001600160401b038082111561507557600080fd5b818501915085601f83011261508957600080fd5b815160206150996149a283614fc2565b82815260059290921b840181019181810190898411156150b857600080fd5b948201945b838610156150df5785516150d0816142df565b825294820194908201906150bd565b918801519196509093505050808211156150f857600080fd5b5061510585828601614fe5565b9150509250929050565b6000815461511c81614b19565b60018281168015615134576001811461514957615178565b60ff1984168752821515830287019450615178565b8560005260208060002060005b8581101561516f5781548a820152908401908201615156565b50505082870194505b5050505092915050565b6000612334615191838661510f565b8461510f565b6000602082840312156151a957600080fd5b81516001600160401b038111156151bf57600080fd5b8201601f810184136151d057600080fd5b80516151de6149a282614909565b8181528560208385010111156151f357600080fd5b614a4f826020830160208601614311565b6000615210828561510f565b8351615220818360208801614311565b01949350505050565b818103818111156108c9576108c9614c0a565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061528590830184614335565b9695505050505050565b6000602082840312156152a157600080fd5b81516110dc816142ac565b6000602082840312156152be57600080fd5b81516110dc8161472e56fea2646970667358221220f727789966cdb2dda94f5f80368bd96ca3c8868ec05af0fcf0afb1dc043463a864736f6c634300081500330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000036c6663000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036c66630000000000000000000000000000000000000000000000000000000000