[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "ApprovalQueryForNonexistentToken", "type": "error" }, { "inputs": [], "name": "BalanceQueryForZeroAddress", "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": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "CalLevelChanged", "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": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "transferer", "type": "address" } ], "name": "LocalCalAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "transferer", "type": "address" } ], "name": "LocalCalRemoved", "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": "holder", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "enum IERC721Lockable.LockStatus", "name": "lockStatus", "type": "uint8" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "TokenLock", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "holder", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "enum IERC721Lockable.LockStatus", "name": "lockStatus", "type": "uint8" } ], "name": "WalletLock", "type": "event" }, { "inputs": [], "name": "CAL", "outputs": [ { "internalType": "contract IContractAllowListProxy", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "CALLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "OPERATOR_FILTER_REGISTRY", "outputs": [ { "internalType": "contract IOperatorFilterRegistry", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferer", "type": "address" } ], "name": "addLocalContractAllowList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "addNewWLSale", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_airdropAddresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "_UserMintAmount", "type": "uint256[]" } ], "name": "airdropMint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseExtension", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "checkTokenExists", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "contractLockStatus", "outputs": [ { "internalType": "enum IERC721Lockable.LockStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cost", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "enableLock", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "enableRestrict", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "start", "type": "uint256" }, { "internalType": "uint256", "name": "end", "type": "uint256" } ], "name": "getTokensUnderLock", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokensUnderLock", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_wlSaleCount", "type": "uint8" } ], "name": "getWLMearkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint8", "name": "_wlSaleCount", "type": "uint8" } ], "name": "getWLMintedAmount", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "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": [ { "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" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "holder", "type": "address" } ], "name": "isLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "isLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_user", "type": "address" }, { "internalType": "uint8", "name": "_wlMaxMintAmount", "type": "uint8" }, { "internalType": "bytes32[]", "name": "_merkleProof", "type": "bytes32[]" } ], "name": "isWhitelisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxPubSaleMintAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintAmount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_mintAmount", "type": "uint256" }, { "internalType": "address", "name": "_purchaseraddr", "type": "address" } ], "name": "proxy_mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "publicMintedAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "transferer", "type": "address" } ], "name": "removeLocalContractAllowList", "outputs": [], "stateMutability": "nonpayable", "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": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "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": "payable", "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": "payable", "type": "function" }, { "inputs": [], "name": "saleStage", "outputs": [ { "internalType": "enum amanemei_book_collections.em_saleStage", "name": "", "type": "uint8" } ], "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": "_newBaseExtension", "type": "string" } ], "name": "setBaseExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "calAddress", "type": "address" } ], "name": "setCAL", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "setCALLevel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum IERC721Lockable.LockStatus", "name": "lockStatus", "type": "uint8" } ], "name": "setContractLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newCost", "type": "uint256" } ], "name": "setCost", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_enableLock", "type": "bool" } ], "name": "setEnableLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint96", "name": "_feeNumerator", "type": "uint96" } ], "name": "setRoyaltyFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "enum amanemei_book_collections.em_saleStage", "name": "_saleStage", "type": "uint8" } ], "name": "setSaleStage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "setTokenCALLevel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "enum IERC721Lockable.LockStatus", "name": "lockStatus", "type": "uint8" } ], "name": "setTokenLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_wlSaleCount", "type": "uint256" }, { "internalType": "bytes32", "name": "_wlMearkleRoot", "type": "bytes32" } ], "name": "setWLMearkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "setWalletCALLevel", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "enum IERC721Lockable.LockStatus", "name": "lockStatus", "type": "uint8" } ], "name": "setWalletLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_withdrawAddress", "type": "address" } ], "name": "setWithdrawAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_wlSaleCount", "type": "uint8" } ], "name": "setWlSaleCount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_newmaxPubSaleMintAmount", "type": "uint256" } ], "name": "setmaxPubSaleMintAmount", "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": "", "type": "uint256" } ], "name": "tokenCALLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "tokenLock", "outputs": [ { "internalType": "enum IERC721Lockable.LockStatus", "name": "", "type": "uint8" } ], "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": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "walletCALLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "walletLock", "outputs": [ { "internalType": "enum IERC721Lockable.LockStatus", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "withdrawAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "wlSaleCount", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "wlSaleData", "outputs": [ { "internalType": "bytes32", "name": "WLMearkleRoot", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "wlSaleDataLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_mintAmount", "type": "uint8" }, { "internalType": "uint8", "name": "_wlMaxMintAmount", "type": "uint8" }, { "internalType": "bytes32[]", "name": "_merkleProof", "type": "bytes32[]" } ], "name": "wl_mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_mintAmount", "type": "uint8" }, { "internalType": "uint8", "name": "_wlMaxMintAmount", "type": "uint8" }, { "internalType": "bytes32[]", "name": "_merkleProof", "type": "bytes32[]" }, { "internalType": "address", "name": "_purchaseraddr", "type": "address" } ], "name": "wl_proxy_mint", "outputs": [], "stateMutability": "payable", "type": "function" } ]
6008805461ffff1916610101179055600e805460ff1916600190811790915560115560c06040526005608090815264173539b7b760d91b60a05260189062000048908262000863565b50663ff2e795f50000601955610546601a55601b805460ff199081169091556005601c55601e805490911690553480156200008257600080fd5b50604080518082018252601981527f616d616e656d65695f626f6f6b5f636f6c6c656374696f6e73000000000000006020808301919091528251808401909352600383526241424360e81b9083015290733cc6cdda760b79bafa08df41ecfa224f810dceb660016daaeb6d7670e522a718067333cd4e3b156200022e5780156200017c57604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200015d57600080fd5b505af115801562000172573d6000803e3d6000fd5b505050506200022e565b6001600160a01b03821615620001cd5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000142565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b1580156200021457600080fd5b505af115801562000229573d6000803e3d6000fd5b505050505b50600290506200023f838262000863565b5060036200024e828262000863565b50506001600055506200026133620002f7565b6200026e60003362000349565b620002926040518060600160405280602a81526020016200576b602a913962000359565b620002b173e8df89785b9a726de1f45b1dbe03e550f0043b9262000379565b601654620002cb906001600160a01b03166103e8620003a9565b600b80546001600160a01b03191673b506d7bbe23576b8aaf22477cd9a7fdf0800221117905562000a79565b601480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620003558282620004ae565b5050565b6000620003668162000538565b601762000374838262000863565b505050565b6000620003868162000538565b50601680546001600160a01b0319166001600160a01b0392909216919091179055565b6127106001600160601b03821611156200041d5760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b60648201526084015b60405180910390fd5b6001600160a01b038216620004755760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c696420726563656976657200000000000000604482015260640162000414565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217601255565b620004ba828262000547565b620003555760008281526015602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620004f43390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000544813362000574565b50565b60008281526015602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b62000580828262000547565b62000355576200059b81620005ec60201b620021bd1760201c565b620005b1836020620021cf620005ff821b17811c565b604051602001620005c492919062000955565b60408051601f198184030181529082905262461bcd60e51b82526200041491600401620009ce565b60606200056e6001600160a01b03831660145b606060006200061083600262000a19565b6200061d90600262000a33565b6001600160401b03811115620006375762000637620007bf565b6040519080825280601f01601f19166020018201604052801562000662576020820181803683370190505b509050600360fc1b8160008151811062000680576200068062000a49565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006b257620006b262000a49565b60200101906001600160f81b031916908160001a9053506000620006d884600262000a19565b620006e590600162000a33565b90505b600181111562000767576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106200071d576200071d62000a49565b1a60f81b82828151811062000736576200073662000a49565b60200101906001600160f81b031916908160001a90535060049490941c936200075f8162000a5f565b9050620006e8565b508315620007b85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015260640162000414565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ea57607f821691505b6020821081036200080b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200037457600081815260208120601f850160051c810160208610156200083a5750805b601f850160051c820191505b818110156200085b5782815560010162000846565b505050505050565b81516001600160401b038111156200087f576200087f620007bf565b6200089781620008908454620007d5565b8462000811565b602080601f831160018114620008cf5760008415620008b65750858301515b600019600386901b1c1916600185901b1785556200085b565b600085815260208120601f198616915b828110156200090057888601518255948401946001909101908401620008df565b50858210156200091f5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60005b838110156200094c57818101518382015260200162000932565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516200098f8160178501602088016200092f565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351620009c28160288401602088016200092f565b01602801949350505050565b6020815260008251806020840152620009ef8160408501602087016200092f565b601f01601f19169190910160400192915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200056e576200056e62000a03565b808201808211156200056e576200056e62000a03565b634e487b7160e01b600052603260045260246000fd5b60008162000a715762000a7162000a03565b506000190190565b614ce28062000a896000396000f3fe6080604052600436106105585760003560e01c80636f8b44b0116102ca578063bfd5621e11610179578063e985e9c5116100d6578063f3b3059e1161008a578063f89fb1631161006f578063f89fb16314610eeb578063f9a6a1fd14610f00578063ff76821214610f2057600080fd5b8063f3b3059e14610eab578063f6aacfb114610ecb57600080fd5b8063ead29d4e116100bb578063ead29d4e14610e49578063eb05629714610e76578063f2fde38b14610e8b57600080fd5b8063e985e9c514610e09578063ea7a5f0e14610e2957600080fd5b8063d3a793501161012d578063d5abeb0111610112578063d5abeb0114610db3578063d5e92bad14610dc9578063da3ef23f14610de957600080fd5b8063d3a7935014610d7e578063d547741f14610d9357600080fd5b8063c66828621161015e578063c668286214610d29578063c87b56dd14610d3e578063ca14372214610d5e57600080fd5b8063bfd5621e14610cf6578063c06958c214610d1657600080fd5b806391d1485411610227578063a35c23ad116101db578063b31391cb116101c0578063b31391cb14610c96578063b44c576714610cc3578063b88d4fde14610ce357600080fd5b8063a35c23ad14610c49578063a41216ac14610c7657600080fd5b8063a0712d681161020c578063a0712d6814610c01578063a217fddf14610c14578063a22cb46514610c2957600080fd5b806391d1485414610ba657806395d89b4114610bec57600080fd5b806373a40a571161027e5780637c3dc173116102635780637c3dc17314610b48578063874a8b0214610b685780638da5cb5b14610b8857600080fd5b806373a40a5714610af85780637988426914610b1857600080fd5b806370a08231116102af57806370a0823114610aa3578063715018a614610ac357806372b44d7114610ad857600080fd5b80636f8b44b014610a575780637067fd6314610a7757600080fd5b806331faafb41161042657806344a0d68a116103835780634fdaf052116103375780635a2eddae1161031c5780635a2eddae14610a045780635ff0913714610a175780636352211e14610a3757600080fd5b80634fdaf052146109c457806355f804b3146109e457600080fd5b80634aaca86d116103685780634aaca86d146109675780634b81d8bd146109815780634f3db346146109ae57600080fd5b806344a0d68a146109275780634a4fbeec1461094757600080fd5b80633ab1a494116103da57806341f43434116103bf57806341f43434146108d257806342842e0e146108f457806344726fd61461090757600080fd5b80633ab1a494146108aa5780633ccfd60b146108ca57600080fd5b806336568abe1161040b57806336568abe14610850578063374032a114610870578063396e8f531461088a57600080fd5b806331faafb41461081a578063365264fe1461083a57600080fd5b806313c52826116104d457806323b872dd11610488578063279a669e1161046d578063279a669e1461079b5780632a55205a146107bb5780632f2ff15d146107fa57600080fd5b806323b872dd14610758578063248a9ca31461076b57600080fd5b80631581b600116104b95780631581b600146106ee57806318160ddd1461070e5780632398f8431461072b57600080fd5b806313c528261461069a57806313faede6146106ca57600080fd5b8063081812fc1161052b5780630bdfbf60116105105780630bdfbf601461063b5780630f4345e21461064e57806310c395bf1461066e57600080fd5b8063081812fc146105f0578063095ea7b31461062857600080fd5b806301ffc9a71461055d578063025e332e1461059257806306fdde03146105b457806307265389146105d6575b600080fd5b34801561056957600080fd5b5061057d6105783660046141b7565b610f40565b60405190151581526020015b60405180910390f35b34801561059e57600080fd5b506105b26105ad3660046141f0565b610f7e565b005b3480156105c057600080fd5b506105c9610fb9565b604051610589919061425b565b3480156105e257600080fd5b50600e5461057d9060ff1681565b3480156105fc57600080fd5b5061061061060b36600461426e565b61104b565b6040516001600160a01b039091168152602001610589565b6105b2610636366004614287565b6110a8565b6105b26106493660046142b1565b6110c1565b34801561065a57600080fd5b506105b261066936600461426e565b6110cb565b34801561067a57600080fd5b5060085461068d90610100900460ff1681565b6040516105899190614311565b3480156106a657600080fd5b5061068d6106b53660046141f0565b600a6020526000908152604090205460ff1681565b3480156106d657600080fd5b506106e060195481565b604051908152602001610589565b3480156106fa57600080fd5b50601654610610906001600160a01b031681565b34801561071a57600080fd5b5060015460005403600019016106e0565b34801561073757600080fd5b506106e06107463660046141f0565b60106020526000908152604090205481565b6105b2610766366004614324565b6110dc565b34801561077757600080fd5b506106e061078636600461426e565b60009081526015602052604090206001015490565b3480156107a757600080fd5b506105b26107b63660046143ec565b611107565b3480156107c757600080fd5b506107db6107d63660046144bb565b611290565b604080516001600160a01b039093168352602083019190915201610589565b34801561080657600080fd5b506105b26108153660046142b1565b61134d565b34801561082657600080fd5b506105b26108353660046144dd565b611372565b34801561084657600080fd5b506106e0601c5481565b34801561085c57600080fd5b506105b261086b3660046142b1565b611393565b34801561087c57600080fd5b5060085461057d9060ff1681565b34801561089657600080fd5b50600b54610610906001600160a01b031681565b3480156108b657600080fd5b506105b26108c53660046141f0565b61141b565b6105b2611456565b3480156108de57600080fd5b506106106daaeb6d7670e522a718067333cd4e81565b6105b2610902366004614324565b611519565b34801561091357600080fd5b506105b261092236600461451c565b61153e565b34801561093357600080fd5b506105b261094236600461426e565b6115aa565b34801561095357600080fd5b5061057d6109623660046141f0565b6115bb565b34801561097357600080fd5b50601b5461068d9060ff1681565b34801561098d57600080fd5b506109a161099c3660046144bb565b611670565b6040516105899190614537565b3480156109ba57600080fd5b506106e060115481565b3480156109d057600080fd5b506105b26109df366004614588565b611840565b3480156109f057600080fd5b506105b26109ff3660046145fd565b611854565b6105b2610a12366004614646565b61186b565b348015610a2357600080fd5b506106e0610a3236600461451c565b61187f565b348015610a4357600080fd5b50610610610a5236600461426e565b6118fb565b348015610a6357600080fd5b506105b2610a7236600461426e565b611906565b348015610a8357600080fd5b50601e54610a919060ff1681565b60405160ff9091168152602001610589565b348015610aaf57600080fd5b506106e0610abe3660046141f0565b611917565b348015610acf57600080fd5b506105b261197f565b348015610ae457600080fd5b506105b2610af33660046141f0565b611993565b348015610b0457600080fd5b50610a91610b133660046146bc565b6119a7565b348015610b2457600080fd5b5061068d610b3336600461426e565b60096020526000908152604090205460ff1681565b348015610b5457600080fd5b506105b2610b633660046144bb565b611a3e565b348015610b7457600080fd5b506105b2610b833660046146e6565b611ae1565b348015610b9457600080fd5b506014546001600160a01b0316610610565b348015610bb257600080fd5b5061057d610bc13660046142b1565b60009182526015602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610bf857600080fd5b506105c9611b43565b6105b2610c0f36600461426e565b611b52565b348015610c2057600080fd5b506106e0600081565b348015610c3557600080fd5b506105b2610c4436600461472b565b611b5f565b348015610c5557600080fd5b506105b2610c6436600461426e565b33600090815260106020526040902055565b348015610c8257600080fd5b506105b2610c91366004614757565b611b73565b348015610ca257600080fd5b506106e0610cb136600461426e565b600f6020526000908152604090205481565b348015610ccf57600080fd5b506105b2610cde366004614588565b611b92565b6105b2610cf1366004614774565b611bc5565b348015610d0257600080fd5b5061057d610d1136600461426e565b611beb565b6105b2610d243660046147f0565b611bf6565b348015610d3557600080fd5b506105c9611c03565b348015610d4a57600080fd5b506105c9610d5936600461426e565b611c91565b348015610d6a57600080fd5b506105b2610d7936600461426e565b611d0d565b348015610d8a57600080fd5b506106e0611d1e565b348015610d9f57600080fd5b506105b2610dae3660046142b1565b611d32565b348015610dbf57600080fd5b506106e0601a5481565b348015610dd557600080fd5b506105b2610de43660046144bb565b611d57565b348015610df557600080fd5b506105b2610e043660046145fd565b611dd3565b348015610e1557600080fd5b5061057d610e24366004614851565b611dea565b348015610e3557600080fd5b506106e0610e4436600461426e565b611e25565b348015610e5557600080fd5b506106e0610e643660046141f0565b601d6020526000908152604090205481565b348015610e8257600080fd5b506109a1611e4b565b348015610e9757600080fd5b506105b2610ea63660046141f0565b611e65565b348015610eb757600080fd5b506105b2610ec636600461487b565b611ef2565b348015610ed757600080fd5b5061057d610ee636600461426e565b611f9c565b348015610ef757600080fd5b506106e06120a9565b348015610f0c57600080fd5b5061057d610f1b3660046148d2565b6120ca565b348015610f2c57600080fd5b506105b2610f3b3660046141f0565b6121a9565b6000610f4b826123b0565b80610f5a5750610f5a826123ee565b80610f695750610f698261242c565b80610f785750610f78826123ee565b92915050565b6000610f898161247a565b600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384161790555050565b5050565b606060028054610fc8906148f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff4906148f1565b80156110415780601f1061101657610100808354040283529160200191611041565b820191906000526020600020905b81548152906001019060200180831161102457829003601f168201915b5050505050905090565b600061105682612484565b61108c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b816110b2816124b9565b6110bc83836125a4565b505050565b610fb582826125b8565b60006110d68161247a565b50601155565b826001600160a01b03811633146110f6576110f6336124b9565b611101848484612887565b50505050565b60006111128161247a565b60006111276001546000546000199190030190565b90506000805b845181101561116f5784818151811061114857611148614925565b60200260200101518261115b9190614951565b91508061116781614964565b91505061112d565b50600081116111c55760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e4654000000000060448201526064015b60405180910390fd5b601a546111d28284614951565b11156112205760405162461bcd60e51b815260206004820152601660248201527f6d6178204e4654206c696d69742065786365656465640000000000000000000060448201526064016111bc565b60005b84518110156112875761127587878381811061124157611241614925565b905060200201602081019061125691906141f0565b86838151811061126857611268614925565b6020026020010151612a85565b8061127f81614964565b915050611223565b50505050505050565b60008281526013602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff1692820192909252829161130f5750604080518082019091526012546001600160a01b0381168252600160a01b90046bffffffffffffffffffffffff1660208201525b602081015160009061271090611333906bffffffffffffffffffffffff168761497d565b61133d9190614994565b91519350909150505b9250929050565b6000828152601560205260409020600101546113688161247a565b6110bc8383612a9f565b600061137d8161247a565b601654610fb5906001600160a01b031683612b41565b6001600160a01b03811633146114115760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084016111bc565b610fb58282612c5b565b60006114268161247a565b506016805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60006114618161247a565b6016546001600160a01b03166114b95760405162461bcd60e51b815260206004820152601960248201527f546865207061796d656e74206164647265737320697320302e0000000000000060448201526064016111bc565b6016546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611506576040519150601f19603f3d011682016040523d82523d6000602084013e61150b565b606091505b5050905080610fb557600080fd5b826001600160a01b038116331461153357611533336124b9565b611101848484612cde565b60006115498161247a565b601f5460ff8316106115935760405162461bcd60e51b8152602060048201526013602482015272574c2053616c6520636f756e74206f7665722160681b60448201526064016111bc565b50601e805460ff191660ff92909216919091179055565b60006115b58161247a565b50601955565b60085460009060ff166115d057506000919050565b60026001600160a01b0383166000908152600a602052604090205460ff1660028111156115ff576115ff6142dd565b148061165b57506001600160a01b0382166000908152600a602052604081205460ff166002811115611633576116336142dd565b14801561165b57506002600854610100900460ff166002811115611659576116596142dd565b145b1561166857506001919050565b506000919050565b6060600061167e84846149b6565b611689906001614951565b67ffffffffffffffff8111156116a1576116a16143a5565b6040519080825280602002602001820160405280156116ca578160200160208202803683370190505b509050600080855b858111611772576116e281612484565b80156116f257506116f281611f9c565b1561172d57600184848151811061170b5761170b614925565b911515602092830291909101909101528161172581614964565b925050611752565b600084848151811061174157611741614925565b911515602092830291909101909101525b8261175c81614964565b935050808061176a90614964565b9150506116d2565b5060008167ffffffffffffffff81111561178e5761178e6143a5565b6040519080825280602002602001820160405280156117b7578160200160208202803683370190505b5060009350905082875b878111611833578585815181106117da576117da614925565b60200260200101511561181357808383815181106117fa576117fa614925565b60209081029190910101528161180f81614964565b9250505b8461181d81614964565b955050808061182b90614964565b9150506117c1565b5090979650505050505050565b600061184b8161247a565b610fb582612cf9565b600061185f8161247a565b60176110bc8382614a0f565b6118788585858585612d22565b5050505050565b601f5460009060ff8316106118cc5760405162461bcd60e51b8152602060048201526013602482015272574c2053616c6520636f756e74206f7665722160681b60448201526064016111bc565b601f8260ff16815481106118e2576118e2614925565b9060005260206000209060020201600001549050919050565b6000610f78826130c4565b60006119118161247a565b50601a55565b60006001600160a01b038216611959576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b61198761314c565b61199160006131a6565b565b600061199e8161247a565b610fb582613205565b601f5460009060ff8316106119f45760405162461bcd60e51b8152602060048201526013602482015272574c2053616c6520636f756e74206f7665722160681b60448201526064016111bc565b601f8260ff1681548110611a0a57611a0a614925565b600091825260208083206001600160a01b03871684526001600290930201919091019052604090205460ff16905092915050565b81611a48816118fb565b6001600160a01b0316336001600160a01b031614611ace5760405162461bcd60e51b815260206004820152602a60248201527f5265737472696374417070726f76653a206f7065726174696f6e206973206f6e60448201527f6c7920686f6c6465722e0000000000000000000000000000000000000000000060648201526084016111bc565b506000918252600f602052604090912055565b6001600160a01b0382163314611b395760405162461bcd60e51b815260206004820152600d60248201527f6e6f7420796f757273656c662e0000000000000000000000000000000000000060448201526064016111bc565b610fb5828261324a565b606060038054610fc8906148f1565b611b5c81336125b8565b50565b81611b69816124b9565b6110bc83836132d3565b6000611b7e8161247a565b506008805460ff1916911515919091179055565b6000611b9d8161247a565b601b805483919060ff19166001836002811115611bbc57611bbc6142dd565b02179055505050565b836001600160a01b0381163314611bdf57611bdf336124b9565b611878858585856133b0565b6000610f7882612484565b6111018484848433612d22565b60188054611c10906148f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611c3c906148f1565b8015611c895780601f10611c5e57610100808354040283529160200191611c89565b820191906000526020600020905b815481529060010190602001808311611c6c57829003601f168201915b505050505081565b6060611c9c82612484565b611cd2576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611cda6133f4565b611ce383613403565b6018604051602001611cf793929190614acf565b6040516020818303038152906040529050919050565b6000611d188161247a565b50601c55565b600080611d2a8161247a565b5050601f5490565b600082815260156020526040902060010154611d4d8161247a565b6110bc8383612c5b565b6000611d628161247a565b601f548310611da95760405162461bcd60e51b8152602060048201526013602482015272574c2053616c6520636f756e74206f7665722160681b60448201526064016111bc565b81601f8481548110611dbd57611dbd614925565b6000918252602090912060029091020155505050565b6000611dde8161247a565b60186110bc8382614a0f565b6000611df5836115bb565b80611e075750611e058383613447565b155b15611e1457506000610f78565b611e1e838361345f565b9392505050565b601f8181548110611e3557600080fd5b6000918252602090912060029091020154905081565b600054606090600190611e5e8282611670565b9250505090565b611e6d61314c565b6001600160a01b038116611ee95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016111bc565b611b5c816131a6565b60005b82811015611f9057611f1e848483818110611f1257611f12614925565b905060200201356118fb565b6001600160a01b0316336001600160a01b031614611f7e5760405162461bcd60e51b815260206004820152600a60248201527f6e6f74206f776e65722e0000000000000000000000000000000000000000000060448201526064016111bc565b80611f8881614964565b915050611ef5565b506110bc838383613486565b600081611fa881612484565b61201a5760405162461bcd60e51b815260206004820152602d60248201527f4c6f636b61626c653a206c6f636b696e6720717565727920666f72206e6f6e6560448201527f78697374656e7420746f6b656e0000000000000000000000000000000000000060648201526084016111bc565b60085460ff1661202d57600091506120a3565b600260008481526009602052604090205460ff166002811115612052576120526142dd565b1480612090575060008381526009602052604081205460ff16600281111561207c5761207c6142dd565b1480156120905750612090610962846118fb565b1561209e57600191506120a3565b600091505b50919050565b6000806120b58161247a565b5050601f805460010180825560009190915290565b6040516bffffffffffffffffffffffff19606086901b1660208201527fff0000000000000000000000000000000000000000000000000000000000000060f885901b166034820152600090819060350160405160208183030381529060405280519060200120905061219d84848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050601e54601f805490935060ff9091169150811061218557612185614925565b9060005260206000209060020201600001548361356a565b9150505b949350505050565b60006121b48161247a565b610fb582613580565b6060610f786001600160a01b03831660145b606060006121de83600261497d565b6121e9906002614951565b67ffffffffffffffff811115612201576122016143a5565b6040519080825280601f01601f19166020018201604052801561222b576020820181803683370190505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061226257612262614925565b60200101906001600160f81b031916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106122ad576122ad614925565b60200101906001600160f81b031916908160001a90535060006122d184600261497d565b6122dc906001614951565b90505b6001811115612361577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061231d5761231d614925565b1a60f81b82828151811061233357612333614925565b60200101906001600160f81b031916908160001a90535060049490941c9361235a81614b6f565b90506122df565b508315611e1e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016111bc565b60006123bb826135c5565b806123ca57506123ca82613645565b806123d957506123d982613683565b80610f785750506001600160e01b0319161590565b60006001600160e01b031982167f7965db0b000000000000000000000000000000000000000000000000000000001480610f785750610f78826123b0565b60006001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001480610f7857506301ffc9a760e01b6001600160e01b0319831614610f78565b611b5c81336136c1565b600081600111158015612498575060005482105b8015610f78575050600090815260046020526040902054600160e01b161590565b6daaeb6d7670e522a718067333cd4e3b15611b5c576040517fc61711340000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561253f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125639190614b86565b611b5c576040517fede71dcc0000000000000000000000000000000000000000000000000000000081526001600160a01b03821660048201526024016111bc565b6125ae8282613736565b610fb5828261374a565b60006125cd6001546000546000199190030190565b90506000831161261f5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e4654000000000060448201526064016111bc565b601a5461262c8483614951565b111561267a5760405162461bcd60e51b815260206004820152601660248201527f6d6178204e4654206c696d69742065786365656465640000000000000000000060448201526064016111bc565b6001600160a01b03821660009081527fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed602052604090205460ff1661287d576002601b5460ff1660028111156126d2576126d26142dd565b1461271f5760405162461bcd60e51b815260206004820152601f60248201527f74686520636f6e7472616374206973206e6f74205075626c69632053616c650060448201526064016111bc565b601c5483111561277d5760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b60648201526084016111bc565b601c546001600160a01b0383166000908152601d60205260409020546127a4908590614951565b11156127f25760405162461bcd60e51b815260206004820181905260248201527f6d6178204e465420706572206d696e7420616d6f756e7420657863656564656460448201526064016111bc565b82601954612800919061497d565b34101561284f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e6473000000000000000000000000000060448201526064016111bc565b6001600160a01b0382166000908152601d602052604081208054859290612877908490614951565b90915550505b6110bc8284612a85565b6000612892826130c4565b9050836001600160a01b0316816001600160a01b0316146128df576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604090208054338082146001600160a01b038816909114176129455761290f8633611dea565b612945576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b038516612985576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129928686866001613810565b801561299d57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b84169003612a2f57600184016000818152600460205260408120549003612a2d576000548114612a2d5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a7d868686600161381c565b505050505050565b610fb5828260405180602001604052806000815250613834565b60008281526015602090815260408083206001600160a01b038516845290915290205460ff16610fb55760008281526015602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612afd3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6127106bffffffffffffffffffffffff82161115612bc75760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c2065786365656460448201527f2073616c6550726963650000000000000000000000000000000000000000000060648201526084016111bc565b6001600160a01b038216612c1d5760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c69642072656365697665720000000000000060448201526064016111bc565b604080518082019091526001600160a01b039092168083526bffffffffffffffffffffffff9091166020909201829052600160a01b90910217601255565b60008281526015602090815260408083206001600160a01b038516845290915290205460ff1615610fb55760008281526015602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6110bc83838360405180602001604052806000815250611bc5565b6008805482919061ff001916610100836002811115612d1a57612d1a6142dd565b021790555050565b6000612d376001546000546000199190030190565b905060008660ff1611612d8c5760405162461bcd60e51b815260206004820152601b60248201527f6e65656420746f206d696e74206174206c656173742031204e4654000000000060448201526064016111bc565b601a54612d9c60ff881683614951565b1115612dea5760405162461bcd60e51b815260206004820152601660248201527f6d6178204e4654206c696d69742065786365656465640000000000000000000060448201526064016111bc565b3360009081527fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed602052604090205460ff166130b7576001601b5460ff166002811115612e3957612e396142dd565b14612e865760405162461bcd60e51b815260206004820152601b60248201527f74686520636f6e7472616374206973206e6f7420574c2053616c65000000000060448201526064016111bc565b8460ff168660ff161115612ee85760405162461bcd60e51b8152602060048201526024808201527f6d6178206d696e7420616d6f756e74207065722073657373696f6e20657863656044820152631959195960e21b60648201526084016111bc565b612ef4828686866120ca565b612f405760405162461bcd60e51b815260206004820152601260248201527f596f7520646f6e2774206861766520574c2e000000000000000000000000000060448201526064016111bc565b601e54601f805460ff808916938a93929116908110612f6157612f61614925565b600091825260208083206001600160a01b038816845260016002909302019190910190526040902054612f97919060ff16614ba3565b60ff161115612fe85760405162461bcd60e51b815260206004820152601c60248201527f6d6178204e46542070657220616464726573732065786365656465640000000060448201526064016111bc565b8560ff16601954612ff9919061497d565b3410156130485760405162461bcd60e51b815260206004820152601d60248201527f696e73756666696369656e742066756e64732e203a20576c206d696e7400000060448201526064016111bc565b601e54601f8054889260ff1690811061306357613063614925565b600091825260208083206001600160a01b0387168452600160029093020191909101905260408120805490919061309e90849060ff16614ba3565b92506101000a81548160ff021916908360ff1602179055505b612a7d828760ff16612a85565b6000818060011161311a5760005481101561311a5760008181526004602052604081205490600160e01b82169003613118575b80600003611e1e5750600019016000818152600460205260409020546130f7565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6014546001600160a01b031633146119915760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111bc565b601480546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b613210600c8261389a565b506040516001600160a01b0382169033907f3b01c97343869ca2757fcc37cdb8f71683b0a7aed858e3755f4529a1db85729290600090a350565b6001600160a01b0382166000908152600a60205260409020805482919060ff1916600183600281111561327f5761327f6142dd565b0217905550336001600160a01b0316826001600160a01b03167f9fdb14457e6a7bd3753c649831b026de987c06e52d16459a928540738c2ea34b836040516132c79190614311565b60405180910390a35050565b6132dc336115bb565b15806132e6575080155b6133325760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420617070726f7665206c6f636b656420746f6b656e0000000060448201526064016111bc565b61333b826138af565b80613344575080155b6133a65760405162461bcd60e51b815260206004820152602d60248201527f5265737472696374417070726f76653a2043616e206e6f7420617070726f766560448201526c103637b1b5b2b2103a37b5b2b760991b60648201526084016111bc565b610fb582826138bb565b6133bb8484846110dc565b6001600160a01b0383163b15611101576133d784848484613939565b611101576040516368d2bf6b60e11b815260040160405180910390fd5b606060178054610fc8906148f1565b606060a06040510180604052602081039150506000815280825b600183039250600a81066030018353600a90048061341d5750819003601f19909101908152919050565b60008061345384613a21565b90506121a18382613a63565b600061346b8383613447565b151560000361347c57506000610f78565b611e1e8383613b15565b60005b828110156111015781600960008686858181106134a8576134a8614925565b60209081029290920135835250810191909152604001600020805460ff191660018360028111156134db576134db6142dd565b02179055508383828181106134f2576134f2614925565b90506020020135336001600160a01b0316613518868685818110611f1257611f12614925565b6001600160a01b03167f80a668baf7ac68b329075f26c37b4428d4aa272c3bd4c9611b25f5fb1c473f7c856040516135509190614311565b60405180910390a48061356281614964565b915050613489565b6000826135778584613b5b565b14949350505050565b61358b600c82613ba8565b506040516001600160a01b0382169033907fbd0af1fe0a2c1c7bb340c17a284a291138979c8eeb797e176dbd1c415199af3c90600090a350565b60006301ffc9a760e01b6001600160e01b03198316148061360f57507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b80610f785750506001600160e01b0319167f5b5e139f000000000000000000000000000000000000000000000000000000001490565b60006001600160e01b031982167f2742b5b9000000000000000000000000000000000000000000000000000000001480610f785750610f78826135c5565b60006001600160e01b031982167f80dfb9af000000000000000000000000000000000000000000000000000000001480610f785750610f7882613645565b60008281526015602090815260408083206001600160a01b038516845290915290205460ff16610fb5576136f4816121bd565b6136ff8360206121cf565b604051602001613710929190614bbc565b60408051601f198184030181529082905262461bcd60e51b82526111bc9160040161425b565b6137408282613bbd565b610fb58282613c39565b6000613755826118fb565b9050336001600160a01b038216146137a7576137718133611dea565b6137a7576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260066020526040808220805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61110184848484613cc4565b61382884848484613d65565b61110184848484613d8f565b61383e8383613db2565b6001600160a01b0383163b156110bc576000548281035b6138686000868380600101945086613939565b613885576040516368d2bf6b60e11b815260040160405180910390fd5b81811061385557816000541461187857600080fd5b6000611e1e836001600160a01b038416613ef9565b6000610f783383613447565b6138c4826138af565b806138cd575080155b61392f5760405162461bcd60e51b815260206004820152602d60248201527f5265737472696374417070726f76653a2043616e206e6f7420617070726f766560448201526c103637b1b5b2b2103a37b5b2b760991b60648201526084016111bc565b610fb58282613fec565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061396e903390899088908890600401614c3d565b6020604051808303816000875af19250505080156139a9575060408051601f3d908101601f191682019092526139a691810190614c79565b60015b613a07573d8080156139d7576040519150601f19603f3d011682016040523d82523d6000602084013e6139dc565b606091505b5080516000036139ff576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506121a1565b6001600160a01b03811660009081526010602052604081205415613a5b57506001600160a01b031660009081526010602052604090205490565b505060115490565b600e5460009060ff16613a7857506001610f78565b613a8183614055565b80611e1e5750600b546040517ff8350ed00000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482018590529091169063f8350ed090604401602060405180830381865afa158015613af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e1e9190614b86565b6000613b20836115bb565b15613b2d57506000610f78565b6001600160a01b0380841660009081526007602090815260408083209386168352929052205460ff16611e1e565b600081815b8451811015613ba057613b8c82868381518110613b7f57613b7f614925565b602002602001015161407f565b915080613b9881614964565b915050613b60565b509392505050565b6000611e1e836001600160a01b0384166140ae565b613bc681611f9c565b15610fb55760405162461bcd60e51b815260206004820152602660248201527f4c6f636b61626c653a2043616e206e6f7420617070726f7665206c6f636b656460448201527f20746f6b656e000000000000000000000000000000000000000000000000000060648201526084016111bc565b6001600160a01b03821615610fb557613c5281836140fd565b610fb55760405162461bcd60e51b815260206004820152602d60248201527f5265737472696374417070726f76653a2054686520636f6e747261637420697360448201527f206e6f7420616c6c6f7765642e0000000000000000000000000000000000000060648201526084016111bc565b6001600160a01b03841615801590613ce457506001600160a01b03831615155b1561110157613cf282611f9c565b156111015760405162461bcd60e51b815260206004820152602760248201527f4c6f636b61626c653a2043616e206e6f74207472616e73666572206c6f636b6560448201527f6420746f6b656e0000000000000000000000000000000000000000000000000060648201526084016111bc565b6001600160a01b03841615611101576000828152600960205260409020805460ff19169055611101565b6001600160a01b03841615611101576000828152600f6020526040812055611101565b6000805490829003613df0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613dfd6000848385613810565b6001600160a01b03831660008181526005602090815260408083208054680100000000000000018802019055848352600490915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b818114613eac57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600101613e74565b5081600003613ee7576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60009081556110bc915084838561381c565b60008181526001830160205260408120548015613fe2576000613f1d6001836149b6565b8554909150600090613f31906001906149b6565b9050818114613f96576000866000018281548110613f5157613f51614925565b9060005260206000200154905080876000018481548110613f7457613f74614925565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613fa757613fa7614c96565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610f78565b6000915050610f78565b613ff5336115bb565b1580613fff575080155b61404b5760405162461bcd60e51b815260206004820152601c60248201527f43616e206e6f7420617070726f7665206c6f636b656420746f6b656e0000000060448201526064016111bc565b610fb5828261410a565b6000610f78600c836001600160a01b03811660009081526001830160205260408120541515611e1e565b600081831061409b576000828152602084905260409020611e1e565b6000838152602083905260409020611e1e565b60008181526001830160205260408120546140f557508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610f78565b506000610f78565b600080613453338561416f565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191016132c7565b6000818152600f60205260408120541561419857506000818152600f6020526040902054610f78565b611e1e83613a21565b6001600160e01b031981168114611b5c57600080fd5b6000602082840312156141c957600080fd5b8135611e1e816141a1565b80356001600160a01b03811681146141eb57600080fd5b919050565b60006020828403121561420257600080fd5b611e1e826141d4565b60005b8381101561422657818101518382015260200161420e565b50506000910152565b6000815180845261424781602086016020860161420b565b601f01601f19169290920160200192915050565b602081526000611e1e602083018461422f565b60006020828403121561428057600080fd5b5035919050565b6000806040838503121561429a57600080fd5b6142a3836141d4565b946020939093013593505050565b600080604083850312156142c457600080fd5b823591506142d4602084016141d4565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60038110611b5c57634e487b7160e01b600052602160045260246000fd5b6020810161431e836142f3565b91905290565b60008060006060848603121561433957600080fd5b614342846141d4565b9250614350602085016141d4565b9150604084013590509250925092565b60008083601f84011261437257600080fd5b50813567ffffffffffffffff81111561438a57600080fd5b6020830191508360208260051b850101111561134657600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156143e4576143e46143a5565b604052919050565b60008060006040848603121561440157600080fd5b833567ffffffffffffffff8082111561441957600080fd5b61442587838801614360565b909550935060209150858201358181111561443f57600080fd5b8601601f8101881361445057600080fd5b803582811115614462576144626143a5565b8060051b92506144738484016143bb565b818152928201840192848101908a85111561448d57600080fd5b928501925b848410156144ab57833582529285019290850190614492565b8096505050505050509250925092565b600080604083850312156144ce57600080fd5b50508035926020909101359150565b6000602082840312156144ef57600080fd5b81356bffffffffffffffffffffffff81168114611e1e57600080fd5b803560ff811681146141eb57600080fd5b60006020828403121561452e57600080fd5b611e1e8261450b565b6020808252825182820181905260009190848201906040850190845b8181101561456f57835183529284019291840191600101614553565b50909695505050505050565b60038110611b5c57600080fd5b60006020828403121561459a57600080fd5b8135611e1e8161457b565b600067ffffffffffffffff8311156145bf576145bf6143a5565b6145d2601f8401601f19166020016143bb565b90508281528383830111156145e657600080fd5b828260208301376000602084830101529392505050565b60006020828403121561460f57600080fd5b813567ffffffffffffffff81111561462657600080fd5b8201601f8101841361463757600080fd5b6121a1848235602084016145a5565b60008060008060006080868803121561465e57600080fd5b6146678661450b565b94506146756020870161450b565b9350604086013567ffffffffffffffff81111561469157600080fd5b61469d88828901614360565b90945092506146b09050606087016141d4565b90509295509295909350565b600080604083850312156146cf57600080fd5b6146d8836141d4565b91506142d46020840161450b565b600080604083850312156146f957600080fd5b614702836141d4565b915060208301356147128161457b565b809150509250929050565b8015158114611b5c57600080fd5b6000806040838503121561473e57600080fd5b614747836141d4565b915060208301356147128161471d565b60006020828403121561476957600080fd5b8135611e1e8161471d565b6000806000806080858703121561478a57600080fd5b614793856141d4565b93506147a1602086016141d4565b925060408501359150606085013567ffffffffffffffff8111156147c457600080fd5b8501601f810187136147d557600080fd5b6147e4878235602084016145a5565b91505092959194509250565b6000806000806060858703121561480657600080fd5b61480f8561450b565b935061481d6020860161450b565b9250604085013567ffffffffffffffff81111561483957600080fd5b61484587828801614360565b95989497509550505050565b6000806040838503121561486457600080fd5b61486d836141d4565b91506142d4602084016141d4565b60008060006040848603121561489057600080fd5b833567ffffffffffffffff8111156148a757600080fd5b6148b386828701614360565b90945092505060208401356148c78161457b565b809150509250925092565b600080600080606085870312156148e857600080fd5b61480f856141d4565b600181811c9082168061490557607f821691505b6020821081036120a357634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b80820180821115610f7857610f7861493b565b6000600182016149765761497661493b565b5060010190565b8082028115828204841417610f7857610f7861493b565b6000826149b157634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610f7857610f7861493b565b601f8211156110bc57600081815260208120601f850160051c810160208610156149f05750805b601f850160051c820191505b81811015612a7d578281556001016149fc565b815167ffffffffffffffff811115614a2957614a296143a5565b614a3d81614a3784546148f1565b846149c9565b602080601f831160018114614a725760008415614a5a5750858301515b600019600386901b1c1916600185901b178555612a7d565b600085815260208120601f198616915b82811015614aa157888601518255948401946001909101908401614a82565b5085821015614abf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600084516020614ae28285838a0161420b565b855191840191614af58184848a0161420b565b8554920191600090614b06816148f1565b60018281168015614b1e5760018114614b3357614b5f565b60ff1984168752821515830287019450614b5f565b896000528560002060005b84811015614b5757815489820152908301908701614b3e565b505082870194505b50929a9950505050505050505050565b600081614b7e57614b7e61493b565b506000190190565b600060208284031215614b9857600080fd5b8151611e1e8161471d565b60ff8181168382160190811115610f7857610f7861493b565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351614bf481601785016020880161420b565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351614c3181602884016020880161420b565b01602801949350505050565b60006001600160a01b03808716835280861660208401525083604083015260806060830152614c6f608083018461422f565b9695505050505050565b600060208284031215614c8b57600080fd5b8151611e1e816141a1565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208343442f90128d82436b645d5aeacd0f76b85091fc93f08a40b808646d09296064736f6c6343000811003368747470733a2f2f616d616e656d65692d6162632e636f6d2f6e6674646174612f6162632f6a736f6e2f