[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AlreadyInitialized", "type": "error" }, { "inputs": [], "name": "ApprovalCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "DNAlreadyInitialized", "type": "error" }, { "inputs": [], "name": "InsufficientAllowance", "type": "error" }, { "inputs": [], "name": "InsufficientBalance", "type": "error" }, { "inputs": [], "name": "LinkMirrorContractFailed", "type": "error" }, { "inputs": [], "name": "Locked", "type": "error" }, { "inputs": [], "name": "MaxBalanceLimitReached", "type": "error" }, { "inputs": [], "name": "MirrorAddressIsZero", "type": "error" }, { "inputs": [], "name": "NewOwnerIsZeroAddress", "type": "error" }, { "inputs": [], "name": "NoHandoverRequest", "type": "error" }, { "inputs": [], "name": "SenderNotMirror", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TotalSupplyOverflow", "type": "error" }, { "inputs": [], "name": "TransferCallerNotOwnerNorApproved", "type": "error" }, { "inputs": [], "name": "TransferFromIncorrectOwner", "type": "error" }, { "inputs": [], "name": "TransferToZeroAddress", "type": "error" }, { "inputs": [], "name": "Unauthorized", "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": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverCanceled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "OwnershipHandoverRequested", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "oldOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "RolesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "target", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "status", "type": "bool" } ], "name": "SkipNFTSet", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [], "name": "ADMIN_ROLE", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "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": "baseURILocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cancelOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "completeOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "gasBurnFactor", "outputs": [ { "internalType": "uint32", "name": "", "type": "uint32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "gasBurnFactorLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "a", "type": "address" } ], "name": "getSkipNFT", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "grantRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAllRoles", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "hasAnyRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "mirror", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "isWhitelisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lockBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockGasBurnFactor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockGasWhitelist", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockMaxBalanceLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "lockNameAndSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxBalanceLimit", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxBalanceLimitLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mirrorERC721", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nameAndSymbolLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "result", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "pendingOwner", "type": "address" } ], "name": "ownershipHandoverExpiresAt", "outputs": [ { "internalType": "uint256", "name": "result", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "renounceRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "requestOwnershipHandover", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" }, { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "name": "revokeRoles", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "rolesOf", "outputs": [ { "internalType": "uint256", "name": "roles", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "baseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint32", "name": "gasBurnFactor_", "type": "uint32" } ], "name": "setGasBurnFactor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "value", "type": "uint8" } ], "name": "setMaxBalanceLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" } ], "name": "setNameAndSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "skipNFT", "type": "bool" } ], "name": "setSkipNFT", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" }, { "internalType": "bool", "name": "status", "type": "bool" } ], "name": "setWhitelist", "outputs": [], "stateMutability": "nonpayable", "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": "result", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "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": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "whitelistLocked", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b506200001d3262000023565b6200032a565b6200002e81620000b7565b6200003b816001620000f3565b60408051808201909152600b81526a444e343034204e6974726f60a81b60208201526000906200006c90826200025e565b50604080518082019091526005815264221a181a2760d91b60208201526001906200009890826200025e565b50506003805464ffffffffff60281b191667c350230000000000179055565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b6200017f826200013e836200012e836001600160a01b0316600090815268a20d6e21d0e525531060205260409020546001600160581b031690565b6001600160581b03169062000183565b6001600160a01b0391909116600090815268a20d6e21d0e52553106020526040902080546001600160581b0319166001600160581b03909216919091179055565b5050565b6000811515620001988460571c600116151590565b151514620001b2576a800000000000000000000092909218915b5090919050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620001e457607f821691505b6020821081036200020557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200025957600081815260208120601f850160051c81016020861015620002345750805b601f850160051c820191505b81811015620002555782815560010162000240565b5050505b505050565b81516001600160401b038111156200027a576200027a620001b9565b62000292816200028b8454620001cf565b846200020b565b602080601f831160018114620002ca5760008415620002b15750858301515b600019600386901b1c1916600185901b17855562000255565b600085815260208120601f198616915b82811015620002fb57888601518255948401946001909101908401620002da565b50858210156200031a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612c02806200033a6000396000f3fe60806040526004361061028c5760003560e01c806353df5c7c1161015a578063af6900c3116100c1578063d73c1fb31161007a578063d73c1fb314610b59578063dd62ed3e14610b7a578063e436744514610bc8578063f04e283e14610be9578063f2fde38b14610bfc578063fee81cf414610c0f57610293565b8063af6900c314610aaf578063b19de39f14610ac4578063b698206914610ae4578063bbefa83a14610b04578063c4d66de814610b19578063c87b56dd14610b3957610293565b806370a082311161011357806370a0823114610a24578063715018a614610a4457806375b238fc14610a4c5780638da5cb5b14610a6157806395d89b4114610a7a578063a9059cbb14610a8f57610293565b806353df5c7c1461099857806354d1f13d146109ad57806355f804b3146109b55780635a446215146109d55780635d148e5c146109f55780636338cb8a14610a0f57610293565b8063274e430b116101fe57806347f618a5116101b757806347f618a51461089b5780634a4ee7b1146108bb5780634ef41efc146108ce578063514e62fc146109085780635327bba31461093f57806353d6fd591461097857610293565b8063274e430b146107df5780632a6a935d146107ff5780632de948071461081f578063313ce567146108525780633af32abf146108665780633ccfd60b1461088657610293565b8063183a4f6e11610250578063183a4f6e146107455780631c10893f146107585780631cd64df41461076b57806323b848ff146107a257806323b872dd146107b757806325692962146107d757610293565b806304dfe79d1461066357806306fdde031461069d578063095ea7b3146106bf578063180434a3146106ef57806318160ddd1461070e57610293565b3661029357005b68a20d6e21d0e525530860003560e01c63e985e9c58190036103395760018201546001600160a01b031633146102dc5760405163ce5a776b60e01b815260040160405180910390fd5b60443610156102ea57600080fd5b6004356001600160a01b038181166000908152600385016020908152604080832060243594851684529091529020546103369060ff1661032b57600061032e565b60015b60ff16610c42565b50505b80636352211e0361039e5760018201546001600160a01b031633146103715760405163ce5a776b60e01b815260040160405180910390fd5b602436101561037f57600080fd5b60043561039c61038e82610c4c565b6001600160a01b0316610c42565b505b8063e5eb36c80361040b5760018201546001600160a01b031633146103d65760405163ce5a776b60e01b815260040160405180910390fd5b60843610156103e457600080fd5b6004356024356044356064356103fc84848484610c83565b6104066001610c42565b505050505b8063813500fc036104a55760018201546001600160a01b031633146104435760405163ce5a776b60e01b815260040160405180910390fd5b606436101561045157600080fd5b6001600160a01b03604435818116600090815268a20d6e21d0e525530b6020908152604080832060043595861684529091529020805460ff19166024351515908117909155906104a16001610c42565b5050505b8063d10b6e0c036105065760018201546001600160a01b031633146104dd5760405163ce5a776b60e01b815260040160405180910390fd5b60643610156104eb57600080fd5b60043560243560443561050261038e848484610cca565b5050505b8063081812fc0361055d5760018201546001600160a01b0316331461053e5760405163ce5a776b60e01b815260040160405180910390fd5b602436101561054c57600080fd5b60043561055b61038e82610dc2565b505b8063f5b100ea036105e55760018201546001600160a01b031633146105955760405163ce5a776b60e01b815260040160405180910390fd5b60243610156105a357600080fd5b6004356105e36105de826001600160a01b0316600090815268a20d6e21d0e5255310602052604090205463ffffffff600160801b9091041690565b610c42565b505b8063e2c792810361064c5760018201546001600160a01b0316331461061d5760405163ce5a776b60e01b815260040160405180910390fd5b600436101561062b57600080fd5b68a20d6e21d0e52553085461064c90600160401b900463ffffffff16610c42565b8063b7a94eb803610661576106616001610c42565b005b34801561066f57600080fd5b506003546106869065010000000000900460ff1681565b60405160ff90911681526020015b60405180910390f35b3480156106a957600080fd5b506106b2610e0e565b6040516106949190612736565b3480156106cb57600080fd5b506106df6106da36600461279b565b610ea0565b6040519015158152602001610694565b3480156106fb57600080fd5b506003546106df90610100900460ff1681565b34801561071a57600080fd5b5068a20d6e21d0e525530854600160601b90046001600160601b03165b604051908152602001610694565b6106616107533660046127c5565b610f16565b61066161076636600461279b565b610f23565b34801561077757600080fd5b506106df61078636600461279b565b638b78c6d8600c90815260009290925260209091205481161490565b3480156107ae57600080fd5b50610661610f39565b3480156107c357600080fd5b506106df6107d23660046127de565b610f5b565b610661610ffe565b3480156107eb57600080fd5b506106df6107fa36600461281a565b61104e565b34801561080b57600080fd5b5061066161081a366004612845565b61109d565b34801561082b57600080fd5b5061073761083a36600461281a565b638b78c6d8600c908152600091909152602090205490565b34801561085e57600080fd5b506012610686565b34801561087257600080fd5b506106df61088136600461281a565b6110a7565b34801561089257600080fd5b506106616110c0565b3480156108a757600080fd5b506003546106df9062010000900460ff1681565b6106616108c936600461279b565b6110d4565b3480156108da57600080fd5b5068a20d6e21d0e5255309546001600160a01b03165b6040516001600160a01b039091168152602001610694565b34801561091457600080fd5b506106df61092336600461279b565b638b78c6d8600c90815260009290925260209091205416151590565b34801561094b57600080fd5b5060035461096390600160301b900463ffffffff1681565b60405163ffffffff9091168152602001610694565b34801561098457600080fd5b50610661610993366004612860565b6110e6565b3480156109a457600080fd5b5061066161112b565b610661611146565b3480156109c157600080fd5b506106616109d03660046128d5565b611182565b3480156109e157600080fd5b506106616109f0366004612917565b6111be565b348015610a0157600080fd5b506003546106df9060ff1681565b348015610a1b57600080fd5b50610661611215565b348015610a3057600080fd5b50610737610a3f36600461281a565b611232565b610661611265565b348015610a5857600080fd5b50610737600181565b348015610a6d57600080fd5b50638b78c6d819546108f0565b348015610a8657600080fd5b506106b2611279565b348015610a9b57600080fd5b506106df610aaa36600461279b565b611288565b348015610abb57600080fd5b5061066161129e565b348015610ad057600080fd5b50610661610adf366004612983565b6112bf565b348015610af057600080fd5b50610661610aff3660046129a9565b61131e565b348015610b1057600080fd5b50610661611379565b348015610b2557600080fd5b50610661610b3436600461281a565b611398565b348015610b4557600080fd5b506106b2610b543660046127c5565b6113d2565b348015610b6557600080fd5b506003546106df906301000000900460ff1681565b348015610b8657600080fd5b50610737610b953660046129cc565b6001600160a01b03918216600090815268a20d6e21d0e525530d6020908152604080832093909416825291909152205490565b348015610bd457600080fd5b506003546106df90600160201b900460ff1681565b610661610bf736600461281a565b6114cc565b610661610c0a36600461281a565b611509565b348015610c1b57600080fd5b50610737610c2a36600461281a565b63389a75e1600c908152600091909152602090205490565b8060005260206000f35b6000610c5782611530565b610c745760405163677510db60e11b815260040160405180910390fd5b610c7d8261154d565b92915050565b610c8f848484846115a2565b610c99848461190e565b826001600160a01b0316846001600160a01b031614610cc457610cc484670de0b6b3a76400006119bd565b50505050565b600068a20d6e21d0e52553088168a20d6e21d0e525530a81610d1868a20d6e21d0e525530f600189901b5b600381901c600090815260209290925260409091205460059190911b60e0161c90565b63ffffffff1681526020810191909152604001600020546001600160a01b03908116915084168114610d8c576001600160a01b03808216600090815260038401602090815260408083209388168352929052205460ff16610d8c576040516367d9dca160e11b815260040160405180910390fd5b60008581526004909201602052604090912080546001600160a01b0387166001600160a01b031990911617905590509392505050565b6000610dcd82611530565b610dea5760405163677510db60e11b815260040160405180910390fd5b50600090815268a20d6e21d0e525530c60205260409020546001600160a01b031690565b606060008054610e1d906129f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e49906129f6565b8015610e965780601f10610e6b57610100808354040283529160200191610e96565b820191906000526020600020905b815481529060010190602001808311610e7957829003601f168201915b5050505050905090565b60008068a20d6e21d0e525530833600081815260058301602090815260408083206001600160a01b038a16808552908352928190208890555187815293945090927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b610f203382611a38565b50565b610f2b611a44565b610f358282611a5f565b5050565b6001610f4481611a6b565b506003805464ff000000001916600160201b179055565b6001600160a01b038316600090815268a20d6e21d0e525530d6020908152604080832033845290915281205468a20d6e21d0e5255308906000198114610fe75780841115610fbc576040516313be252b60e01b815260040160405180910390fd5b6001600160a01b03861660009081526005830160209081526040808320338452909152902084820390555b610ff2868686611a9e565b50600195945050505050565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b6001600160a01b038116600090815268a20d6e21d0e5255310602052604081208054600160581b9004600116820361108a57823b5b9392505050565b54600160581b9004600216151592915050565b610f203382611ad6565b6000610c7d6110b583611b66565b60571c600116151590565b60016110cb81611a6b565b610f2033611b92565b6110dc611a44565b610f358282611a38565b60016110f181611a6b565b6003546301000000900460ff161561111c576040516303cb96db60e21b815260040160405180910390fd5b6111268383611bae565b505050565b600161113681611a6b565b506003805460ff19166001179055565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b600161118d81611a6b565b60035460ff16156111b1576040516303cb96db60e21b815260040160405180910390fd5b6002610cc4838583612a86565b60016111c981611a6b565b600354610100900460ff16156111f2576040516303cb96db60e21b815260040160405180910390fd5b60006111ff858783612a86565b50600161120d838583612a86565b505050505050565b600161122081611a6b565b506003805461ff001916610100179055565b6001600160a01b0316600090815268a20d6e21d0e52553106020526040902054600160a01b90046001600160601b031690565b61126d611a44565b6112776000611bd3565b565b606060018054610e1d906129f6565b6000611295338484611a9e565b50600192915050565b60016112a981611a6b565b506003805463ff00000019166301000000179055565b60016112ca81611a6b565b60035462010000900460ff16156112f4576040516303cb96db60e21b815260040160405180910390fd5b506003805463ffffffff909216600160301b0269ffffffff00000000000019909216919091179055565b600161132981611a6b565b600354600160201b900460ff1615611354576040516303cb96db60e21b815260040160405180910390fd5b506003805460ff909216650100000000000265ff000000000019909216919091179055565b600161138481611a6b565b506003805462ff0000191662010000179055565b60016113a381611a6b565b60006113b9670de0b6b3a7640000612710612b5c565b9050336113c7828286611c11565b610cc4816001611bae565b60606113dd82611530565b6113fa5760405163677510db60e11b815260040160405180910390fd5b60028054611407906129f6565b1590506114c757610c7d6002805461141e906129f6565b80601f016020809104026020016040519081016040528092919081815260200182805461144a906129f6565b80156114975780601f1061146c57610100808354040283529160200191611497565b820191906000526020600020905b81548152906001019060200180831161147a57829003601f168201915b5050505050604051806040016040528060048152602001637b69647d60e01b8152506114c285611d9f565b611de3565b919050565b6114d4611a44565b63389a75e1600c52806000526020600c2080544211156114fc57636f5e88186000526004601cfd5b60009055610f2081611bd3565b611511611a44565b8060601b61152757637448fbae6000526004601cfd5b610f2081611bd3565b60008061153c8361154d565b6001600160a01b0316141592915050565b600068a20d6e21d0e525530868a20d6e21d0e525530a8261157b68a20d6e21d0e525530f600187901b610cf5565b63ffffffff1681526020810191909152604001600020546001600160a01b03169392505050565b68a20d6e21d0e52553086001600160a01b0384166115d357604051633a954ecd60e21b815260040160405180910390fd5b60008160020160006115ec84600701610cf58860011b90565b63ffffffff1681526020810191909152604001600020546001600160a01b039081169150861681146116305760405162a1148160e81b815260040160405180910390fd5b856001600160a01b0316836001600160a01b0316146116b4576001600160a01b03808716600090815260038401602090815260408083209387168352929052205460ff166116b45760008481526004830160205260409020546001600160a01b038481169116146116b457604051632ce44b5f60e11b815260040160405180910390fd5b60006116bf87611f06565b905060006116cc87611f06565b8254909150670de0b6b3a76400009083906014906116fb908490600160a01b90046001600160601b0316612b73565b82546101009290920a6001600160601b0381810219909316918316021790915582546001600160a01b038116670de0b6b3a7640000600160a01b92839004841601909216021782555061175f60078501600188901b61175a848b611f72565b612015565b6000868152600485016020908152604080832080546001600160a01b03191690556001600160a01b038b168352600687018252808320855463ffffffff60801b198116600160801b9182900463ffffffff90811660001901908116909202178755631fffffff600382901c168552925282205460059190911b60e0161c6001600160a01b038a166000908152600687016020526040902063ffffffff919091169150611823906118176007880160018b811b01610cf5565b63ffffffff1683612015565b8154600163ffffffff600160801b80840482169283019091160263ffffffff60801b199092169190911783556118756007870161186384600190811b0190565b61175a60078a0160018d811b01610cf5565b6001600160a01b0389166000908152600687016020526040902061189a90828a612015565b6118ad6007870160018a811b0183612015565b5050866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef670de0b6b3a76400006040516118fc91815260200190565b60405180910390a35050505050505050565b60035465010000000000900460ff16600081900361192b57505050565b80670de0b6b3a76400000261193f83611232565b1161194957505050565b6119556110b583611b66565b1561195f57505050565b638b78c6d819546001600160a01b0316836001600160a01b03160361198357505050565b638b78c6d8600c90815260008490526020902054600116156119a457505050565b6040516303cab2ff60e21b815260040160405180910390fd5b600354600160301b900463ffffffff1660008190036119db57505050565b6000806119fa846119eb87611b66565b6001600160581b031690612049565b9150915060028110611a275780800283026301312d00808210611a1b578091505b611a24826120c0565b50505b611a3185836120f4565b5050505050565b610f3582826000612139565b638b78c6d819543314611277576382b429006000526004601cfd5b610f3582826001612139565b638b78c6d819543314610f2057638b78c6d8600c5233600052806020600c205416610f20576382b429006000526004601cfd5b611aa9838383612192565b611ab3838361190e565b816001600160a01b0316836001600160a01b0316146111265761112683826119bd565b6000611ae183611f06565b8054909150600160581b9004600216151582151514611b1c57805460ff600160581b80830482166002189091160260ff60581b199091161781555b826001600160a01b03167fb5a1de456fff688115a4f75380060c23c8532d14ff85f687cc871456d642039383604051611b59911515815260200190565b60405180910390a2505050565b6001600160a01b0316600090815268a20d6e21d0e525531060205260409020546001600160581b031690565b60003860003847855af1610f205763b12d13eb6000526004601cfd5b610f3582611bce83611bbf86611b66565b6001600160581b03169061265f565b6120f4565b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b68a20d6e21d0e52553088054600160201b900463ffffffff1615611c4857604051633ab534b960e21b815260040160405180910390fd5b6001600160a01b038216611c6f576040516339a84a7b60e01b815260040160405180910390fd5b611c7882612685565b805467ffffffff000000001916600160201b1781556001810180546001600160a01b0384166001600160a01b03199091161790558315610cc4576001600160a01b038316611cd957604051633a954ecd60e21b815260040160405180910390fd5b6b0de0b6b39983494c589bffff841115611d065760405163e5cfe95760e01b815260040160405180910390fd5b80546bffffffffffffffffffffffff60601b1916600160601b6001600160601b038616021781556000611d3884611f06565b80546001600160a01b03908116600160a01b6001600160601b038916021782556040518781529192508516906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3611a31846001611ad6565b60606080604051019050602081016040526000815280600019835b928101926030600a8206018453600a900480611dba575050819003601f19909101908152919050565b60608351835183516020870196506020860195506020850194506020604051019350828701838311611eb557600183820301600060208510611e2457508388205b601f851660200360031b89515b8b51818118831c611e9c578315611e6b5783888e2014611e6b57808a5260019c8d019c90990198848d10611e655750611eb0565b50611e31565b60005b8b8101518b820152602001878110611e6e57509b87019b988601988715611e9c57848d10611e655750611eb0565b895260019b8c019b90980197838c10611e31575b505050505b84935060206040510194508781038585030192505b80881015611ee5578751845260209788019790930192611eca565b50506000818401908152602001604052601f19909201918252509392505050565b6001600160a01b038116600090815268a20d6e21d0e5255310602052604081208054909168a20d6e21d0e525530891600160581b90046001169003611f6c576001833b15611f52576002175b825460ff909116600160581b0260ff60581b199091161782555b50919050565b8154600160601b900463ffffffff1668a20d6e21d0e5255308600082900361200e5780548190600090611faa9063ffffffff16612b93565b825463ffffffff8083166101009490940a848102910219909116179092558554600160601b820263ffffffff60601b199091161786556000908152600283016020526040902080546001600160a01b0386166001600160a01b031990911617905591505b5092915050565b826020528160031c60005260406000206007831660051b815463ffffffff8482841c188116831b8218845550505050505050565b600080605784901c60011615612064575082905060006120b9565b637fffffff620151804204811690603886901c1666ffffffffffffff8616818314612090575081905060005b60389190911b66ffffffffffffff602887901c811692909201918216179350620de0b690049150505b9250929050565b80600117601052605b8104607882110260005b8181146120e957601080802090526001016120d3565b5050601051610f2057fe5b6001600160a01b0391909116600090815268a20d6e21d0e52553106020526040902080546affffffffffffffffffffff19166001600160581b03909216919091179055565b638b78c6d8600c52826000526020600c2080548381178361215b575080841681185b80835580600c5160601c7f715ad5ce61fc9595c7b415289d59cf203f23a94fa06f04af7e489a0a76e1fe26600080a3505050505050565b6001600160a01b0382166121b957604051633a954ecd60e21b815260040160405180910390fd5b68a20d6e21d0e525530860006121ce85611f06565b905060006121db85611f06565b90506122166040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b825463ffffffff600160801b808304821660808501528454041660a08301526001600160601b03600160a01b909104166040820181905285111561226d57604051631e9acf1760e31b815260040160405180910390fd5b6040810180518690039081905283546001600160601b03808316600160a01b9081026001600160a01b03938416178755855481810483168a016060870181905290921602911617835560808201516122d391670de0b6b3a7640000900480821191030290565b81528154600160581b900460021660000361234257856001600160a01b0316876001600160a01b03160361230f57805160808201510360a08201525b61233c670de0b6b3a764000082606001518161232d5761232d612bb6565b048260a0015180821191030290565b60208201525b600061238c82602001518360000151016040805180820190915260608152600060208201526040805101828152806020018360051b81016040528183528083602001525050919050565b825190915015612486576001600160a01b0388166000908152600686016020526040902060808301518351875463ffffffff600160401b808304821684900382160263ffffffff60401b199092169190911789558754918303908116600160801b0263ffffffff60801b199092169190911787555b60001991909101600381901c600090815260208490526040812054919291600584901b60e0161c63ffffffff16905061244089600701826000806126b7565b600081815260048a016020908152604090912080546001600160a01b0319169055858101805160089390931b60608f901b17600117835291019052808203612401575050505b6020820151156125e7576001600160a01b03871660009081526006860160209081526040822060a0850151918501519092908201906124c5878c611f72565b8954602088015163ffffffff60401b19821663ffffffff600160401b80850482169093018116909202178c55895463ffffffff60801b1916600160801b86831602178a55919250670de0b6b3a7640000600160601b82046001600160601b03160491600160201b909104165b6125428b600701610cf58360011b90565b63ffffffff1615612561576001018181111561255c575060015b612531565b61256c868683612015565b6125818b6007018285888060010199506126b7565b6125ab878e8360008360200151818360081b8560601b171781526020810185602001525050505050565b600101818111156125ba575060015b838503612531578a5463ffffffff909116600160201b0267ffffffff0000000019909116178a5550505050505b805151156126085760018501546126089082906001600160a01b03166126fd565b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161264e91815260200190565b60405180910390a350505050505050565b60006001605784901c1615158215151461267e57600160571b92909218915b5090919050565b630f4599e560005233602052602060006024601c6000855af160016000511416610f205763d125259c6000526004601cfd5b8163ffffffff168160201b17846020528360021c60005260406000206003851660061b815467ffffffffffffffff8482841c188116831b82188455505050505050505050565b81516040810363263c69d68152602080820152815160051b604401915060208183601c84016000875af1600182511416610cc457600081fd5b600060208083528351808285015260005b8181101561276357858101830151858201604001528201612747565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146114c757600080fd5b600080604083850312156127ae57600080fd5b6127b783612784565b946020939093013593505050565b6000602082840312156127d757600080fd5b5035919050565b6000806000606084860312156127f357600080fd5b6127fc84612784565b925061280a60208501612784565b9150604084013590509250925092565b60006020828403121561282c57600080fd5b61108382612784565b803580151581146114c757600080fd5b60006020828403121561285757600080fd5b61108382612835565b6000806040838503121561287357600080fd5b61287c83612784565b915061288a60208401612835565b90509250929050565b60008083601f8401126128a557600080fd5b50813567ffffffffffffffff8111156128bd57600080fd5b6020830191508360208285010111156120b957600080fd5b600080602083850312156128e857600080fd5b823567ffffffffffffffff8111156128ff57600080fd5b61290b85828601612893565b90969095509350505050565b6000806000806040858703121561292d57600080fd5b843567ffffffffffffffff8082111561294557600080fd5b61295188838901612893565b9096509450602087013591508082111561296a57600080fd5b5061297787828801612893565b95989497509550505050565b60006020828403121561299557600080fd5b813563ffffffff8116811461108357600080fd5b6000602082840312156129bb57600080fd5b813560ff8116811461108357600080fd5b600080604083850312156129df57600080fd5b6129e883612784565b915061288a60208401612784565b600181811c90821680612a0a57607f821691505b602082108103611f6c57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b601f82111561112657600081815260208120601f850160051c81016020861015612a675750805b601f850160051c820191505b8181101561120d57828155600101612a73565b67ffffffffffffffff831115612a9e57612a9e612a2a565b612ab283612aac83546129f6565b83612a40565b6000601f841160018114612ae65760008515612ace5750838201355b600019600387901b1c1916600186901b178355611a31565b600083815260209020601f19861690835b82811015612b175786850135825560209485019460019092019101612af7565b5086821015612b345760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c7d57610c7d612b46565b6001600160601b0382811682821603908082111561200e5761200e612b46565b600063ffffffff808316818103612bac57612bac612b46565b6001019392505050565b634e487b7160e01b600052601260045260246000fdfea26469706673582212207f804c0944106ebd97b06391e61d73456053d27e94b618331a2abdd4ceaf40a964736f6c63430008140033