[ { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "ApproveToCaller", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "type": "error" }, { "inputs": [], "name": "FeeTransferFailed", "type": "error" }, { "inputs": [], "name": "MintERC2309QuantityExceedsLimit", "type": "error" }, { "inputs": [], "name": "MintToZeroAddress", "type": "error" }, { "inputs": [], "name": "MintZeroQuantity", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OwnerQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "OwnershipNotInitializedForExtraData", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToNonERC721ReceiverImplementer", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "URIQueryForNonexistentToken", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "fromTokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "toTokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" } ], "name": "ConsecutiveTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId_", "type": "uint256" } ], "name": "Minted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "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": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newCap", "type": "uint32" } ], "name": "adjustCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractVersion", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_splitMain", "type": "address" }, { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint32[]", "name": "percentAllocations", "type": "uint32[]" }, { "internalType": "uint32", "name": "distributorFee", "type": "uint32" } ], "name": "createSplit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "withdrawETH", "type": "uint256" }, { "internalType": "contract ERC20[]", "name": "tokens", "type": "address[]" }, { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint32[]", "name": "percentAllocations", "type": "uint32[]" }, { "internalType": "uint32", "name": "distributorFee", "type": "uint32" }, { "internalType": "address", "name": "distributorAddress", "type": "address" } ], "name": "distributeAndWithdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ERC20", "name": "token", "type": "address" }, { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint32[]", "name": "percentAllocations", "type": "uint32[]" }, { "internalType": "uint32", "name": "distributorFee", "type": "uint32" }, { "internalType": "address", "name": "distributorAddress", "type": "address" } ], "name": "distributeERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint32[]", "name": "percentAllocations", "type": "uint32[]" }, { "internalType": "uint32", "name": "distributorFee", "type": "uint32" }, { "internalType": "address", "name": "distributorAddress", "type": "address" } ], "name": "distributeETH", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "edition", "outputs": [ { "internalType": "bool", "name": "hasAdjustableCap", "type": "bool" }, { "internalType": "bool", "name": "isSoulbound", "type": "bool" }, { "internalType": "uint32", "name": "maxTokens", "type": "uint32" }, { "internalType": "uint32", "name": "maxTokenPurchase", "type": "uint32" }, { "internalType": "uint32", "name": "presaleStart", "type": "uint32" }, { "internalType": "uint32", "name": "presaleEnd", "type": "uint32" }, { "internalType": "uint32", "name": "saleStart", "type": "uint32" }, { "internalType": "uint32", "name": "saleEnd", "type": "uint32" }, { "internalType": "uint16", "name": "royaltyBPS", "type": "uint16" }, { "internalType": "uint96", "name": "tokenPrice", "type": "uint96" }, { "internalType": "address", "name": "payoutAddress", "type": "address" }, { "internalType": "bytes32", "name": "presaleMerkleRoot", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "flipSaleState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "hasAdjustableCap", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" }, { "components": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "symbol", "type": "string" }, { "internalType": "bool", "name": "hasAdjustableCap", "type": "bool" }, { "internalType": "bool", "name": "isSoulbound", "type": "bool" }, { "internalType": "uint32", "name": "maxTokens", "type": "uint32" }, { "internalType": "uint32", "name": "maxTokenPurchase", "type": "uint32" }, { "internalType": "uint32", "name": "presaleStart", "type": "uint32" }, { "internalType": "uint32", "name": "presaleEnd", "type": "uint32" }, { "internalType": "uint32", "name": "saleStart", "type": "uint32" }, { "internalType": "uint32", "name": "saleEnd", "type": "uint32" }, { "internalType": "uint16", "name": "royaltyBPS", "type": "uint16" }, { "internalType": "uint96", "name": "tokenPrice", "type": "uint96" }, { "internalType": "address", "name": "feeManager", "type": "address" }, { "internalType": "address", "name": "payoutAddress", "type": "address" }, { "internalType": "bytes32", "name": "presaleMerkleRoot", "type": "bytes32" } ], "internalType": "struct EditionConfig", "name": "_editionConfig", "type": "tuple" }, { "components": [ { "internalType": "string", "name": "contractURI", "type": "string" }, { "internalType": "string", "name": "metadataURI", "type": "string" }, { "internalType": "bytes", "name": "metadataRendererInit", "type": "bytes" }, { "internalType": "address", "name": "parentIP", "type": "address" } ], "internalType": "struct MetadataConfig", "name": "_metadataConfig", "type": "tuple" }, { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint88", "name": "minBalance", "type": "uint88" }, { "internalType": "enum SaleType", "name": "saleType", "type": "uint8" } ], "internalType": "struct TokenGateConfig", "name": "_tokenGateConfig", "type": "tuple" }, { "internalType": "address", "name": "_metadataRenderer", "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": [], "name": "isSoulbound", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxTokenPurchase", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metadataRenderer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "numberOfTokens", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintAirdrop", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mintFee", "outputs": [ { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "uint256", "name": "maxQuantity", "type": "uint256" }, { "internalType": "uint256", "name": "pricePerToken", "type": "uint256" }, { "internalType": "bytes32[]", "name": "merkleProof", "type": "bytes32[]" } ], "name": "mintPresale", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFilterRegistry", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "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": "parentIP", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "payoutAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "presaleEnd", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "presaleMerkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "presaleStart", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "numReserved", "type": "uint256" } ], "name": "reserveDCNT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyBPS", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "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": [], "name": "saleEnd", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "saleIsActive", "outputs": [ { "internalType": "bool", "name": "_saleIsActive", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "saleIsPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "saleStart", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_metadataRenderer", "type": "address" } ], "name": "setMetadataRenderer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_payoutAddress", "type": "address" } ], "name": "setPayoutAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_presaleMerkleRoot", "type": "bytes32" } ], "name": "setPresaleMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint88", "name": "minBalance", "type": "uint88" }, { "internalType": "enum SaleType", "name": "saleType", "type": "uint8" } ], "internalType": "struct TokenGateConfig", "name": "_tokenGateConfig", "type": "tuple" } ], "name": "setTokenGate", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "splitMain", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "splitWallet", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenGateConfig", "outputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint88", "name": "minBalance", "type": "uint88" }, { "internalType": "enum SaleType", "name": "saleType", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenPrice", "outputs": [ { "internalType": "uint96", "name": "", "type": "uint96" } ], "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": [ { "internalType": "uint256", "name": "transferETH", "type": "uint256" }, { "internalType": "contract ERC20[]", "name": "tokens", "type": "address[]" } ], "name": "transferToSplit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enable", "type": "bool" }, { "internalType": "address", "name": "operatorFilter", "type": "address" } ], "name": "updateOperatorFilter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newStart", "type": "uint32" }, { "internalType": "uint32", "name": "newEnd", "type": "uint32" } ], "name": "updatePresaleStartEnd", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "newStart", "type": "uint32" }, { "internalType": "uint32", "name": "newEnd", "type": "uint32" } ], "name": "updateSaleStartEnd", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b5060086200001f336200002e565b63ffffffff166080526200008a565b600a80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b608051615352620000a66000396000610b3901526153526000f3fe60806040526004361061041a5760003560e01c8063715018a61161021e578063c10b935811610123578063e985e9c5116100ab578063f2fde38b1161007a578063f2fde38b14610dfc578063f47c84c514610e1c578063f7eca6d014610e3d578063fd4fe8a814610e5a578063ff45640d14610e7a57600080fd5b8063e985e9c514610d5e578063eb8d244414610da7578063ed1f24ad14610dbc578063f0cc8b6214610ddc57600080fd5b8063d0fb0203116100f2578063d0fb020314610cc6578063d547741f14610ce6578063de8801e514610d06578063e6c350c114610d28578063e8a3d48514610d4957600080fd5b8063c10b935814610c44578063c4559d5a14610c66578063c595317014610c86578063c87b56dd14610ca657600080fd5b806395d89b41116101a6578063ab0bcc4111610175578063ab0bcc4114610b92578063b0ccc31e14610bb4578063b80476d014610bd6578063b88d4fde14610bf6578063b9c9d93a14610c1657600080fd5b806395d89b4114610b15578063a0a8e46014610b2a578063a217fddf14610b5d578063a22cb46514610b7257600080fd5b80638da5cb5b116101ed5780638da5cb5b1461097f5780638e98f86a146109a357806391d1485414610abd578063931cf0f414610add578063938e3d7b14610af557600080fd5b8063715018a61461090257806379ab7c8e146109175780637ff9b596146109375780638a35ace31461095f57600080fd5b80632d75fea61161032457806355f804b3116102ac5780636c0360eb1161027b5780636c0360eb1461086d5780636c1951ae1461088257806370319970146108a257806370a08231146108c2578063713b9787146108e257600080fd5b806355f804b3146107e8578063569c66c5146108085780635b8d02d7146108285780636352211e1461084d57600080fd5b806334918dfd116102f357806334918dfd1461076b57806336568abe146107805780633ccfd60b146107a057806340c10f19146107b557806342842e0e146107c857600080fd5b80632d75fea6146106eb5780632f2ff15d1461070b57806333ea3e6d1461072b57806333ea51a81461074b57600080fd5b806318160ddd116103a757806323b872dd1161037657806323b872dd1461061c578063248a9ca31461063c578063284a44a81461066c57806328d7b2761461068c5780632a55205a146106ac57600080fd5b806318160ddd146105765780631dbdedbd1461059957806322212e2b146105e5578063229f3e29146105fa57600080fd5b8063095ea7b3116103ee578063095ea7b3146104d057806309aa3dcf146104f05780630ad6c616146105235780630b8999f3146105435780630e769b2b1461055657600080fd5b80625f16fb1461041f57806301ffc9a71461044157806306fdde0314610476578063081812fc14610498575b600080fd5b34801561042b57600080fd5b5061043f61043a366004614068565b610e9a565b005b34801561044d57600080fd5b5061046161045c366004614125565b610f51565b60405190151581526020015b60405180910390f35b34801561048257600080fd5b5061048b610f9a565b60405161046d9190614192565b3480156104a457600080fd5b506104b86104b33660046141a5565b61102c565b6040516001600160a01b03909116815260200161046d565b3480156104dc57600080fd5b5061043f6104eb3660046141be565b611070565b3480156104fc57600080fd5b50600d54600160301b900463ffffffff165b60405163ffffffff909116815260200161046d565b34801561052f57600080fd5b5061043f61053e3660046141ea565b611089565b61043f61055136600461421d565b6110f0565b34801561056257600080fd5b50600b546104b8906001600160a01b031681565b34801561058257600080fd5b50600154600054035b60405190815260200161046d565b3480156105a557600080fd5b506009546105d6906001600160a01b03811690600160a01b81046001600160581b031690600160f81b900460ff1683565b60405161046d939291906142a5565b3480156105f157600080fd5b50600f5461058b565b34801561060657600080fd5b50600d54600160701b900463ffffffff1661050e565b34801561062857600080fd5b5061043f6106373660046142f0565b6115d8565b34801561064857600080fd5b5061058b6106573660046141a5565b60009081526008602052604090206001015490565b34801561067857600080fd5b5061043f610687366004614428565b61177e565b34801561069857600080fd5b5061043f6106a73660046141a5565b611815565b3480156106b857600080fd5b506106cc6106c73660046144fc565b611841565b604080516001600160a01b03909316835260208301919091520161046d565b3480156106f757600080fd5b5061043f610706366004614537565b61192c565b34801561071757600080fd5b5061043f610726366004614570565b611b39565b34801561073757600080fd5b5061043f610746366004614595565b611b5e565b34801561075757600080fd5b5061043f610766366004614626565b611c6b565b34801561077757600080fd5b5061043f611cba565b34801561078c57600080fd5b5061043f61079b366004614570565b611d02565b3480156107ac57600080fd5b5061043f611d80565b61043f6107c33660046141be565b611ec4565b3480156107d457600080fd5b5061043f6107e33660046142f0565b612368565b3480156107f457600080fd5b5061043f6108033660046146c0565b612383565b34801561081457600080fd5b5061043f610823366004614876565b6123b6565b34801561083457600080fd5b50600e54600160601b90046001600160a01b03166104b8565b34801561085957600080fd5b506104b86108683660046141a5565b6128e7565b34801561087957600080fd5b5061048b6128f2565b34801561088e57600080fd5b5061043f61089d3660046141a5565b612980565b3480156108ae57600080fd5b506012546104b8906001600160a01b031681565b3480156108ce57600080fd5b5061058b6108dd366004614626565b612a1b565b3480156108ee57600080fd5b50600c546104b8906001600160a01b031681565b34801561090e57600080fd5b5061043f612a69565b34801561092357600080fd5b5061043f610932366004614a41565b612a7d565b34801561094357600080fd5b50600e546040516001600160601b03909116815260200161046d565b34801561096b57600080fd5b5061058b61097a3660046141a5565b612af1565b34801561098b57600080fd5b50600a546201000090046001600160a01b03166104b8565b3480156109af57600080fd5b50600d54600e54600f54610a3a9260ff8082169361010083049091169262010000830463ffffffff90811693600160301b8104821693600160501b8204831693600160701b8304841693600160901b8404811693600160b01b810490911692600160d01b90910461ffff16916001600160601b03821691600160601b90046001600160a01b0316908c565b604080519c15158d529a151560208d015263ffffffff998a169a8c019a909a5296881660608b015294871660808a015292861660a089015290851660c088015290931660e086015261ffff9092166101008501526001600160601b039091166101208401526001600160a01b03166101408301526101608201526101800161046d565b348015610ac957600080fd5b50610461610ad8366004614570565b612b8d565b348015610ae957600080fd5b50600d5460ff16610461565b348015610b0157600080fd5b5061043f610b103660046146c0565b612bb8565b348015610b2157600080fd5b5061048b612beb565b348015610b3657600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061050e565b348015610b6957600080fd5b5061058b600081565b348015610b7e57600080fd5b5061043f610b8d366004614a7d565b612bfa565b348015610b9e57600080fd5b50600d54600160901b900463ffffffff1661050e565b348015610bc057600080fd5b506104b86daaeb6d7670e522a718067333cd4e81565b348015610be257600080fd5b5061043f610bf1366004614aab565b612c0e565b348015610c0257600080fd5b5061043f610c11366004614ac6565b612d0d565b348015610c2257600080fd5b50600d54600160d01b900461ffff1660405161ffff909116815260200161046d565b348015610c5057600080fd5b50600d54600160b01b900463ffffffff1661050e565b348015610c7257600080fd5b5061043f610c81366004614b31565b612d57565b348015610c9257600080fd5b5061043f610ca1366004614bc4565b612e01565b348015610cb257600080fd5b5061048b610cc13660046141a5565b612f20565b348015610cd257600080fd5b506014546104b8906001600160a01b031681565b348015610cf257600080fd5b5061043f610d01366004614570565b612fd3565b348015610d1257600080fd5b50600d54600160501b900463ffffffff1661050e565b348015610d3457600080fd5b5060125461046190600160a01b900460ff1681565b348015610d5557600080fd5b5061048b612ff8565b348015610d6a57600080fd5b50610461610d79366004614c05565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b348015610db357600080fd5b50610461613098565b348015610dc857600080fd5b5061043f610dd73660046141ea565b6130e2565b348015610de857600080fd5b506013546104b8906001600160a01b031681565b348015610e0857600080fd5b5061043f610e17366004614626565b613149565b348015610e2857600080fd5b50600d5462010000900463ffffffff1661050e565b348015610e4957600080fd5b50600d54610100900460ff16610461565b348015610e6657600080fd5b5061043f610e75366004614626565b6131c2565b348015610e8657600080fd5b5061043f610e95366004614c23565b61320b565b600c546001600160a01b0316610ecb5760405162461bcd60e51b8152600401610ec290614c3b565b60405180910390fd5b610ed48761323f565b600b54600c54604051630ac0898160e11b81526001600160a01b0392831692631581130292610f16929116908b908b908b908b908b908b908b90600401614cec565b600060405180830381600087803b158015610f3057600080fd5b505af1158015610f44573d6000803e3d6000fd5b5050505050505050505050565b600063152a902d60e11b6001600160e01b031983161480610f765750610f7682613323565b80610f855750610f8582613358565b80610f945750610f9482613323565b92915050565b606060028054610fa990614d4e565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd590614d4e565b80156110225780601f10610ff757610100808354040283529160200191611022565b820191906000526020600020905b81548152906001019060200180831161100557829003601f168201915b5050505050905090565b6000611037826133a6565b611054576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b8161107a816133cd565b6110848383613486565b505050565b611094600033612b8d565b6110b05760405162461bcd60e51b8152600401610ec290614d82565b600d805467ffffffffffffffff60901b1916600160901b63ffffffff9485160263ffffffff60b01b191617600160b01b9290931691909102919091179055565b6009546001906001600160a01b03161580159061115957506000600954600160f81b900460ff1660028111156111285761112861428f565b1480611159575080801561115957506001600954600160f81b900460ff1660028111156111575761115761428f565b145b8061118a57508015801561118a57506002600954600160f81b900460ff1660028111156111885761118861428f565b145b15611256576009546040516370a0823160e01b8152336004820152600160a01b82046001600160581b0316916001600160a01b0316906370a08231906024016020604051808303816000875af11580156111e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120c9190614da5565b10156112565760405162461bcd60e51b81526020600482015260196024820152783237903737ba1037bbb7103932b8bab4b932b2103a37b5b2b760391b6044820152606401610ec2565b600d54600160501b900463ffffffff1642108015906112845750600d54600160701b900463ffffffff164211155b6112be5760405162461bcd60e51b815260206004820152600b60248201526a6e6f742070726573616c6560a81b6044820152606401610ec2565b600054601254600160a01b900460ff161561131b5760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e7400000000006044820152606401610ec2565b600d5462010000900463ffffffff166113348883614dd4565b11156113525760405162461bcd60e51b8152600401610ec290614de7565b6113d684848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600f546040516bffffffffffffffffffffffff1960608f901b166020820152603481018c9052605481018b9052909250607401905060405160208183030381529060405280519060200120613526565b6114115760405162461bcd60e51b815260206004820152600c60248201526b1b9bdd08185c1c1c9bdd995960a21b6044820152606401610ec2565b60145460009081906001600160a01b0316156114a057601454604051637096335b60e01b815260048101899052602481018b90526001600160a01b0390911690637096335b906044016040805180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a9190614e1c565b90925090505b6000826114ad8b8a614e40565b6114b79190614dd4565b9050803410156114fe5760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610ec2565b888a6115098d612a1b565b6115139190614dd4565b11156115535760405162461bcd60e51b815260206004820152600f60248201526e6d696e74656420746f6f206d616e7960881b6044820152606401610ec2565b61155d8b8b61353c565b61156f61156a8385614dd4565b613556565b60005b8a8110156115ca57604080516001600160a01b038e168152602081018790526001909601957f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a1600101611572565b505050505050505050505050565b60006115e38261363b565b9050836001600160a01b0316816001600160a01b0316146116165760405162a1148160e81b815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b03881690911417611663576116468633610d79565b61166357604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661168a57604051633a954ecd60e21b815260040160405180910390fd5b61169786868660016136a9565b80156116a257600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003611734576001840160008181526004602052604081205490036117325760005481146117325760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b600c546001600160a01b03166117a65760405162461bcd60e51b8152600401610ec290614c3b565b87156117ba576117ba868686868686612d57565b60005b87518110156117fe576117ee8882815181106117db576117db614e57565b6020026020010151888888888888610e9a565b6117f781614e6d565b90506117bd565b5061180a89898961372a565b505050505050505050565b611820600033612b8d565b61183c5760405162461bcd60e51b8152600401610ec290614d82565b600f55565b60008061184d846133a6565b61188d5760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610ec2565b600c546001600160a01b0316156118b157600c546001600160a01b031691506118f8565b600e54600160601b90046001600160a01b0316156118e357600e54600160601b90046001600160a01b031691506118f8565b600a546201000090046001600160a01b031691505b600d546000906127109061191790600160d01b900461ffff1686614e40565b6119219190614e86565b9150505b9250929050565b611937600033612b8d565b6119535760405162461bcd60e51b8152600401610ec290614d82565b60405163c3c5a54760e01b81523060048201819052906daaeb6d7670e522a718067333cd4e9063c3c5a547906024016020604051808303816000875af11580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614ea8565b1580156119cf5750825b15611a4957604051633e9f1edf60e11b81526001600160a01b038083166004830152831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b158015611a2c57600080fd5b505af1158015611a40573d6000803e3d6000fd5b50505050505050565b8215611a9157604051632cc5350560e21b81526001600160a01b038083166004830152831660248201526daaeb6d7670e522a718067333cd4e9063b314d41490604401611a12565b60405163034a0dc160e41b81526001600160a01b0382166004820152600060248201526daaeb6d7670e522a718067333cd4e906334a0dc1090604401600060405180830381600087803b158015611ae757600080fd5b505af1158015611afb573d6000803e3d6000fd5b5050604051631761612360e11b81526001600160a01b03841660048201526daaeb6d7670e522a718067333cd4e9250632ec2c2469150602401611a12565b600082815260086020526040902060010154611b548161375e565b6110848383613768565b611b666137ee565b600c546001600160a01b031615611bb75760405162461bcd60e51b815260206004820152601560248201527414dc1b1a5d08185b1c9958591e4818dc99585d1959605a1b6044820152606401610ec2565b600b80546001600160a01b0319166001600160a01b038816908117909155604051633b00fbc160e11b8152637601f78290611c0090889088908890889088903390600401614ec5565b6020604051808303816000875af1158015611c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c439190614f16565b600c80546001600160a01b0319166001600160a01b0392909216919091179055505050505050565b611c76600033612b8d565b611c925760405162461bcd60e51b8152600401610ec290614d82565b600e80546001600160a01b03909216600160601b026001600160601b03909216919091179055565b611cc5600033612b8d565b611ce15760405162461bcd60e51b8152600401610ec290614d82565b6012805460ff60a01b198116600160a01b9182900460ff1615909102179055565b6001600160a01b0381163314611d725760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ec2565b611d7c828261384f565b5050565b600c546001600160a01b031615611de55760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f74207769746864726177207769746820616e2061637469766520736044820152631c1b1a5d60e21b6064820152608401610ec2565b600e54600090600160601b90046001600160a01b0316611e1657600a546201000090046001600160a01b0316611e2a565b600e54600160601b90046001600160a01b03165b90506000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114611e79576040519150601f19603f3d011682016040523d82523d6000602084013e611e7e565b606091505b5050905080611d7c5760405162461bcd60e51b8152602060048201526012602482015271436f756c64206e6f7420776974686472617760701b6044820152606401610ec2565b6009546000906001600160a01b031615801590611f2d57506000600954600160f81b900460ff166002811115611efc57611efc61428f565b1480611f2d5750808015611f2d57506001600954600160f81b900460ff166002811115611f2b57611f2b61428f565b145b80611f5e575080158015611f5e57506002600954600160f81b900460ff166002811115611f5c57611f5c61428f565b145b1561202a576009546040516370a0823160e01b8152336004820152600160a01b82046001600160581b0316916001600160a01b0316906370a08231906024016020604051808303816000875af1158015611fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe09190614da5565b101561202a5760405162461bcd60e51b81526020600482015260196024820152783237903737ba1037bbb7103932b8bab4b932b2103a37b5b2b760391b6044820152606401610ec2565b600054600d54600160901b900463ffffffff16421080159061205b5750600d54600160b01b900463ffffffff164211155b61209f5760405162461bcd60e51b815260206004820152601560248201527429b0b632b99030b932903737ba1030b1ba34bb329760591b6044820152606401610ec2565b601254600160a01b900460ff16156120f95760405162461bcd60e51b815260206004820152601b60248201527f53616c65206d7573742062652061637469766520746f206d696e7400000000006044820152606401610ec2565b600d5462010000900463ffffffff166121128483614dd4565b11156121305760405162461bcd60e51b8152600401610ec290614de7565b600d5462010000900463ffffffff168111156121795760405162461bcd60e51b815260206004820152600860248201526714d3d3110813d55560c21b6044820152606401610ec2565b60145460009081906001600160a01b03161561221457601454600e54604051637096335b60e01b81526001600160601b039091166004820152602481018790526001600160a01b0390911690637096335b906044016040805180830381865afa1580156121ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061220e9190614e1c565b90925090505b600e5460009083906122309088906001600160601b0316614e40565b61223a9190614dd4565b9050803410156122815760405162461bcd60e51b8152602060048201526012602482015271496e73756666696369656e742066756e647360701b6044820152606401610ec2565b600d54600160301b900463ffffffff16156122f557600d54600160301b900463ffffffff168611156122f55760405162461bcd60e51b815260206004820152601c60248201527f4578636565646564206d6178206e756d62657220706572206d696e74000000006044820152606401610ec2565b6122ff878761353c565b60005b8681101561235a57604080516001600160a01b038a168152602081018790526001909601957f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe910160405180910390a1600101612302565b50611a4061156a8385614dd4565b61108483838360405180602001604052806000815250612d0d565b61238e600033612b8d565b6123aa5760405162461bcd60e51b8152600401610ec290614d82565b6010611d7c8282614f79565b600a54610100900460ff16158080156123d65750600a54600160ff909116105b806123f05750303b1580156123f05750600a5460ff166001145b6124535760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec2565b600a805460ff19166001179055801561247657600a805461ff0019166101001790555b61247f866138b6565b61248a600087613768565b84516002906124999082614f79565b5060208501516003906124ac9082614f79565b5060008055610180850151601480546001600160a01b039283166001600160a01b0319918216179091556060860151601380549184169190921617905583516009805460208701516001600160581b0316600160a01b026001600160f81b0319909116929093169190911791909117808255604085015185929182906001600160f81b0316600160f81b8360028111156125485761254861428f565b0217905550905050604051806101800160405280866040015115158152602001866060015115158152602001866080015163ffffffff1681526020018660a0015163ffffffff1681526020018660c0015163ffffffff1681526020018660e0015163ffffffff16815260200186610100015163ffffffff16815260200186610120015163ffffffff16815260200186610140015161ffff1681526020018661016001516001600160601b03168152602001866101a001516001600160a01b03168152602001866101c00151815250600d60008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160066101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600a6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600e6101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160000160126101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160166101000a81548163ffffffff021916908363ffffffff16021790555061010082015181600001601a6101000a81548161ffff021916908361ffff1602179055506101208201518160010160006101000a8154816001600160601b0302191690836001600160601b0316021790555061014082015181600101600c6101000a8154816001600160a01b0302191690836001600160a01b03160217905550610160820151816002015590505060006001600160a01b0316826001600160a01b0316141580156127f857506000846040015151115b1561287657601280546001600160a01b0319166001600160a01b03841690811790915560408581015190516342b53ffd60e11b815263856a7ffa9161283f91600401614192565b600060405180830381600087803b15801561285957600080fd5b505af115801561286d573d6000803e3d6000fd5b5050505061289a565b83516011906128859082614f79565b5060208401516010906128989082614f79565b505b801561177657600a805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b6000610f948261363b565b601080546128ff90614d4e565b80601f016020809104026020016040519081016040528092919081815260200182805461292b90614d4e565b80156129785780601f1061294d57610100808354040283529160200191612978565b820191906000526020600020905b81548152906001019060200180831161295b57829003601f168201915b505050505081565b61298b600033612b8d565b6129a75760405162461bcd60e51b8152600401610ec290614d82565b600054600d5462010000900463ffffffff166129c38383614dd4565b106129e05760405162461bcd60e51b8152600401610ec290614de7565b60005b8281101561108457612a09336129f98385614dd4565b612a04906001614dd4565b61353c565b80612a1381614e6d565b9150506129e3565b60006001600160a01b038216612a44576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b612a716137ee565b612a7b60006138b6565b565b600c546001600160a01b0316612aa55760405162461bcd60e51b8152600401610ec290614c3b565b8115612ab357612ab3613912565b60005b815181101561108457612ae1828281518110612ad457612ad4614e57565b602002602001015161323f565b612aea81614e6d565b9050612ab6565b6014546000906001600160a01b031615612b8857601454600e54604051637096335b60e01b81526001600160601b039091166004820152602481018490526001600160a01b0390911690637096335b906044016040805180830381865afa158015612b60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b849190614e1c565b5090505b919050565b60009182526008602090815260408084206001600160a01b0393909316845291905290205460ff1690565b612bc3600033612b8d565b612bdf5760405162461bcd60e51b8152600401610ec290614d82565b6011611d7c8282614f79565b606060038054610fa990614d4e565b81612c04816133cd565b61108483836139b5565b612c19600033612b8d565b612c355760405162461bcd60e51b8152600401610ec290614d82565b600d5460ff16612c955760405162461bcd60e51b815260206004820152602560248201527f63616e6e6f742061646a7573742073697a65206f66207468697320636f6c6c6560448201526431ba34b7b760d91b6064820152608401610ec2565b8063ffffffff16612ca560005490565b1115612ce95760405162461bcd60e51b8152602060048201526013602482015272063616e6e6f742064656372656173652063617606c1b6044820152606401610ec2565b600d805463ffffffff909216620100000265ffffffff000019909216919091179055565b612d188484846115d8565b6001600160a01b0383163b15612d5157612d3484848484613a4a565b612d51576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b600c546001600160a01b0316612d7f5760405162461bcd60e51b8152600401610ec290614c3b565b612d87613912565b600b54600c5460405163730e582f60e11b81526001600160a01b039283169263e61cb05e92612dc7929116908a908a908a908a908a908a90600401615038565b600060405180830381600087803b158015612de157600080fd5b505af1158015612df5573d6000803e3d6000fd5b50505050505050505050565b612e0c600033612b8d565b612e285760405162461bcd60e51b8152600401610ec290614d82565b600054600d54819062010000900463ffffffff16612e468483614dd4565b1115612e645760405162461bcd60e51b8152600401610ec290614de7565b8183015b80831015612f1957612ea38585848603818110612e8757612e87614e57565b9050602002016020810190612e9c9190614626565b600161353c565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8585848603818110612ed857612ed8614e57565b9050602002016020810190612eed9190614626565b604080516001600160a01b039092168252602082018690520160405180910390a1600190920191612e68565b5050505050565b6060612f2b826133a6565b612f4857604051630a14c4b560e41b815260040160405180910390fd5b6012546001600160a01b031615612fca5760125460405163c87b56dd60e01b8152600481018490526001600160a01b039091169063c87b56dd90602401600060405180830381865afa158015612fa2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f949190810190615091565b610f9482613b36565b600082815260086020526040902060010154612fee8161375e565b611084838361384f565b6012546060906001600160a01b03166130185760118054610fa990614d4e565b601260009054906101000a90046001600160a01b03166001600160a01b031663e8a3d4856040518163ffffffff1660e01b8152600401600060405180830381865afa15801561306b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526130939190810190615091565b905090565b600d54600090600160901b900463ffffffff1642108015906130c95750600d54600160b01b900463ffffffff164211155b8015613093575050601254600160a01b900460ff161590565b6130ed600033612b8d565b6131095760405162461bcd60e51b8152600401610ec290614d82565b600d805467ffffffffffffffff60501b1916600160501b63ffffffff9485160263ffffffff60701b191617600160701b9290931691909102919091179055565b6131516137ee565b6001600160a01b0381166131b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ec2565b6131bf816138b6565b50565b6131cd600033612b8d565b6131e95760405162461bcd60e51b8152600401610ec290614d82565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b613216600033612b8d565b6132325760405162461bcd60e51b8152600401610ec290614d82565b8060096110848282615107565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613286573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132aa9190614da5565b600c5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810183905291925083169063a9059cbb906044016020604051808303816000875af11580156132ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110849190614ea8565b60006001600160e01b03198216637965db0b60e01b1480610f9457506301ffc9a760e01b6001600160e01b0319831614610f94565b60006301ffc9a760e01b6001600160e01b03198316148061338957506380ac58cd60e01b6001600160e01b03198316145b80610f945750506001600160e01b031916635b5e139f60e01b1490565b6000805482108015610f94575050600090815260046020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b156131bf57604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561343a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345e9190614ea8565b6131bf57604051633b79c77360e21b81526001600160a01b0382166004820152602401610ec2565b6000613491826128e7565b9050336001600160a01b038216146134ca576134ad8133610d79565b6134ca576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000826135338584613bb9565b14949350505050565b611d7c828260405180602001604052806000815250613c06565b80156131bf57601454604080516319b400eb60e21b815290516000926001600160a01b0316916366d003ac9160048083019260209291908290030181865afa1580156135a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135ca9190614f16565b6001600160a01b03168260405160006040518083038185875af1925050503d8060008114613614576040519150601f19603f3d011682016040523d82523d6000602084013e613619565b606091505b5050905080611d7c57604051634033e4e360e01b815260040160405180910390fd5b6000816000548110156136905760008181526004602052604081205490600160e01b8216900361368e575b80600003613687575060001901600081815260046020526040902054613666565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b836001600160a01b03811633146136c3576136c3336133cd565b600d54610100900460ff1615806136f257506001600160a01b03851615806136f257506001600160a01b038416155b612f195760405162461bcd60e51b81526020600482015260096024820152681cdbdd5b189bdd5b9960ba1b6044820152606401610ec2565b600b54604051636e5f691960e01b81526001600160a01b0390911690636e5f691990611a12908690869086906004016151a4565b6131bf8133613c6c565b6137728282612b8d565b611d7c5760008281526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790556137aa3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b600a546001600160a01b0362010000909104163314612a7b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec2565b6138598282612b8d565b15611d7c5760008281526008602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600a80546001600160a01b038381166201000081810262010000600160b01b031985161790945560405193909204169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600c546040516000916001600160a01b03169047908381818185875af1925050503d806000811461395f576040519150601f19603f3d011682016040523d82523d6000602084013e613964565b606091505b50509050806131bf5760405162461bcd60e51b815260206004820152601f60248201527f436f756c64206e6f74207472616e736665722045544820746f2073706c6974006044820152606401610ec2565b336001600160a01b038316036139de5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290613a7f903390899088908890600401615207565b6020604051808303816000875af1925050508015613aba575060408051601f3d908101601f19168201909252613ab791810190615244565b60015b613b18573d808015613ae8576040519150601f19603f3d011682016040523d82523d6000602084013e613aed565b606091505b508051600003613b10576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060613b41826133a6565b613b5e57604051630a14c4b560e41b815260040160405180910390fd5b6000613b68613cc5565b90508051600003613b885760405180602001604052806000815250613687565b80613b9284613cd4565b604051602001613ba3929190615261565b6040516020818303038152906040529392505050565b600081815b8451811015613bfe57613bea82868381518110613bdd57613bdd614e57565b6020026020010151613d0c565b915080613bf681614e6d565b915050613bbe565b509392505050565b613c108383613d38565b6001600160a01b0383163b15611084576000548281035b613c3a6000868380600101945086613a4a565b613c57576040516368d2bf6b60e11b815260040160405180910390fd5b818110613c27578160005414612f1957600080fd5b613c768282612b8d565b611d7c57613c8381613e43565b613c8e836020613e55565b604051602001613c9f929190615290565b60408051601f198184030181529082905262461bcd60e51b8252610ec291600401614192565b606060108054610fa990614d4e565b604080516080019081905280825b600183039250600a81066030018353600a900480613ce25750819003601f19909101908152919050565b6000818310613d28576000828152602084905260409020613687565b5060009182526020526040902090565b6000805490829003613d5d5760405163b562e8dd60e01b815260040160405180910390fd5b613d6a60008483856136a9565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114613e1957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613de1565b5081600003613e3a57604051622e076360e81b815260040160405180910390fd5b60005550505050565b6060610f946001600160a01b03831660145b60606000613e64836002614e40565b613e6f906002614dd4565b6001600160401b03811115613e8657613e86614331565b6040519080825280601f01601f191660200182016040528015613eb0576020820181803683370190505b509050600360fc1b81600081518110613ecb57613ecb614e57565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613efa57613efa614e57565b60200101906001600160f81b031916908160001a9053506000613f1e846002614e40565b613f29906001614dd4565b90505b6001811115613fa1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110613f5d57613f5d614e57565b1a60f81b828281518110613f7357613f73614e57565b60200101906001600160f81b031916908160001a90535060049490941c93613f9a81615305565b9050613f2c565b5083156136875760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ec2565b6001600160a01b03811681146131bf57600080fd5b60008083601f84011261401757600080fd5b5081356001600160401b0381111561402e57600080fd5b6020830191508360208260051b850101111561192557600080fd5b803563ffffffff81168114612b8857600080fd5b8035612b8881613ff0565b600080600080600080600060a0888a03121561408357600080fd5b873561408e81613ff0565b965060208801356001600160401b03808211156140aa57600080fd5b6140b68b838c01614005565b909850965060408a01359150808211156140cf57600080fd5b506140dc8a828b01614005565b90955093506140ef905060608901614049565b915060808801356140ff81613ff0565b8091505092959891949750929550565b6001600160e01b0319811681146131bf57600080fd5b60006020828403121561413757600080fd5b81356136878161410f565b60005b8381101561415d578181015183820152602001614145565b50506000910152565b6000815180845261417e816020860160208601614142565b601f01601f19169290920160200192915050565b6020815260006136876020830184614166565b6000602082840312156141b757600080fd5b5035919050565b600080604083850312156141d157600080fd5b82356141dc81613ff0565b946020939093013593505050565b600080604083850312156141fd57600080fd5b61420683614049565b915061421460208401614049565b90509250929050565b60008060008060008060a0878903121561423657600080fd5b863561424181613ff0565b955060208701359450604087013593506060870135925060808701356001600160401b0381111561427157600080fd5b61427d89828a01614005565b979a9699509497509295939492505050565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681526001600160581b038316602082015260608101600383106142e257634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b60008060006060848603121561430557600080fd5b833561431081613ff0565b9250602084013561432081613ff0565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b6040516101e081016001600160401b038111828210171561436a5761436a614331565b60405290565b604051601f8201601f191681016001600160401b038111828210171561439857614398614331565b604052919050565b600082601f8301126143b157600080fd5b813560206001600160401b038211156143cc576143cc614331565b8160051b6143db828201614370565b92835284810182019282810190878511156143f557600080fd5b83870192505b8483101561441d57823561440e81613ff0565b825291830191908301906143fb565b979650505050505050565b600080600080600080600080600060e08a8c03121561444657600080fd5b893561445181613ff0565b985060208a0135975060408a01356001600160401b038082111561447457600080fd5b6144808d838e016143a0565b985060608c013591508082111561449657600080fd5b6144a28d838e01614005565b909850965060808c01359150808211156144bb57600080fd5b506144c88c828d01614005565b90955093506144db905060a08b01614049565b915060c08a01356144eb81613ff0565b809150509295985092959850929598565b6000806040838503121561450f57600080fd5b50508035926020909101359150565b80151581146131bf57600080fd5b8035612b888161451e565b6000806040838503121561454a57600080fd5b82356145558161451e565b9150602083013561456581613ff0565b809150509250929050565b6000806040838503121561458357600080fd5b82359150602083013561456581613ff0565b600080600080600080608087890312156145ae57600080fd5b86356145b981613ff0565b955060208701356001600160401b03808211156145d557600080fd5b6145e18a838b01614005565b909750955060408901359150808211156145fa57600080fd5b5061460789828a01614005565b909450925061461a905060608801614049565b90509295509295509295565b60006020828403121561463857600080fd5b813561368781613ff0565b60006001600160401b0382111561465c5761465c614331565b50601f01601f191660200190565b600082601f83011261467b57600080fd5b813561468e61468982614643565b614370565b8181528460208386010111156146a357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156146d257600080fd5b81356001600160401b038111156146e857600080fd5b613b2e8482850161466a565b803561ffff81168114612b8857600080fd5b80356001600160601b0381168114612b8857600080fd5b60006080828403121561472f57600080fd5b604051608081016001600160401b03828210818311171561475257614752614331565b81604052829350843591508082111561476a57600080fd5b6147768683870161466a565b8352602085013591508082111561478c57600080fd5b6147988683870161466a565b602084015260408501359150808211156147b157600080fd5b506147be8582860161466a565b60408301525060608301356147d281613ff0565b6060919091015292915050565b6001600160581b03811681146131bf57600080fd5b600381106131bf57600080fd5b60006060828403121561481357600080fd5b604051606081018181106001600160401b038211171561483557614835614331565b604052905080823561484681613ff0565b81526020830135614856816147df565b60208201526040830135614869816147f4565b6040919091015292915050565b600080600080600060e0868803121561488e57600080fd5b853561489981613ff0565b945060208601356001600160401b03808211156148b557600080fd5b908701906101e0828a0312156148ca57600080fd5b6148d2614347565b8235828111156148e157600080fd5b6148ed8b82860161466a565b82525060208301358281111561490257600080fd5b61490e8b82860161466a565b6020830152506149206040840161452c565b60408201526149316060840161452c565b606082015261494260808401614049565b608082015261495360a08401614049565b60a082015261496460c08401614049565b60c082015261497560e08401614049565b60e0820152610100614988818501614049565b9082015261012061499a848201614049565b908201526101406149ac8482016146f4565b908201526101606149be848201614706565b908201526101806149d084820161405d565b908201526101a06149e284820161405d565b908201526101c0928301359281019290925290945060408701359080821115614a0a57600080fd5b50614a178882890161471d565b935050614a278760608801614801565b9150614a3560c0870161405d565b90509295509295909350565b60008060408385031215614a5457600080fd5b8235915060208301356001600160401b03811115614a7157600080fd5b611921858286016143a0565b60008060408385031215614a9057600080fd5b8235614a9b81613ff0565b915060208301356145658161451e565b600060208284031215614abd57600080fd5b61368782614049565b60008060008060808587031215614adc57600080fd5b8435614ae781613ff0565b93506020850135614af781613ff0565b92506040850135915060608501356001600160401b03811115614b1957600080fd5b614b258782880161466a565b91505092959194509250565b60008060008060008060808789031215614b4a57600080fd5b86356001600160401b0380821115614b6157600080fd5b614b6d8a838b01614005565b90985096506020890135915080821115614b8657600080fd5b50614b9389828a01614005565b9095509350614ba6905060408801614049565b91506060870135614bb681613ff0565b809150509295509295509295565b60008060208385031215614bd757600080fd5b82356001600160401b03811115614bed57600080fd5b614bf985828601614005565b90969095509350505050565b60008060408385031215614c1857600080fd5b823561455581613ff0565b600060608284031215614c3557600080fd5b50919050565b60208082526015908201527414dc1b1a5d081b9bdd0818dc99585d1959081e595d605a1b604082015260600190565b8183526000602080850194508260005b85811015614ca8578135614c8d81613ff0565b6001600160a01b031687529582019590820190600101614c7a565b509495945050505050565b8183526000602080850194508260005b85811015614ca85763ffffffff614cd983614049565b1687529582019590820190600101614cc3565b600060018060a01b03808b168352808a16602084015260c06040840152614d1760c08401898b614c6a565b8381036060850152614d2a81888a614cb3565b63ffffffff969096166080850152509290921660a090910152509695505050505050565b600181811c90821680614d6257607f821691505b602082108103614c3557634e487b7160e01b600052602260045260246000fd5b60208082526009908201526837b7363ca0b236b4b760b91b604082015260600190565b600060208284031215614db757600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610f9457610f94614dbe565b6020808252818101527f507572636861736520776f756c6420657863656564206d617820737570706c79604082015260600190565b60008060408385031215614e2f57600080fd5b505080516020909101519092909150565b8082028115828204841417610f9457610f94614dbe565b634e487b7160e01b600052603260045260246000fd5b600060018201614e7f57614e7f614dbe565b5060010190565b600082614ea357634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215614eba57600080fd5b81516136878161451e565b608081526000614ed960808301888a614c6a565b8281036020840152614eec818789614cb3565b63ffffffff95909516604084015250506001600160a01b0391909116606090910152949350505050565b600060208284031215614f2857600080fd5b815161368781613ff0565b601f82111561108457600081815260208120601f850160051c81016020861015614f5a5750805b601f850160051c820191505b8181101561177657828155600101614f66565b81516001600160401b03811115614f9257614f92614331565b614fa681614fa08454614d4e565b84614f33565b602080601f831160018114614fdb5760008415614fc35750858301515b600019600386901b1c1916600185901b178555611776565b600085815260208120601f198616915b8281101561500a57888601518255948401946001909101908401614feb565b50858210156150285787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060018060a01b03808a16835260a0602084015261505b60a08401898b614c6a565b838103604085015261506e81888a614cb3565b63ffffffff96909616606085015250929092166080909101525095945050505050565b6000602082840312156150a357600080fd5b81516001600160401b038111156150b957600080fd5b8201601f810184136150ca57600080fd5b80516150d861468982614643565b8181528560208385010111156150ed57600080fd5b6150fe826020830160208601614142565b95945050505050565b813561511281613ff0565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561513e816147df565b6affffffffffffffffffffff60a01b60a09190911b166001600160f81b0319918216831781178455604085013591615175836147f4565b6003831061519357634e487b7160e01b600052602160045260246000fd5b921760f89190911b90911617905550565b6001600160a01b038481168252602080830185905260606040840181905284519084018190526000928583019290916080860190855b818110156151f85785518516835294830194918301916001016151da565b50909998505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061523a90830184614166565b9695505050505050565b60006020828403121561525657600080fd5b81516136878161410f565b60008351615273818460208801614142565b835190830190615287818360208801614142565b01949350505050565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516152c8816017850160208801614142565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516152f9816028840160208801614142565b01602801949350505050565b60008161531457615314614dbe565b50600019019056fea26469706673582212207df3c1d6a4a1089f9b782b1f6cdcf95634bdc7a97462fe27af71e4325b374ef664736f6c63430008110033