[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "uint256", "name": "_mintThreshold", "type": "uint256" }, { "internalType": "address", "name": "_bulletConfigAddress", "type": "address" }, { "internalType": "address", "name": "_owner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyExists", "type": "error" }, { "inputs": [], "name": "InvalidOwner", "type": "error" }, { "inputs": [], "name": "InvalidRecipient", "type": "error" }, { "inputs": [], "name": "InvalidSender", "type": "error" }, { "inputs": [], "name": "NotFound", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "inputs": [], "name": "UnsafeRecipient", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "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": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "ERC721Approval", "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": "id", "type": "uint256" } ], "name": "NFTTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "collection", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "UpdateMetadata", "type": "event" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_specificTokenURISet", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_specificTokenURIs", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amountOrId", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "availableIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseTokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "bulletConfigAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_reservedQuantity", "type": "uint256" }, { "internalType": "uint256", "name": "_payoutPercentage", "type": "uint256" } ], "name": "configure", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_contract", "type": "address" } ], "name": "contractNFTBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_contract", "type": "address" } ], "name": "contractTokenBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "creator", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isEdition", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintThreshold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "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": "id", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "revokeOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "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": "id", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_creator", "type": "address" }, { "internalType": "string", "name": "_baseTokenURI", "type": "string" }, { "internalType": "bool", "name": "_isEdition", "type": "bool" } ], "name": "setContentDetails", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "_specificTokenURI", "type": "string" } ], "name": "setSpecificTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "state", "type": "bool" } ], "name": "setWhitelist", "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": "swapThreshold", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAvailableIds", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "totalNFTsOwned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalNativeSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_owner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "units", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelist", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" } ]
60e06040523480156200001157600080fd5b506040516200364a3803806200364a8339810160408190526200003491620002e6565b8585858386816001600160a01b03811662000062576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35060008111620001105760405162461bcd60e51b815260206004820152602660248201527f4d696e74207468726573686f6c64206d757374206265206772656174657220746044820152653430b710181760d11b60648201526084015b60405180910390fd5b60016200011e868262000416565b5060026200012d858262000416565b5060c0839052600f819055601260808190526200014c90600a620005f7565b60038190556200015d82856200060f565b6200016991906200060f565b60a05250505060328610159150620001c690505760405162461bcd60e51b815260206004820152601760248201527f4d696e696d756d207175616e74697479206f662035302e000000000000000000604482015260640162000107565b601180546001600160a01b0319166001600160a01b038416179055620001f483662386f26fc100006200060f565b6012555062000629945050505050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200022c57600080fd5b81516001600160401b038082111562000249576200024962000204565b604051601f8301601f19908116603f0116810190828211818310171562000274576200027462000204565b816040528381526020925086838588010111156200029157600080fd5b600091505b83821015620002b5578582018301518183018401529082019062000296565b600093810190920192909252949350505050565b80516001600160a01b0381168114620002e157600080fd5b919050565b60008060008060008060c087890312156200030057600080fd5b86516001600160401b03808211156200031857600080fd5b620003268a838b016200021a565b975060208901519150808211156200033d57600080fd5b506200034c89828a016200021a565b95505060408701519350606087015192506200036b60808801620002c9565b91506200037b60a08801620002c9565b90509295509295509295565b600181811c908216806200039c57607f821691505b602082108103620003bd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200041157600081815260208120601f850160051c81016020861015620003ec5750805b601f850160051c820191505b818110156200040d57828155600101620003f8565b5050505b505050565b81516001600160401b0381111562000432576200043262000204565b6200044a8162000443845462000387565b84620003c3565b602080601f831160018114620004825760008415620004695750858301515b600019600386901b1c1916600185901b1785556200040d565b600085815260208120601f198616915b82811015620004b35788860151825594840194600190910190840162000492565b5085821015620004d25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005395781600019048211156200051d576200051d620004e2565b808516156200052b57918102915b93841c9390800290620004fd565b509250929050565b6000826200055257506001620005f1565b816200056157506000620005f1565b81600181146200057a57600281146200058557620005a5565b6001915050620005f1565b60ff841115620005995762000599620004e2565b50506001821b620005f1565b5060208310610133831016604e8410600b8410161715620005ca575081810a620005f1565b620005d68383620004f8565b8060001904821115620005ed57620005ed620004e2565b0290505b92915050565b60006200060860ff84168362000541565b9392505050565b8082028115828204841417620005f157620005f1620004e2565b60805160a05160c051612fe3620006676000396000818161067301528181610eaf01526121e401526000610416015260006104e00152612fe36000f3fe6080604052600436106102dc5760003560e01c80636dbe6c1f11610184578063a9059cbb116100d6578063d9adc1911161008a578063ef1f3ebb11610064578063ef1f3ebb146108b7578063f2fde38b146108ed578063f655f04c1461090d57600080fd5b8063d9adc1911461080e578063dd62ed3e14610844578063e985e9c51461087c57600080fd5b8063c87b56dd116100bb578063c87b56dd146107b9578063d528d118146107d9578063d547cfb7146107f957600080fd5b8063a9059cbb14610779578063b88d4fde1461079957600080fd5b8063976a8435116101385780639eadd245116101125780639eadd24514610726578063a0712d6814610746578063a22cb4651461075957600080fd5b8063976a8435146106ca5780639b19251a146106e05780639c8dead21461071057600080fd5b806381456f481161016957806381456f48146106615780638da5cb5b1461069557806395d89b41146106b557600080fd5b80636dbe6c1f1461061a57806370a082311461063457600080fd5b80632a55205a1161023d57806342842e0e116101f157806353d6fd59116101cb57806353d6fd59146105ba5780636352211e146105da57806366e3e5e4146105fa57600080fd5b806342842e0e1461056457806342909ff9146105845780634f02c420146105a457600080fd5b8063313ce56711610222578063313ce567146104ce57806336e0f22f146105145780633e32747a1461054457600080fd5b80632a55205a146104785780632b968958146104b757600080fd5b8063081812fc1161029457806318160ddd1161027957806318160ddd14610404578063183296481461043857806323b872dd1461045857600080fd5b8063081812fc146103ae578063095ea7b3146103e457600080fd5b80630445b667116102c55780630445b6671461035357806304bdc76b1461037757806306fdde031461038c57600080fd5b806301ffc9a7146102e157806302d05d3f14610316575b600080fd5b3480156102ed57600080fd5b506103016102fc3660046128b0565b61092d565b60405190151581526020015b60405180910390f35b34801561032257600080fd5b5060135461033b9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161030d565b34801561035f57600080fd5b5061036960125481565b60405190815260200161030d565b34801561038357600080fd5b50600e54610369565b34801561039857600080fd5b506103a1610996565b60405161030d91906128f1565b3480156103ba57600080fd5b5061033b6103c9366004612924565b6007602052600090815260409020546001600160a01b031681565b3480156103f057600080fd5b506103016103ff366004612952565b610a24565b34801561041057600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b34801561044457600080fd5b506103a1610453366004612924565b610b81565b34801561046457600080fd5b5061030161047336600461297e565b610b9a565b34801561048457600080fd5b506104986104933660046129bf565b610c64565b604080516001600160a01b03909316835260208301919091520161030d565b3480156104c357600080fd5b506104cc610c9d565b005b3480156104da57600080fd5b506105027f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161030d565b34801561052057600080fd5b5061030161052f366004612924565b60156020526000908152604090205460ff1681565b34801561055057600080fd5b506104cc61055f3660046129bf565b610d10565b34801561057057600080fd5b506104cc61057f36600461297e565b611010565b34801561059057600080fd5b5060115461033b906001600160a01b031681565b3480156105b057600080fd5b5061036960045481565b3480156105c657600080fd5b506104cc6105d53660046129ef565b6110eb565b3480156105e657600080fd5b5061033b6105f5366004612924565b611140565b34801561060657600080fd5b50610369610615366004612a28565b611194565b34801561062657600080fd5b506013546103019060ff1681565b34801561064057600080fd5b5061036961064f366004612a28565b60056020526000908152604090205481565b34801561066d57600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b3480156106a157600080fd5b5060005461033b906001600160a01b031681565b3480156106c157600080fd5b506103a16111f2565b3480156106d657600080fd5b5061036960035481565b3480156106ec57600080fd5b506103016106fb366004612a28565b600d6020526000908152604090205460ff1681565b34801561071c57600080fd5b50610369600f5481565b34801561073257600080fd5b506104cc610741366004612ae8565b6111ff565b6104cc610754366004612924565b611282565b34801561076557600080fd5b506104cc6107743660046129ef565b611329565b34801561078557600080fd5b50610301610794366004612952565b611395565b3480156107a557600080fd5b506104cc6107b4366004612b4c565b6113a2565b3480156107c557600080fd5b506103a16107d4366004612924565b61146d565b3480156107e557600080fd5b506103696107f4366004612924565b61156f565b34801561080557600080fd5b506103a1611590565b34801561081a57600080fd5b50610369610829366004612a28565b6001600160a01b03166000908152600a602052604090205490565b34801561085057600080fd5b5061036961085f366004612beb565b600660209081526000928352604080842090915290825290205481565b34801561088857600080fd5b50610301610897366004612beb565b600860209081526000928352604080842090915290825290205460ff1681565b3480156108c357600080fd5b506103696108d2366004612a28565b6001600160a01b03166000908152600b602052604090205490565b3480156108f957600080fd5b506104cc610908366004612a28565b61159d565b34801561091957600080fd5b506104cc610928366004612c19565b61165f565b60006001600160e01b031982167f2a55205a00000000000000000000000000000000000000000000000000000000148061099057507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b600180546109a390612c60565b80601f01602080910402602001604051908101604052809291908181526020018280546109cf90612c60565b8015610a1c5780601f106109f157610100808354040283529160200191610a1c565b820191906000526020600020905b8154815290600101906020018083116109ff57829003601f168201915b505050505081565b60006004548211158015610a385750600082115b15610b1c576000828152600960205260409020546001600160a01b0316338114801590610a8957506001600160a01b038116600090815260086020908152604080832033845290915290205460ff16155b15610aa6576040516282b42960e81b815260040160405180910390fd5b600083815260076020908152604091829020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610b78565b3360008181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50600192915050565b601460205260009081526040902080546109a390612c60565b6001600160a01b038316600090815260066020908152604080832033845290915281205482811015610c135760405162461bcd60e51b815260206004820152601560248201527f4e6f7420656e6f75676820616c6c6f77616e63652e000000000000000000000060448201526064015b60405180910390fd5b6000198114610c4b57610c268382612cb0565b6001600160a01b03861660009081526006602090815260408083203384529091529020555b610c568585856116e9565b5060019150505b9392505050565b601354600090819061010090046001600160a01b0316612710610c8885607d612cc3565b610c929190612cda565b915091509250929050565b6000546001600160a01b03163314610cc7576040516282b42960e81b815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b6000546001600160a01b03163314610d3a576040516282b42960e81b815260040160405180910390fd5b60008211610d8a5760405162461bcd60e51b815260206004820152601960248201527f4d757374207072652d6d696e74206174206c6561737420312e000000000000006044820152606401610c0a565b6000610d9461199f565b6040517ffe33b3020000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063fe33b30290602401602060405180830381865afa158015610df3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e179190612cfc565b6001600160a01b03160361100c57610e2d61199f565b6001600160a01b031663789898296040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50505050610e87611a19565b6040517f9f0c1cfc0000000000000000000000000000000000000000000000000000000081527f0000000000000000000000000000000000000000000000000000000000000000600482015260248101839052604481018490526001600160a01b039190911690639f0c1cfc90606401600060405180830381600087803b158015610f1157600080fd5b505af1158015610f25573d6000803e3d6000fd5b5050600054610f4092506001600160a01b0316905083611a6a565b600354600f54610f4e611a19565b6040517fba65a0950000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03919091169063ba65a09590602401602060405180830381865afa158015610fad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd19190612d19565b610fdb9190612cc3565b610fe59190612cc3565b60056000610ff161199f565b6001600160a01b031681526020810191909152604001600020555b5050565b61101c33848484611b28565b6001600160a01b0382163b158015906110c85750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015611097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110bb9190612d32565b6001600160e01b03191614155b156110e657604051633da6393160e01b815260040160405180910390fd5b505050565b6000546001600160a01b03163314611115576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000818152600960205260409020546001600160a01b03168061118f576040517fc5723b5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600354600f546111bb846001600160a01b03166000908152600b602052604090205490565b6111c59190612cc3565b6111cf9190612cc3565b6001600160a01b0383166000908152600560205260409020546109909190612cb0565b600280546109a390612c60565b6000546001600160a01b03163314611229576040516282b42960e81b815260040160405180910390fd5b601380547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b03861602179055601061126c8382612d9d565b506013805460ff19169115159190911790555050565b61128a611a19565b6001600160a01b031663dcafa62b343384600354600f54876112ac9190612cc3565b6112b69190612cc3565b6040516001600160e01b031960e087901b1681526001600160a01b039093166004840152602483019190915260448201526064016000604051808303818588803b15801561130357600080fd5b505af1158015611317573d6000803e3d6000fd5b50505050506113263382611a6a565b50565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000610c5d3384846116e9565b6113ae33868686611b28565b6001600160a01b0384163b158015906114485750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a02906113f89033908a90899089908990600401612e5d565b6020604051808303816000875af1158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190612d32565b6001600160e01b03191614155b1561146657604051633da6393160e01b815260040160405180910390fd5b5050505050565b60008181526015602052604090205460609060ff161561152557600082815260146020526040902080546114a090612c60565b80601f01602080910402602001604051908101604052809291908181526020018280546114cc90612c60565b80156115195780601f106114ee57610100808354040283529160200191611519565b820191906000526020600020905b8154815290600101906020018083116114fc57829003601f168201915b50505050509050919050565b60135460ff161561153d57601080546114a090612c60565b601061154883611daa565b604051602001611559929190612eb1565b6040516020818303038152906040529050919050565b600e818154811061157f57600080fd5b600091825260209091200154905081565b601080546109a390612c60565b6000546001600160a01b031633146115c7576040516282b42960e81b815260040160405180910390fd5b6001600160a01b038116611607576040517f49e27cff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611689576040516282b42960e81b815260040160405180910390fd5b60008281526014602052604090206116a18282612d9d565b50600082815260156020526040808220805460ff1916600117905551839130917fa6ece23869614f8c598d6f336c009ab46cc0540dbb53f41ee8bd29d82dfb4b609190a35050565b60006116f3611a19565b6040517f6fedb78d0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b039190911690636fedb78d90602401602060405180830381865afa158015611752573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117769190612f38565b1561196c576117858484611e4a565b80156117aa575061179461199f565b6001600160a01b0316846001600160a01b031614155b15611957576117b761199f565b6040517fed34045b0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152919091169063ed34045b90602401600060405180830381600087803b15801561181557600080fd5b505af1158015611829573d6000803e3d6000fd5b5050505060006127106118446011546001600160a01b031690565b6001600160a01b0316631a4781746040518163ffffffff1660e01b8152600401602060405180830381865afa158015611881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a59190612d19565b6118af9085612cc3565b6118b99190612cda565b90506118cf85856118ca8487612cb0565b611f3a565b508015611951576118de61199f565b6001600160a01b031663107e9cf1826040518263ffffffff1660e01b815260040161190b91815260200190565b600060405180830381600087803b15801561192557600080fd5b505af1158015611939573d6000803e3d6000fd5b5050505061194f8561194961199f565b83611f3a565b505b50611964565b611962848484611f3a565b505b506001610c5d565b61197461199f565b6001600160a01b0316846001600160a01b03160361199757611962848484611f3a565b506000610c5d565b60006119b36011546001600160a01b031690565b6001600160a01b031663c808ce6a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a149190612cfc565b905090565b6000611a2d6011546001600160a01b031690565b6001600160a01b031663cfdfb1296040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119f0573d6000803e3d6000fd5b600354600f54611a7a9083612cc3565b611a849190612cc3565b6001600160a01b03831660009081526005602052604081208054909190611aac908490612f55565b90915550600090505b818110156110e657611ac68361218b565b826001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051611b0e91815260200190565b60405180910390a380611b2081612f68565b915050611ab5565b6000818152600960205260409020546001600160a01b03848116911614611b915760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206973206e6f74206f776e6572206f66204e46542e00000000006044820152606401610c0a565b6001600160a01b038216611be75760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742073656e6420746f206e756c6c20616464726573732e000000006044820152606401610c0a565b826001600160a01b0316846001600160a01b03161480611c2c57506001600160a01b0380841660009081526008602090815260408083209388168352929052205460ff165b80611c5057506000818152600760205260409020546001600160a01b038581169116145b611c9c5760405162461bcd60e51b815260206004820152601960248201527f4f70657261746f72206973206e6f7420617070726f7665642e000000000000006044820152606401610c0a565b600f54600354611cac9190612cc3565b6001600160a01b03841660009081526005602052604081208054909190611cd4908490612cb0565b9091555050600f546003546001600160a01b0384166000908152600560205260409020805491909202019055611d0a838261236a565b611d148282612547565b80826001600160a01b0316846001600160a01b03167ffd19e66d1a4315847e95661bab80aff36f6801c5b2eeeca82491034bd7660abe60405160405180910390a4816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051611d9c91815260200190565b60405180910390a350505050565b60606000611db78361260f565b600101905060008167ffffffffffffffff811115611dd757611dd7612a45565b6040519080825280601f01601f191660200182016040528015611e01576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8504945084611e0b57509392505050565b6000611e5461199f565b604051637949a40360e01b81526001600160a01b0384811660048301529190911690637949a40390602401602060405180830381865afa158015611e9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec09190612f38565b80610c5d5750611ece61199f565b604051637949a40360e01b81526001600160a01b0385811660048301529190911690637949a40390602401602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5d9190612f38565b6000833b15611f9b5781611f4d85611194565b1015611f9b5760405162461bcd60e51b815260206004820152601960248201527f4e6f7420656e6f75676820746f6b656e2062616c616e63652e000000000000006044820152606401610c0a565b6003546001600160a01b0380861660008181526005602052604080822080549489168352908220549282528691611fd28386612cb0565b90915550506001600160a01b0386166000908152600560205260409020805486019055611ffe876126f1565b158061202157506001600160a01b0387166000908152600a602052604090205415155b156120a5576000600f54846120369190612cc3565b6001600160a01b0389166000908152600560205260409020546120599190612cda565b600f546120669086612cc3565b6120709085612cda565b61207a9190612cb0565b905060005b818110156120a2576120908961271a565b8061209a81612f68565b91505061207f565b50505b6120ae866126f1565b612131576000600f54846120c29190612cc3565b6120cc9083612cda565b600f546120d99086612cc3565b6001600160a01b0389166000908152600560205260409020546120fc9190612cda565b6121069190612cb0565b905060005b8181101561212e5761211c8861218b565b8061212681612f68565b91505061210b565b50505b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161217691815260200190565b60405180910390a35060019695505050505050565b6001600160a01b0381166121cb576040517f9c8d2cd200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e5460009081036122805760048054600101908190557f000000000000000000000000000000000000000000000000000000000000000010156122775760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206d696e74206d6f7265207468616e20676976656e207375707060448201527f6c792e00000000000000000000000000000000000000000000000000000000006064820152608401610c0a565b506004546122d5565b600e805461229090600190612cb0565b815481106122a0576122a0612f81565b90600052602060002001549050600e8054806122be576122be612f97565b600190038181906000526020600020016000905590555b6000818152600960205260409020546001600160a01b031615612324576040517f23369fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61232e8282612547565b60405181906001600160a01b038416906000907ffd19e66d1a4315847e95661bab80aff36f6801c5b2eeeca82491034bd7660abe908290a45050565b6000823b1561243d576001600160a01b0383166000908152600b60205260409020805461239990600190612cb0565b815481106123a9576123a9612f81565b60009182526020808320909101546001600160a01b0386168352600b82526040808420868552600c909352909220548154929350839281106123ed576123ed612f81565b60009182526020808320909101929092556001600160a01b0385168152600b9091526040902080548061242257612422612f97565b60019003818190600052602060002001600090559055612503565b6001600160a01b0383166000908152600a60205260409020805461246390600190612cb0565b8154811061247357612473612f81565b60009182526020808320909101546001600160a01b0386168352600a82526040808420868552600c909352909220548154929350839281106124b7576124b7612f81565b60009182526020808320909101929092556001600160a01b0385168152600a909152604090208054806124ec576124ec612f97565b600190038181906000526020600020016000905590555b6000828152600c60209081526040808320549383528083209390935592815260079092529020805473ffffffffffffffffffffffffffffffffffffffff1916905550565b6000818152600960205260409020805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055813b156125d2576001600160a01b0382166000818152600b602090815260408220805460018181018355828552928420018590559290915290546125bf9190612cb0565b6000828152600c60205260409020555050565b6001600160a01b0382166000818152600a602090815260408220805460018181018355828552928420018590559290915290546125bf9190612cb0565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612658577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310612684576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106126a257662386f26fc10000830492506010015b6305f5e10083106126ba576305f5e100830492506008015b61271083106126ce57612710830492506004015b606483106126e0576064830492506002015b600a83106109905760010192915050565b6001600160a01b0381166000908152600d602052604081205460ff16806109905750813b610990565b6001600160a01b03811661275a576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0381166000908152600a60205260408120805461278090600190612cb0565b8154811061279057612790612f81565b90600052602060002001549050600a6000836001600160a01b03166001600160a01b031681526020019081526020016000208054806127d1576127d1612f97565b600082815260208082208301600019908101839055909201909255828252600c8152604080832083905560098252808320805473ffffffffffffffffffffffffffffffffffffffff1990811690915560079092528083208054909216909155600e80546001810182559083527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd01839055518291906001600160a01b038516907ffd19e66d1a4315847e95661bab80aff36f6801c5b2eeeca82491034bd7660abe908390a45050565b6001600160e01b03198116811461132657600080fd5b6000602082840312156128c257600080fd5b8135610c5d8161289a565b60005b838110156128e85781810151838201526020016128d0565b50506000910152565b60208152600082518060208401526129108160408501602087016128cd565b601f01601f19169190910160400192915050565b60006020828403121561293657600080fd5b5035919050565b6001600160a01b038116811461132657600080fd5b6000806040838503121561296557600080fd5b82356129708161293d565b946020939093013593505050565b60008060006060848603121561299357600080fd5b833561299e8161293d565b925060208401356129ae8161293d565b929592945050506040919091013590565b600080604083850312156129d257600080fd5b50508035926020909101359150565b801515811461132657600080fd5b60008060408385031215612a0257600080fd5b8235612a0d8161293d565b91506020830135612a1d816129e1565b809150509250929050565b600060208284031215612a3a57600080fd5b8135610c5d8161293d565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612a6c57600080fd5b813567ffffffffffffffff80821115612a8757612a87612a45565b604051601f8301601f19908116603f01168101908282118183101715612aaf57612aaf612a45565b81604052838152866020858801011115612ac857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215612afd57600080fd5b8335612b088161293d565b9250602084013567ffffffffffffffff811115612b2457600080fd5b612b3086828701612a5b565b9250506040840135612b41816129e1565b809150509250925092565b600080600080600060808688031215612b6457600080fd5b8535612b6f8161293d565b94506020860135612b7f8161293d565b935060408601359250606086013567ffffffffffffffff80821115612ba357600080fd5b818801915088601f830112612bb757600080fd5b813581811115612bc657600080fd5b896020828501011115612bd857600080fd5b9699959850939650602001949392505050565b60008060408385031215612bfe57600080fd5b8235612c098161293d565b91506020830135612a1d8161293d565b60008060408385031215612c2c57600080fd5b82359150602083013567ffffffffffffffff811115612c4a57600080fd5b612c5685828601612a5b565b9150509250929050565b600181811c90821680612c7457607f821691505b602082108103612c9457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561099057610990612c9a565b808202811582820484141761099057610990612c9a565b600082612cf757634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612d0e57600080fd5b8151610c5d8161293d565b600060208284031215612d2b57600080fd5b5051919050565b600060208284031215612d4457600080fd5b8151610c5d8161289a565b601f8211156110e657600081815260208120601f850160051c81016020861015612d765750805b601f850160051c820191505b81811015612d9557828155600101612d82565b505050505050565b815167ffffffffffffffff811115612db757612db7612a45565b612dcb81612dc58454612c60565b84612d4f565b602080601f831160018114612e005760008415612de85750858301515b600019600386901b1c1916600185901b178555612d95565b600085815260208120601f198616915b82811015612e2f57888601518255948401946001909101908401612e10565b5085821015612e4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001600160a01b03808816835280871660208401525084604083015260806060830152826080830152828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b6000808454612ebf81612c60565b60018281168015612ed75760018114612eec57612f1b565b60ff1984168752821515830287019450612f1b565b8860005260208060002060005b85811015612f125781548a820152908401908201612ef9565b50505082870194505b505050508351612f2f8183602088016128cd565b01949350505050565b600060208284031215612f4a57600080fd5b8151610c5d816129e1565b8082018082111561099057610990612c9a565b600060018201612f7a57612f7a612c9a565b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea264697066735822122060f1e7c539e8e21a932bc8927f45d498f69349f19b82cf82090d29211397819164736f6c6343000811003300000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000e27f23af6329141505b88f65077320a118d21ec90000000000000000000000006dcefd396a949a75b3a646b608eddc7c325b818d0000000000000000000000000000000000000000000000000000000000000006486572657379000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064845524553590000000000000000000000000000000000000000000000000000