[ { "inputs": [ { "internalType": "uint256", "name": "_mintTimelockEpoch", "type": "uint256" }, { "internalType": "uint256", "name": "_price", "type": "uint256" }, { "internalType": "contract PirateRandom", "name": "_random", "type": "address" } ], "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": false, "internalType": "bool", "name": "state", "type": "bool" } ], "name": "MintStateChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "time", "type": "uint256" } ], "name": "MintTimelockEpochUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "MintWhitelistAddressAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "MintWhitelistAddressRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "state", "type": "bool" } ], "name": "MintWhitelistChanged", "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": false, "internalType": "string", "name": "tierName", "type": "string" } ], "name": "TierAdded", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "activeCap", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "uint8", "name": "_boost", "type": "uint8" }, { "internalType": "uint8", "name": "_discount", "type": "uint8" }, { "internalType": "uint256", "name": "_cap", "type": "uint256" } ], "name": "addTier", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "addToWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "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": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "chestHolders", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "chestHoldersList", "outputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "tierId", "type": "uint256" }, { "internalType": "uint256", "name": "mintedTime", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "chests", "outputs": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "tierId", "type": "uint256" }, { "internalType": "uint256", "name": "mintedTime", "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": "account", "type": "address" } ], "name": "getOwnedChestIds", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "getOwnedChests", "outputs": [ { "components": [ { "internalType": "address", "name": "holder", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "uint256", "name": "tierId", "type": "uint256" }, { "internalType": "uint256", "name": "mintedTime", "type": "uint256" } ], "internalType": "struct IPirateNFT.Chest[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tier", "type": "uint256" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintTierFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "mintTimelockAddress", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintTimelockEpoch", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintWhitelist", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "mintWhitelistActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "price", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "removeFromWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "royaltyAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "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": "_mintTimelockEpoch", "type": "uint256" } ], "name": "setMintTimelockEpoch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyAddress", "type": "address" } ], "name": "setRoyaltyAddress", "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": "tiers", "outputs": [ { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "uint8", "name": "boost", "type": "uint8" }, { "internalType": "uint8", "name": "discount", "type": "uint8" }, { "internalType": "uint256", "name": "cap", "type": "uint256" }, { "internalType": "uint256", "name": "sold", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "tiersCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "toggleActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "toggleWhitelistActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "whitelist", "outputs": [ { "internalType": "bool", "name": "whitelisted", "type": "bool" }, { "internalType": "uint256", "name": "minted", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "contract IERC20", "name": "token", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" } ], "name": "withdrawERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "withdrawNative", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526013805460ff199081169091556015805490911690553480156200002757600080fd5b50604051620052d9380380620052d98339810160408190526200004a916200069c565b604080518082018252600c81526b1412549055114810d21154d560a21b60208083019182528351808501909452600584526410d21154d560da1b9084015281519192916200009b91600091620005f6565b508051620000b1906001906020840190620005f6565b505050620000ce620000c8620005a060201b60201c565b620005a4565b600c839055600b829055600880546001600160a01b0319166001600160a01b0383161790556040805160e081018252600f60a082018181526e10d85c1d185a5b89dcc810da195cdd608a1b60c084015282526005602080840191909152600a938301939093526109c46060830152600060808301819052805282528051805191927ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37592620001809284920190620005f6565b50602082810151600183018054604086015160ff9081166101000261ffff19909216931692909217919091179055606083015160028301556080909201516003909101556000808052600f9091527ff4803e074bd026baaf6ed2e288c9515f68c72fb7216eebdd7cae1718a53ec37754600980549192909162000205908490620006e2565b90915550506040805160e081018252601060a082019081526f14dad95b195d1bdb89dcc810da195cdd60821b60c08301528152600a602080830191909152600f9282018390526105466060830152600060808301819052600190529182528051805191927f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f926200029a9284920190620005f6565b5060208281015160018084018054604087015160ff9081166101000261ffff1990921694169390931792909217909155606084015160028401556080909301516003909201919091556000918252600f90527f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f89154600980549192909162000323908490620006e2565b90915550506040805160e081018252600d60a082019081526c14da5c995b89dcc810da195cdd609a1b60c08301528152600f602080830182905260149383019390935261028a60608301526000608083018190526002905282528051805191927fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead92620003b49284920190620005f6565b50602082810151600183018054604086015160ff9081166101000261ffff1990921693169290921791909117905560608301516002808401919091556080909301516003909201919091556000918252600f90527fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeeaf5460098054919290916200043f908490620006e2565b90915550506040805160e081018252601060a082019081526f141bdcd95a591bdb89dcc810da195cdd60821b60c0830152815260146020808301919091526019928201929092526101f4606082015260006080820181905260039052600f82528051805191927f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc829682892620004d69284920190620005f6565b50602082810151600183018054604086015160ff9081166101000261ffff19909216931692909217919091179055606083015160028301556080909201516003918201556000908152600f9091527f45f76dafbbad695564362934e24d72eedc57f9fc1a65f39bca62176cc829682a5460098054919290916200055b908490620006e2565b90915550506004600a556006546001600160a01b0316601560016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505062000744565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b828054620006049062000707565b90600052602060002090601f01602090048101928262000628576000855562000673565b82601f106200064357805160ff191683800117855562000673565b8280016001018555821562000673579182015b828111156200067357825182559160200191906001019062000656565b506200068192915062000685565b5090565b5b8082111562000681576000815560010162000686565b600080600060608486031215620006b1578283fd5b83516020850151604086015191945092506001600160a01b0381168114620006d7578182fd5b809150509250925092565b600082198211156200070257634e487b7160e01b81526011600452602481fd5b500190565b600181811c908216806200071c57607f821691505b602082108114156200073e57634e487b7160e01b600052602260045260246000fd5b50919050565b614b8580620007546000396000f3fe6080604052600436106103085760003560e01c806350d824591161019a578063a035b1fe116100e1578063c87b56dd1161008a578063e985e9c511610064578063e985e9c514610948578063f2fde38b1461099e578063fce89454146109be57600080fd5b8063c87b56dd146108f3578063d547cfb714610913578063e43252d71461092857600080fd5b8063b88d4fde116100bb578063b88d4fde1461089d578063bc9f63a1146108bd578063c5dff2c7146108d357600080fd5b8063a035b1fe14610835578063a22cb4651461084b578063ad2f852a1461086b57600080fd5b80638ab1d6811161014357806395d89b411161011d57806395d89b41146107af578063976c6904146107c45780639b19251a146107e457600080fd5b80638ab1d681146107445780638da5cb5b146107645780639456fbcc1461078f57600080fd5b806370a082311161017457806370a08231146106fa578063715018a61461071a57806385054b371461072f57600080fd5b806350d82459146106b15780636352211e146106c75780636a627842146106e757600080fd5b806329c68dc11161025e5780633638577e1161020757806342842e0e116101e157806342842e0e1461064f578063478eb4641461066f57806350431ce41461069c57600080fd5b80633638577e1461057f57806336541cc51461059f5780633aaad0621461062f57600080fd5b80632e03e72c116102385780632e03e72c1461051857806330176e131461054557806335c4339e1461056557600080fd5b806329c68dc1146104af5780632a55205a146104c45780632d3df31f1461051057600080fd5b8063095ea7b3116102c057806318160ddd1161029a57806318160ddd1461046057806323b872dd1461047557806325fd90f31461049557600080fd5b8063095ea7b3146103fc5780630f3f2f001461041c57806317f0a0851461044a57600080fd5b806306d254da116102f157806306d254da1461037357806306fdde0314610395578063081812fc146103b757600080fd5b806301ffc9a71461030d578063039af9eb14610342575b600080fd5b34801561031957600080fd5b5061032d6103283660046144ee565b6109eb565b60405190151581526020015b60405180910390f35b34801561034e57600080fd5b5061036261035d3660046145cf565b610ad0565b6040516103399594939291906148bd565b34801561037f57600080fd5b5061039361038e366004614369565b610b8d565b005b3480156103a157600080fd5b506103aa610c5f565b60405161033991906148aa565b3480156103c357600080fd5b506103d76103d23660046145cf565b610cf1565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610339565b34801561040857600080fd5b506103936104173660046144a7565b610dcb565b34801561042857600080fd5b5061043c6104373660046144a7565b610f58565b604051908152602001610339565b34801561045657600080fd5b5061043c600c5481565b34801561046c57600080fd5b5061043c610f89565b34801561048157600080fd5b506103936104903660046143bd565b610f99565b3480156104a157600080fd5b5060155461032d9060ff1681565b3480156104bb57600080fd5b5061039361103a565b3480156104d057600080fd5b506104e46104df366004614623565b611127565b6040805173ffffffffffffffffffffffffffffffffffffffff9093168352602083019190915201610339565b61039361116e565b34801561052457600080fd5b5061043c610533366004614369565b600d6020526000908152604090205481565b34801561055157600080fd5b50610393610560366004614538565b611400565b34801561057157600080fd5b5060135461032d9060ff1681565b34801561058b57600080fd5b5061039361059a36600461456b565b611498565b3480156105ab57600080fd5b506105f86105ba3660046145cf565b600e60205260009081526040902080546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff90921692909184565b6040805173ffffffffffffffffffffffffffffffffffffffff90951685526020850193909352918301526060820152608001610339565b34801561063b57600080fd5b5061039361064a3660046145cf565b611639565b34801561065b57600080fd5b5061039361066a3660046143bd565b6116f6565b34801561067b57600080fd5b5061068f61068a366004614369565b611711565b60405161033991906147ec565b3480156106a857600080fd5b506103936117cb565b3480156106bd57600080fd5b5061043c60095481565b3480156106d357600080fd5b506103d76106e23660046145cf565b611903565b6103936106f5366004614369565b6119b5565b34801561070657600080fd5b5061043c610715366004614369565b611c10565b34801561072657600080fd5b50610393611cde565b34801561073b57600080fd5b50610393611d69565b34801561075057600080fd5b5061039361075f366004614369565b611e50565b34801561077057600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff166103d7565b34801561079b57600080fd5b506103936107aa366004614526565b611f4d565b3480156107bb57600080fd5b506103aa612078565b3480156107d057600080fd5b506103936107df3660046145ff565b612087565b3480156107f057600080fd5b5061081e6107ff366004614369565b6012602052600090815260409020805460019091015460ff9091169082565b604080519215158352602083019190915201610339565b34801561084157600080fd5b5061043c600b5481565b34801561085757600080fd5b5061039361086636600461447a565b612112565b34801561087757600080fd5b506015546103d790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156108a957600080fd5b506103936108b83660046143fd565b61211d565b3480156108c957600080fd5b5061043c600a5481565b3480156108df57600080fd5b506105f86108ee3660046144a7565b6121c5565b3480156108ff57600080fd5b506103aa61090e3660046145cf565b612222565b34801561091f57600080fd5b506103aa61231b565b34801561093457600080fd5b50610393610943366004614369565b6123a9565b34801561095457600080fd5b5061032d610963366004614385565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205460ff1690565b3480156109aa57600080fd5b506103936109b9366004614369565b6124c6565b3480156109ca57600080fd5b506109de6109d9366004614369565b6125f3565b6040516103399190614866565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480610a7e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610aca57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b600f60205260009081526040902080548190610aeb906149a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610b17906149a3565b8015610b645780601f10610b3957610100808354040283529160200191610b64565b820191906000526020600020905b815481529060010190602001808311610b4757829003601f168201915b50505060018401546002850154600390950154939460ff80831695610100909304169350915085565b60065473ffffffffffffffffffffffffffffffffffffffff163314610c13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6015805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b606060008054610c6e906149a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9a906149a3565b8015610ce75780601f10610cbc57610100808354040283529160200191610ce7565b820191906000526020600020905b815481529060010190602001808311610cca57829003601f168201915b5050505050905090565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff16610da2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610c0a565b5060009081526004602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610dd682611903565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610c0a565b3373ffffffffffffffffffffffffffffffffffffffff82161480610ebd5750610ebd8133610963565b610f49576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c0a565b610f53838361266c565b505050565b60106020528160005260406000208181548110610f7457600080fd5b90600052602060002001600091509150505481565b6000610f9460075490565b905090565b610fa3338261270c565b61102f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610c0a565b610f5383838361287c565b60065473ffffffffffffffffffffffffffffffffffffffff1633146110bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6015805460ff808216157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921682179092556040519116151581527f992fe84c8bbd52855b22035907ca1f9e1d6bcbb390bc81150808e8443d01668c906020015b60405180910390a1565b6015546000908190610100900473ffffffffffffffffffffffffffffffffffffffff16612710611159856102ee614923565b611163919061490f565b915091509250929050565b60135460ff16611200576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5049524154452043484553543a2057686974656c697374204d696e742069732060448201527f6e6f7420616374697665000000000000000000000000000000000000000000006064820152608401610c0a565b3360009081526012602052604090205460ff1661129f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f5052494154452043484553543a20596f7520617265206e6f742077686974656c60448201527f69737465642100000000000000000000000000000000000000000000000000006064820152608401610c0a565b33600090815260126020526040902060010154600211611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5049524154452043484553543a20596f752063616e206f6e6c79206d696e742060448201527f32206368657374730000000000000000000000000000000000000000000000006064820152608401610c0a565b600b5434146113d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f5049524154452043484553543a206d73672e76616c7565206973206e6f74206360448201527f6f727265637400000000000000000000000000000000000000000000000000006064820152608401610c0a565b3360009081526012602052604081206001018054916113f0836149f7565b91905055506113fe33612aee565b565b60065473ffffffffffffffffffffffffffffffffffffffff163314611481576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b8051611494906014906020840190614207565b5050565b60065473ffffffffffffffffffffffffffffffffffffffff163314611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6040805160a08101825285815260ff8086166020808401919091529085168284015260608201849052600060808301819052600a548152600f825292909220815180519293919261156d9284920190614207565b506020820151600182018054604085015160ff908116610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000090921693169290921791909117905560608201516002820155608090910151600390910155600980548291906000906115e29084906148f7565b9091555050600a80549060006115f7836149f7565b91905055507f3af6956b4e5a72eb65ad9fc850aa68b00dfe58a4d16a341d923f62d2eeceb9218460405161162b91906148aa565b60405180910390a150505050565b60065473ffffffffffffffffffffffffffffffffffffffff1633146116ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b600c8190556040518181527f3f731d2eadc5a5e838e4aba707972113dceab0bef8c443596b0858e1b23dae05906020015b60405180910390a150565b610f538383836040518060200160405280600081525061211d565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601160209081526040808320805482518185028101850190935280835260609492939192909184015b828210156117c05760008481526020908190206040805160808101825260048602909201805473ffffffffffffffffffffffffffffffffffffffff168352600180820154848601526002820154928401929092526003015460608301529083529092019101611756565b505050509050919050565b60065473ffffffffffffffffffffffffffffffffffffffff16331461184c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b60405147906000908190339084908381818185875af1925050503d8060008114611892576040519150601f19603f3d011682016040523d82523d6000602084013e611897565b606091505b509150915081610f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f4661696c656420746f2073656e640000000000000000000000000000000000006044820152606401610c0a565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610aca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e00000000000000000000000000000000000000000000006064820152608401610c0a565b60155460ff16611a21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f5049524154452043484553543a204d696e74206973206e6f74206163746976656044820152606401610c0a565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260409020544211611ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5049524154452043484553543a20746f206973206d696e742074696d656c6f6360448201527f6b656400000000000000000000000000000000000000000000000000000000006064820152608401610c0a565b336000908152600d60205260409020544211611b73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f5049524154452043484553543a206d73672e73656e646572206973206d696e7460448201527f2074696d656c6f636b65640000000000000000000000000000000000000000006064820152608401610c0a565b600b543414611c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f5049524154452043484553543a206d73672e76616c7565206973206e6f74206360448201527f6f727265637400000000000000000000000000000000000000000000000000006064820152608401610c0a565b611c0d81612aee565b50565b600073ffffffffffffffffffffffffffffffffffffffff8216611cb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f2061646472657373000000000000000000000000000000000000000000006064820152608401610c0a565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526003602052604090205490565b60065473ffffffffffffffffffffffffffffffffffffffff163314611d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6113fe6000612cac565b60065473ffffffffffffffffffffffffffffffffffffffff163314611dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6013805460ff808216157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090921682179092556040519116151581527f3e68116f0f89b4c141650b981ec3f7d113b6d36fbec368aa3eb003bd3450043b9060200161111d565b60065473ffffffffffffffffffffffffffffffffffffffff163314611ed1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b73ffffffffffffffffffffffffffffffffffffffff811660008181526012602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f553f3105caa6180f90d9aea45fff93a3125af21ff5aa23c855fd19303e8307d191016116eb565b60065473ffffffffffffffffffffffffffffffffffffffff163314611fce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152611494908390839073ffffffffffffffffffffffffffffffffffffffff8316906370a082319060240160206040518083038186803b15801561203b57600080fd5b505afa15801561204f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207391906145e7565b612d23565b606060018054610c6e906149a3565b60065473ffffffffffffffffffffffffffffffffffffffff163314612108576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b6114948282612db0565b611494338383613126565b612127338361270c565b6121b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f7665640000000000000000000000000000006064820152608401610c0a565b6121bf84848484613254565b50505050565b601160205281600052604060002081815481106121e157600080fd5b6000918252602090912060049091020180546001820154600283015460039093015473ffffffffffffffffffffffffffffffffffffffff9092169450925084565b60008181526002602052604090205460609073ffffffffffffffffffffffffffffffffffffffff166122d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f5049524154452043484553543a20546f6b656e20646f6573206e6f742065786960448201527f73740000000000000000000000000000000000000000000000000000000000006064820152608401610c0a565b6000828152600e60205260409020600201546014906122f4906132f7565b6040516020016123059291906146c6565b6040516020818303038152906040529050919050565b60148054612328906149a3565b80601f0160208091040260200160405190810160405280929190818152602001828054612354906149a3565b80156123a15780601f10612376576101008083540402835291602001916123a1565b820191906000526020600020905b81548152906001019060200180831161238457829003601f168201915b505050505081565b60065473ffffffffffffffffffffffffffffffffffffffff16331461242a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b60408051808201825260018082526000602080840182815273ffffffffffffffffffffffffffffffffffffffff87168084526012835292869020945185547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690151517855551939092019290925591519081527f47ef8cd495acaa1e959a247a91863ba93bfb7122e8bcaf28390186b8b89faa4791016116eb565b60065473ffffffffffffffffffffffffffffffffffffffff163314612547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c0a565b73ffffffffffffffffffffffffffffffffffffffff81166125ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c0a565b611c0d81612cac565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602090815260409182902080548351818402810184019094528084526060939283018282801561266057602002820191906000526020600020905b81548152602001906001019080831161264c575b50505050509050919050565b600081815260046020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906126c682611903565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008181526002602052604081205473ffffffffffffffffffffffffffffffffffffffff166127bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e00000000000000000000000000000000000000006064820152608401610c0a565b60006127c883611903565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061283757508373ffffffffffffffffffffffffffffffffffffffff1661281f84610cf1565b73ffffffffffffffffffffffffffffffffffffffff16145b80612874575073ffffffffffffffffffffffffffffffffffffffff80821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661289c82611903565b73ffffffffffffffffffffffffffffffffffffffff161461293f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e00000000000000000000000000000000000000000000006064820152608401610c0a565b73ffffffffffffffffffffffffffffffffffffffff82166129e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610c0a565b6129ec838383613477565b6129f760008261266c565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600360205260408120805460019290612a2d908490614960565b909155505073ffffffffffffffffffffffffffffffffffffffff82166000908152600360205260408120805460019290612a689084906148f7565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6009546008546000919073ffffffffffffffffffffffffffffffffffffffff1663b464631b84612b1d60075490565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815273ffffffffffffffffffffffffffffffffffffffff9092166004830152602482015260440160206040518083038186803b158015612b8657600080fd5b505afa158015612b9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbe91906145e7565b612bc89190614a50565b9050600080805b600a548160ff161015612c435760ff81166000908152600f6020526040902060028101546003909101548114612c3057838510158015612c175750612c1481856148f7565b85105b15612c23578160ff1692505b612c2d81856148f7565b93505b5080612c3b81614a30565b915050612bcf565b50600c54612c5190426148f7565b73ffffffffffffffffffffffffffffffffffffffff85166000818152600d60205260409020919091553314612c9e57600c54612c8d90426148f7565b336000908152600d60205260409020555b6121bf8161ffff1685612db0565b6006805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610f53908490613a85565b6000828152600f6020526040902060038101546002909101541415612e31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5049524154452043484553543a205469657220736f6c64206f757400000000006044820152606401610c0a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260059030906370a082319060240160206040518083038186803b158015612e9957600080fd5b505afa158015612ead573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed191906145e7565b10612f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f5052494154452043484553543a20596f752063616e6e6f74206d696e74206d6f60448201527f7265207468616e2035206e6f64657300000000000000000000000000000000006064820152608401610c0a565b6000612f6960075490565b9050612f79600780546001019055565b6040805160808101825273ffffffffffffffffffffffffffffffffffffffff848116808352600090815260106020908152848220548185019081528486018981524260608701908152888552600e8452878520965187547fffffffffffffffffffffffff0000000000000000000000000000000000000000169616959095178655905160018601555160028501559151600393840155868152600f90915291822001805491613027836149f7565b909155505073ffffffffffffffffffffffffffffffffffffffff8083166000818152601160209081526040808320868452600e8352818420815460018181018455928652848620825460049092020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909816178755818101548783015560028082015481890155600391820154978201979097559484526010835281842080549182018155845282842001869055878352600f909152902090810154910154141561311c576000838152600f60205260408120600201546009805491929091613116908490614960565b90915550505b610f538282613b91565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c0a565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526005602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61325f84848461287c565b61326b84848484613bab565b6121bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610c0a565b60608161333757505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115613361578061334b816149f7565b915061335a9050600a8361490f565b915061333b565b60008167ffffffffffffffff8111156133a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156133cd576020820181803683370190505b5090505b8415612874576133e2600183614960565b91506133ef600a86614a50565b6133fa9060306148f7565b60f81b818381518110613436577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350613470600a8661490f565b94506133d1565b73ffffffffffffffffffffffffffffffffffffffff831615610f53578273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f5049524154452043484553543a20596f752063616e6e6f74207472616e73666560448201527f72206120636865737420746f20796f757273656c662c2073696c6c7920676f6f60648201527f7365210000000000000000000000000000000000000000000000000000000000608482015260a401610c0a565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601060205260409020546135a790600190614960565b6000828152600e60205260409020600101541461385f5773ffffffffffffffffffffffffffffffffffffffff8316600090815260106020526040812080546135f190600190614960565b81548110613628577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8716835260119091526040822080549193509061366a90600190614960565b815481106136a1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60009182526020808320604080516080810182526004909402909101805473ffffffffffffffffffffffffffffffffffffffff90811685526001808301548686015260028301548685015260039092015460608601528a16855260108352818520888652600e9093529320909201548254919350849291811061374d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209091019290925573ffffffffffffffffffffffffffffffffffffffff87168152601182526040808220868352600e90935290206001015481548392919081106137c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602080832084516004939093020180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909316929092178255838101516001808401919091556040808601516002850155606090950151600390930192909255868352600e90528282208101549482529190200191909155505b73ffffffffffffffffffffffffffffffffffffffff831660009081526010602052604090208054806138ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000828152602080822083017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810183905590920190925573ffffffffffffffffffffffffffffffffffffffff85168252601190526040902080548061394a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000828152602080822060047fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90940184810290910180547fffffffffffffffffffffffff000000000000000000000000000000000000000090811682556001828101869055600280840187905560039384018790559390975573ffffffffffffffffffffffffffffffffffffffff898116808752601080875260408089208054808d018255818b52898b20018d9055838a5260118952818a208d8b52600e8a52918a208254808e018455928b52898b20815493909c02909b018054871692909516919091178455898b0154848c0155898701549684019690965588850154929094019190915586549091168117909555939092529190915254613a6e9190614960565b6000828152600e6020526040902060010155505050565b6000613ae7826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613daa9092919063ffffffff16565b805190915015610f535780806020019051810190613b0591906144d2565b610f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c0a565b611494828260405180602001604052806000815250613dc3565b600073ffffffffffffffffffffffffffffffffffffffff84163b15613d9f576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290613c229033908990889088906004016147a3565b602060405180830381600087803b158015613c3c57600080fd5b505af1925050508015613c8a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252613c879181019061450a565b60015b613d54573d808015613cb8576040519150601f19603f3d011682016040523d82523d6000602084013e613cbd565b606091505b508051613d4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610c0a565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050612874565b506001949350505050565b6060613db98484600085613e66565b90505b9392505050565b613dcd8383613fe6565b613dda6000848484613bab565b610f53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610c0a565b606082471015613ef8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610c0a565b843b613f60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c0a565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613f8991906146aa565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b5091509150613fdb8282866141b4565b979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff8216614063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c0a565b60008181526002602052604090205473ffffffffffffffffffffffffffffffffffffffff16156140ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c0a565b6140fb60008383613477565b73ffffffffffffffffffffffffffffffffffffffff821660009081526003602052604081208054600192906141319084906148f7565b909155505060008181526002602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606083156141c3575081613dbc565b8251156141d35782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0a91906148aa565b828054614213906149a3565b90600052602060002090601f016020900481019282614235576000855561427b565b82601f1061424e57805160ff191683800117855561427b565b8280016001018555821561427b579182015b8281111561427b578251825591602001919060010190614260565b5061428792915061428b565b5090565b5b80821115614287576000815560010161428c565b600067ffffffffffffffff808411156142bb576142bb614ac2565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561430157614301614ac2565b8160405280935085815286868601111561431a57600080fd5b858560208301376000602087830101525050509392505050565b600082601f830112614344578081fd5b613dbc838335602085016142a0565b803560ff8116811461436457600080fd5b919050565b60006020828403121561437a578081fd5b8135613dbc81614af1565b60008060408385031215614397578081fd5b82356143a281614af1565b915060208301356143b281614af1565b809150509250929050565b6000806000606084860312156143d1578081fd5b83356143dc81614af1565b925060208401356143ec81614af1565b929592945050506040919091013590565b60008060008060808587031215614412578081fd5b843561441d81614af1565b9350602085013561442d81614af1565b925060408501359150606085013567ffffffffffffffff81111561444f578182fd5b8501601f8101871361445f578182fd5b61446e878235602084016142a0565b91505092959194509250565b6000806040838503121561448c578182fd5b823561449781614af1565b915060208301356143b281614b13565b600080604083850312156144b9578182fd5b82356144c481614af1565b946020939093013593505050565b6000602082840312156144e3578081fd5b8151613dbc81614b13565b6000602082840312156144ff578081fd5b8135613dbc81614b21565b60006020828403121561451b578081fd5b8151613dbc81614b21565b60008060408385031215614397578182fd5b600060208284031215614549578081fd5b813567ffffffffffffffff81111561455f578182fd5b61287484828501614334565b60008060008060808587031215614580578081fd5b843567ffffffffffffffff811115614596578182fd5b6145a287828801614334565b9450506145b160208601614353565b92506145bf60408601614353565b9396929550929360600135925050565b6000602082840312156145e0578081fd5b5035919050565b6000602082840312156145f8578081fd5b5051919050565b60008060408385031215614611578182fd5b8235915060208301356143b281614af1565b60008060408385031215614635578182fd5b50508035926020909101359150565b6000815180845261465c816020860160208601614977565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081516146a0818560208601614977565b9290920192915050565b600082516146bc818460208701614977565b9190910192915050565b600080845482600182811c9150808316806146e257607f831692505b602080841082141561471b577f4e487b710000000000000000000000000000000000000000000000000000000087526022600452602487fd5b81801561472f576001811461475e5761478a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0086168952848901965061478a565b60008b815260209020885b868110156147825781548b820152908501908301614769565b505084890196505b50505050505061479a818561468e565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526147e26080830184614644565b9695505050505050565b602080825282518282018190526000919060409081850190868401855b82811015614859578151805173ffffffffffffffffffffffffffffffffffffffff168552868101518786015285810151868601526060908101519085015260809093019290850190600101614809565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561489e57835183529284019291840191600101614882565b50909695505050505050565b602081526000613dbc6020830184614644565b60a0815260006148d060a0830188614644565b60ff9687166020840152949095166040820152606081019290925260809091015292915050565b6000821982111561490a5761490a614a64565b500190565b60008261491e5761491e614a93565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561495b5761495b614a64565b500290565b60008282101561497257614972614a64565b500390565b60005b8381101561499257818101518382015260200161497a565b838111156121bf5750506000910152565b600181811c908216806149b757607f821691505b602082108114156149f1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a2957614a29614a64565b5060010190565b600060ff821660ff811415614a4757614a47614a64565b60010192915050565b600082614a5f57614a5f614a93565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611c0d57600080fd5b8015158114611c0d57600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611c0d57600080fdfea2646970667358221220413d5f7084f861d9bcab91b4b7b823881225b3a819e9cfc05b70de105a50e26364736f6c63430008040033000000000000000000000000000000000000000000000000000000000000001e00000000000000000000000000000000000000000000000022b1c8c1227a000000000000000000000000000008eeeaf11c0c342a5bd9d90cc73a154c66a85bc6