UNPKG

@credenza-web3/contracts

Version:

Credenza Contracts

1,654 lines 111 kB
{ "_format": "hh-sol-artifact-1", "contractName": "MembershipPublicLock", "sourceName": "contracts/membership-lock/MembershipPublicLock.sol", "abi": [ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "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": "tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sendTo", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "refund", "type": "uint256" } ], "name": "CancelKey", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "contractAddress", "type": "address" } ], "name": "ContractDeployed", "type": "event" }, { "anonymous": false, "inputs": [], "name": "Disable", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "refundedAmount", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "GasRefunded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "KeyGranterAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "KeyGranterRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "_newManager", "type": "address" } ], "name": "KeyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "LockManagerAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "LockManagerRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" } ], "name": "NewLockSymbol", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldKeyPrice", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "keyPrice", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "oldTokenAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "tokenAddress", "type": "address" } ], "name": "PricingChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "freeTrialLength", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "refundPenaltyBasisPoints", "type": "uint256" } ], "name": "RefundPenaltyChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "newExpiration", "type": "uint256" } ], "name": "RenewKeyPurchase", "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" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "transferFeeBasisPoints", "type": "uint256" } ], "name": "TransferFeeChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "lockAddress", "type": "address" }, { "indexed": false, "internalType": "address", "name": "unlockAddress", "type": "address" } ], "name": "UnlockCallFailed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "tokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "beneficiary", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdrawal", "type": "event" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "KEY_GRANTER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "LOCK_MANAGER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addKeyGranter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addLockManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_approved", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_spender", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "approveBeneficiary", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "beneficiary", "outputs": [ { "internalType": "address payable", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "cancelAndRefund", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "disableLock", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "discountAmountPct", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "expirationDuration", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_keyOwner", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "expireAndRefundFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "freeTrialLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasRefundValue", "outputs": [ { "internalType": "uint256", "name": "_refundValue", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" } ], "name": "getCancelAndRefundValueFor", "outputs": [ { "internalType": "uint256", "name": "refund", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" } ], "name": "getHasValidKey", "outputs": [ { "internalType": "bool", "name": "isValid", "type": "bool" } ], "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": "address", "name": "_account", "type": "address" } ], "name": "getTokenIdFor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_recipients", "type": "address[]" }, { "internalType": "uint256[]", "name": "_expirationTimestamps", "type": "uint256[]" }, { "internalType": "address[]", "name": "_keyManagers", "type": "address[]" } ], "name": "grantKeys", "outputs": [], "stateMutability": "nonpayable", "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 payable", "name": "_lockCreator", "type": "address" }, { "internalType": "uint256", "name": "_expirationDuration", "type": "uint256" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_keyPrice", "type": "uint256" }, { "internalType": "uint256", "name": "_maxNumberOfKeys", "type": "uint256" }, { "internalType": "string", "name": "_lockName", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "isAlive", "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": "account", "type": "address" } ], "name": "isKeyGranter", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isLockManager", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "keyManagerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "keyPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxNumberOfKeys", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "membershipAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "membershipDiscountContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "publicLockVersion", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "address", "name": "_referrer", "type": "address" }, { "internalType": "address", "name": "_keyManager", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "purchase", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "address", "name": "_referrer", "type": "address" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "purchasePriceFor", "outputs": [ { "internalType": "uint256", "name": "minKeyPrice", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "refundPenaltyBasisPoints", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceLockManager", "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": "address", "name": "_granter", "type": "address" } ], "name": "revokeKeyGranter", "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": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "bool", "name": "_approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_baseTokenURI", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_refundValue", "type": "uint256" } ], "name": "setGasRefundValue", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address", "name": "_keyManager", "type": "address" } ], "name": "setKeyManagerOf", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxNumberOfKeys", "type": "uint256" } ], "name": "setMaxNumberOfKeys", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_discountPct", "type": "uint256" }, { "internalType": "address", "name": "_membershipContractAddress", "type": "address" }, { "internalType": "address", "name": "_membershipAddress", "type": "address" } ], "name": "setMembershipDiscountContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tetherContractAddress", "type": "address" } ], "name": "setTetherContractAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tetherContractAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tokenAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_keyOwner", "type": "address" }, { "internalType": "uint256", "name": "_index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "success", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable", "name": "_beneficiary", "type": "address" } ], "name": "updateBeneficiary", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_keyPrice", "type": "uint256" }, { "internalType": "address", "name": "_tokenAddress", "type": "address" } ], "name": "updateKeyPricing", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_lockName", "type": "string" } ], "name": "updateLockName", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_lockSymbol", "type": "string" } ], "name": "updateLockSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_freeTrialLength", "type": "uint256" }, { "internalType": "uint256", "name": "_refundPenaltyBasisPoints", "type": "uint256" } ], "name": "updateRefundPenalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ], "bytecode": "0x60806040526000611c345534801561001657600080fd5b5060405130907f8ffcdc15a283d706d38281f500270d8b5a656918f555de0913d7455e3e6bc1bf90600090a2614a41806100516000396000f3fe6080604052600436106103fe5760003560e01c80636eadde4311610213578063a375cb0511610123578063c87b56dd116100ab578063d547741f1161007a578063d547741f14610c26578063e985e9c514610c46578063f0ba604014610c66578063f3fef3a314610c7b578063f5766b3914610c9b57600080fd5b8063c87b56dd14610baa578063d1bbd49c14610bca578063d250348514610be6578063d32bfb6c14610c0657600080fd5b8063b585a6d5116100f2578063b585a6d514610b15578063b88d4fde14610b35578063ba5a370b14610b55578063bf4a927014610b75578063c1c98d0314610b9557600080fd5b8063a375cb0514610a9e578063a9059cbb14610ab5578063aae4b8f714610ad5578063b11d7ec114610af557600080fd5b80638fb45097116101a657806397aa390a1161017557806397aa390a14610a085780639d76ea5814610a28578063a217fddf14610a49578063a22cb46514610a5e578063a2e4cd2e14610a7e57600080fd5b80638fb450971461097c57806391d148541461099c57806395d89b41146109bc578063970aaeb7146109d157600080fd5b806381a3c943116101e257806381a3c94314610910578063823db6cf146109305780638be4b870146109475780638ca2fbad1461095a57600080fd5b80636eadde431461089957806370a08231146108b957806374b6c106146108d9578063782a4ade146108f057600080fd5b806330176e131161030e5780634f6ccce7116102a1578063564aa99d11610270578063564aa99d146107f557806356e0d51f146108155780636207a8da1461082c5780636352211e146108425780636d8ea5b41461087957600080fd5b80634f6ccce71461077557806352b0f6381461079557806352d6a8e4146107b5578063550ef3a8146107d557600080fd5b806339f46986116102dd57806339f46986146106e35780634136aa351461070357806342842e0e1461071e5780634d025fed1461073e57600080fd5b806330176e13146106615780633032ed711461068157806336568abe146106a257806338af3eed146106c257600080fd5b806318160ddd1161039157806323b872dd1161036057806323b872dd146105b1578063248a9ca3146105d15780632af9162a146106015780632f2ff15d146106215780632f745c591461064157600080fd5b806318160ddd146105375780631a6485101461054d5780631c8a1e201461056e578063231005091461058f57600080fd5b8063097ba333116103cd578063097ba333146104bb5780630aaffd2a146104e957806310e569731461050957806311a4c03a1461052057600080fd5b806301ffc9a71461040a57806306fdde031461043f578063081812fc14610461578063095ea7b31461049957600080fd5b3661040557005b600080fd5b34801561041657600080fd5b5061042a61042536600461441a565b610cbb565b60405190151581526020015b60405180910390f35b34801561044b57600080fd5b50610454610ccc565b60405161043691906146f3565b34801561046d57600080fd5b5061048161047c3660046143de565b610d5b565b6040516001600160a01b039091168152602001610436565b3480156104a557600080fd5b506104b96104b436600461431a565b610dd7565b005b3480156104c757600080fd5b506104db6104d6366004614171565b610f1e565b604051908152602001610436565b3480156104f557600080fd5b506104b961050436600461406e565b610f6a565b34801561051557600080fd5b506104db610c845481565b34801561052c57600080fd5b506104db610c835481565b34801561054357600080fd5b50610c89546104db565b34801561055957600080fd5b5061107354610481906001600160a01b031681565b34801561057a57600080fd5b50610c8654610481906001600160a01b031681565b34801561059b57600080fd5b506104db6000805160206149cc83398151915281565b3480156105bd57600080fd5b506104b96105cc3660046141d4565b610fee565b3480156105dd57600080fd5b506104db6105ec3660046143de565b60009081526097602052604090206001015490565b34801561060d57600080fd5b506104b961061c36600461406e565b611258565b34801561062d57600080fd5b506104b961063c3660046143f6565b6112db565b34801561064d57600080fd5b506104db61065c36600461431a565b611305565b34801561066d57600080fd5b506104b961067c366004614452565b61138d565b34801561068d57600080fd5b50610c8554610481906001600160a01b031681565b3480156106ae57600080fd5b506104b96106bd3660046143f6565b6113ce565b3480156106ce57600080fd5b50610c8a54610481906001600160a01b031681565b3480156106ef57600080fd5b506104b96106fe36600461455c565b61144c565b34801561070f57600080fd5b5061089a5461042a9060ff1681565b34801561072a57600080fd5b506104b96107393660046141d4565b6114c6565b34801561074a57600080fd5b506104816107593660046143de565b611076602052600090815260409020546001600160a01b031681565b34801561078157600080fd5b506104db6107903660046143de565b6114e1565b3480156107a157600080fd5b5061042a6107b036600461406e565b611528565b3480156107c157600080fd5b506104db6107d036600461406e565b611542565b3480156107e157600080fd5b506104b96107f0366004614452565b61154d565b34801561080157600080fd5b506104b961081036600461406e565b61158e565b34801561082157600080fd5b506104db6124055481565b34801561083857600080fd5b50611c34546104db565b34801561084e57600080fd5b5061048161085d3660046143de565b600090815261107560205260409020546001600160a01b031690565b34801561088557600080fd5b5061042a61089436600461406e565b611611565b3480156108a557600080fd5b506104b96108b43660046140b5565b6116dd565b3480156108c557600080fd5b506104db6108d436600461406e565b61184c565b3480156108e557600080fd5b506104db610c885481565b3480156108fc57600080fd5b506104b961090b366004614452565b611894565b34801561091c57600080fd5b506104b961092b36600461432c565b611913565b34801561093c57600080fd5b506104db610c875481565b6104b96109553660046144eb565b611b8d565b34801561096657600080fd5b506104db6000805160206149ec83398151915281565b34801561098857600080fd5b506104b96109973660046144aa565b611fab565b3480156109a857600080fd5b5061042a6109b73660046143f6565b612080565b3480156109c857600080fd5b506104546120ab565b3480156109dd57600080fd5b506104db6109ec36600461406e565b6001600160a01b03166000908152611074602052604090205490565b348015610a1457600080fd5b506104b9610a2336600461408a565b61213e565b348015610a3457600080fd5b506104b154610481906001600160a01b031681565b348015610a5557600080fd5b506104db600081565b348015610a6a57600080fd5b506104b9610a793660046142ed565b6121a2565b348015610a8a57600080fd5b506104b9610a993660046143f6565b61227a565b348015610aaa57600080fd5b506104db6124065481565b348015610ac157600080fd5b5061042a610ad036600461431a565b612412565b348015610ae157600080fd5b5061042a610af036600461406e565b61243a565b348015610b0157600080fd5b506104b9610b103660046143f6565b612454565b348015610b2157600080fd5b5061042a610b3036600461431a565b612518565b348015610b4157600080fd5b506104b9610b50366004614214565b6125dc565b348015610b6157600080fd5b506104b9610b7036600461406e565b612645565b348015610b8157600080fd5b506104b9610b903660046143de565b61269c565b348015610ba157600080fd5b506104b9612740565b348015610bb657600080fd5b50610454610bc53660046143de565b6127cd565b348015610bd657600080fd5b5060405160098152602001610436565b348015610bf257600080fd5b506104b9610c0136600461406e565b6128dc565b348015610c1257600080fd5b506104b9610c213660046143de565b61295f565b348015610c3257600080fd5b506104b9610c413660046143f6565b612a00565b348015610c5257600080fd5b5061042a610c61366004614139565b612a25565b348015610c7257600080fd5b506104b9612abe565b348015610c8757600080fd5b506104b9610c9636600461431a565b612b03565b348015610ca757600080fd5b506104b9610cb63660046143de565b612c90565b6000610cc682612cca565b92915050565b6110798054610cda90614916565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0690614916565b8015610d535780601f10610d2857610100808354040283529160200191610d53565b820191906000526020600020905b815481529060010190602001808311610d3657829003601f168201915b505050505081565b6000818152611075602052604081205482906001600160a01b0316610db55760405162461bcd60e51b815260206004820152600b60248201526a4e4f5f535543485f4b455960a81b60448201526064015b60405180910390fd5b600083815261107760205260409020546001600160a01b031691505b50919050565b61089a5460ff16610dfa5760405162461bcd60e51b8152600401610dac90614817565b80610e058133612cd5565b80610e275750600081815261107760205260409020546001600160a01b031633145b80610e50575060008181526110756020526040902054610e50906001600160a01b031633612a25565b610e6c5760405162461bcd60e51b8152600401610dac90614756565b336001600160a01b0384161415610eb45760405162461bcd60e51b815260206004820152600c60248201526b20a8282927ab22afa9a2a62360a11b6044820152606401610dac565b60008281526110776020908152604080832080546001600160a01b0319166001600160a01b03888116918217909255611075909352818420549151869492909116917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6000610f61858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d4e92505050565b95945050505050565b610f733361243a565b80610f895750610c8a546001600160a01b031633145b610fa55760405162461bcd60e51b8152600401610dac9061478d565b6001600160a01b038116610fcb5760405162461bcd60e51b8152600401610dac90614706565b610c8a80546001600160a01b0319166001600160a01b0392909216919091179055565b61089a5460ff166110115760405162461bcd60e51b8152600401610dac90614817565b8261101b81611611565b6110375760405162461bcd60e51b8152600401610dac9061472f565b816110428133612cd5565b806110645750600081815261107760205260409020546001600160a01b031633145b8061108d57506000818152611075602052604090205461108d906001600160a01b031633612a25565b6110a95760405162461bcd60e51b8152600401610dac90614756565b600083815261107560205260409020546001600160a01b038681169116146111135760405162461bcd60e51b815260206004820152601c60248201527f5452414e534645525f46524f4d3a204e4f545f4b45595f4f574e4552000000006044820152606401610dac565b6001600160a01b038416600090815261107460205260409020541561117a5760405162461bcd60e51b815260206004820152601960248201527f524543495049454e545f414c52454144595f4841535f4b4559000000000000006044820152606401610dac565b6001600160a01b0384166111a05760405162461bcd60e51b8152600401610dac90614706565b836001600160a01b0316856001600160a01b031614156111f55760405162461bcd60e51b815260206004820152601060248201526f2a2920a729a322a92faa27afa9a2a62360811b6044820152606401610dac565b6111fe83612e39565b6001600160a01b03808616600081815261107460205260408082208290559287168082528382208790559251869392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45050505050565b6112706000805160206149ec83398151915233612080565b61128c5760405162461bcd60e51b8152600401610dac906147c2565b6112a46000805160206149cc83398151915282612a00565b6040516001600160a01b038216907f766f6199fea59554b9ff688e413302b9200f85d74811c053c12d945ac6d8dd7a90600090a250565b6000828152609760205260409020600101546112f681612e78565b6113008383612e82565b505050565b60006113108361184c565b8210801561132657506001600160a01b03831615155b61136b5760405162461bcd60e51b815260206004820152601660248201527527a7262cafa7a722afa5a2acafa822a92fa7aba722a960511b6044820152606401610dac565b6001600160a01b038316600090815261107460205260409020545b9392505050565b6113a56000805160206149ec83398151915233612080565b6113c15760405162461bcd60e51b8152600401610dac906147c2565b61130061107b8383613f54565b6001600160a01b038116331461143e5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610dac565b6114488282612f08565b5050565b6114646000805160206149ec83398151915233612080565b6114805760405162461bcd60e51b8152600401610dac906147c2565b60408051838152602081018390527fd6867bc538320e67d7bdc35860c27c08486eb490b4fd9b820fff18fb28381d3c910160405180910390a16124069190915561240555565b611300838383604051806020016040528060008152506125dc565b6000610c895482106115245760405162461bcd60e51b815260206004820152600c60248201526b4f55545f4f465f52414e474560a01b6044820152606401610dac565b5090565b6000610cc66000805160206149cc83398151915283612080565b6000610cc682612f6f565b6115656000805160206149ec83398151915233612080565b6115815760405162461bcd60e51b8152600401610dac906147c2565b6113006110798383613f54565b6115a66000805160206149ec83398151915233612080565b6115c25760405162461bcd60e51b8152600401610dac906147c2565b6115da6000805160206149cc833981519152826112db565b6040516001600160a01b038216907f684f8a71407db0c334454ebe9c9b288549317893a20b10dc779ec5c118dcd12190600090a250565b6001600160a01b038116600090815261107460205260409020541580159061163857919050565b611073546001600160a01b0316156116d557611073546040516370a0823160e01b81526001600160a01b0384811660048301529091169060009082906370a082319060240160206040518083038186803b15801561169557600080fd5b505afa1580156116a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cd9190614492565b119392505050565b506000919050565b600054610100900460ff16158080156116fd5750600054600160ff909116105b806117175750303b158015611717575060005460ff166001145b61177a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610dac565b6000805460ff19166001179055801561179d576000805461ff0019166101001790555b6117a686612fa2565b6117b961089a805460ff19166001179055565b6117c588888787613079565b6117cf838361310c565b6117d7613132565b6117e36103e861240555565b6117ec88613144565b6117fc6380ac58cd60e01b6131cc565b8015611842576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b60006001600160a01b0382166118745760405162461bcd60e51b8152600401610dac90614706565b61187d82611611565b61188857600061188b565b60015b60ff1692915050565b6118ac6000805160206149ec83398151915233612080565b6118c85760405162461bcd60e51b8152600401610dac906147c2565b6118d561107a8383613f54565b507f8868e22e84ebf32da89b2ebcb0ac642816304ea3863b257f240df9098719cb9782826040516119079291906146c4565b60405180910390a15050565b61191c33611528565b8061192b575061192b3361243a565b6119a95760405162461bcd60e51b815260206004820152604360248201527f4d6978696e526f6c65733a2063616c6c657220646f6573206e6f74206861766560448201527f20746865204b65794772616e746572206f72204c6f636b4d616e6167657220726064820152626f6c6560e81b608482015260a401610dac565b60005b85811015611b845760008787838181106119d657634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119eb919061406e565b90506000868684818110611a0f57634e487b7160e01b600052603260045260246000fd5b9050602002013590506000858585818110611a3a57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a4f919061406e565b90506001600160a01b038316611a775760405162461bcd60e51b8152600401610dac90614706565b6001600160a01b0383166000908152611074602052604090205415611ad15760405162461bcd60e51b815260206004820152601060248201526f414c52454144595f4f574e535f4b455960801b6044820152606401610dac565b610c898054906000611ae28361494b565b9091555050610c8954611af5848261324b565b611aff818361328a565b6040516001600160a01b0383169082907f9d2895c45a420624de863a2f437b022d879f457bf7a829044055a10c5a6fd5e390600090a360405181906001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4505050508080611b7c9061494b565b9150506119ac565b50505050505050565b61089a5460ff16611bb05760405162461bcd60e51b8152600401610dac90614817565b610c8954610c885411611bf55760405162461bcd60e51b815260206004820152600d60248201526c1313d0d2d7d4d3d31117d3d555609a1b6044820152606401610dac565b6001600160a01b038516611c1b5760405162461bcd60e51b8152600401610dac90614706565b6001600160a01b0385166000908152611074602052604090205415611c745760405162461bcd60e51b815260206004820152600f60248201526e414c52454144595f4841535f4b455960881b6044820152606401610dac565b610c898054906000611c858361494b565b9091555050610c8954611c98868261324b565b611ca2818561328a565b60405181906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46000611d1d878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d4e92505050565b6104b1549091506000906001600160a01b031615611dca57506104b1546040516323b872dd60e01b8152336004820