[ { "inputs": [ { "internalType": "address", "name": "hypcTokenAddress", "type": "address" }, { "internalType": "uint256", "name": "startingNumber", "type": "uint256" }, { "internalType": "uint256", "name": "endingNumber", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "CreatingTooManyTokens", "type": "error" }, { "inputs": [], "name": "InvalidEndingNumber", "type": "error" }, { "inputs": [], "name": "InvalidNumberRange", "type": "error" }, { "inputs": [], "name": "InvalidStartingNumber", "type": "error" }, { "inputs": [], "name": "InvalidToken", "type": "error" }, { "inputs": [], "name": "InvalidTokenLevelIndex", "type": "error" }, { "inputs": [], "name": "SenderMustOwnToken", "type": "error" }, { "inputs": [], "name": "SkipLevelsMustBePositive", "type": "error" }, { "inputs": [], "name": "SkipLevelsTooLarge", "type": "error" }, { "inputs": [], "name": "TokenLevelTooHigh", "type": "error" }, { "inputs": [], "name": "TokenLevelTooLow", "type": "error" }, { "inputs": [], "name": "TokenLevelTooLowToSplit", "type": "error" }, { "inputs": [], "name": "TokenNotBurned", "type": "error" }, { "inputs": [], "name": "TokenNotMinted", "type": "error" }, { "inputs": [], "name": "TooManyRootTokens", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "rootNumber", "type": "uint256" } ], "name": "AddRootToken", "type": "event" }, { "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": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "targetNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "backingAmount", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "totalAmount", "type": "uint256" } ], "name": "AssignNumber", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "targetString", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "backingAmount", "type": "uint256" } ], "name": "AssignString", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "burnString", "type": "string" } ], "name": "Burn", "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": "uint256", "name": "level", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "hypcAmount", "type": "uint256" } ], "name": "Redeem", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "level", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "skipLevels", "type": "uint256" } ], "name": "SplitHeldTokens", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "level", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "hypcAmount", "type": "uint256" } ], "name": "Swap", "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": "LEVEL_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_LEVEL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_LEVEL", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "SIX_DECIMALS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "_lastBlockAssigned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokens", "type": "uint256" } ], "name": "addRootTokens", "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": "uint256", "name": "tokenNumber", "type": "uint256" }, { "internalType": "string", "name": "data", "type": "string" } ], "name": "assign", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "internalType": "uint256", "name": "targetNumber", "type": "uint256" } ], "name": "assignNumber", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "internalType": "string", "name": "data", "type": "string" } ], "name": "assignString", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "assignedNumbers", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "", "type": "string" } ], "name": "assignedStrings", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" }, { "internalType": "string", "name": "data", "type": "string" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "getAssignment", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "getAssignmentNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "getAssignmentString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "targetNumber", "type": "uint256" } ], "name": "getAssignmentTargetNumber", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "targetString", "type": "string" } ], "name": "getAssignmentTargetString", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "getAvailableToken", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "getBurnData", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getLastAssigned", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "getLevelLength", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "getTokenLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "levels", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nftTokens", "outputs": [ { "internalType": "string", "name": "assignedString", "type": "string" }, { "internalType": "uint256", "name": "assignedNumber", "type": "uint256" }, { "internalType": "uint256", "name": "level", "type": "uint256" }, { "internalType": "bool", "name": "minted", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "nfts", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "onERC721Received", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenNumber", "type": "uint256" } ], "name": "redeem", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" }, { "internalType": "uint256", "name": "skipLevels", "type": "uint256" } ], "name": "splitHeldToken", "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": "swap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "level", "type": "uint256" } ], "name": "swapV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalLocked", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "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" } ]
60a06040523480156200001157600080fd5b506040516200385c3803806200385c8339810160408190526200003491620001b4565b604080518082018252600680825265635f4879504360d01b60208084018290528451808601909552918452908301529060006200007283826200029e565b5060016200008182826200029e565b5050506200009e620000986200015e60201b60201c565b62000162565b6001600b556001600160a01b038316620000cb5760405163c1ab6dc160e01b815260040160405180910390fd5b81600003620000ed5760405163f28bc86160e01b815260040160405180910390fd5b818110156200010f57604051630c1f8edd60e41b815260040160405180910390fd5b6200011c8260026200036a565b81106200013c57604051634f19dcef60e01b815260040160405180910390fd5b6001600160a01b03909216608052601281905560149190915560135562000396565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080600060608486031215620001ca57600080fd5b83516001600160a01b0381168114620001e257600080fd5b602085015160409095015190969495509392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200022457607f821691505b6020821081036200024557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200029957600081815260208120601f850160051c81016020861015620002745750805b601f850160051c820191505b81811015620002955782815560010162000280565b5050505b505050565b81516001600160401b03811115620002ba57620002ba620001f9565b620002d281620002cb84546200020f565b846200024b565b602080601f8311600181146200030a5760008415620002f15750858301515b600019600386901b1c1916600185901b17855562000295565b600085815260208120601f198616915b828110156200033b578886015182559484019460019091019084016200031a565b50858210156200035a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200039057634e487b7160e01b600052601160045260246000fd5b92915050565b6080516134a3620003b9600039600081816112d00152611f0701526134a36000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c806388338ea411610182578063bd60b83f116100e9578063e68b0944116100a2578063f2db9dee1161007c578063f2db9dee14610699578063f2fde38b146106b9578063f682c349146106cc578063fbdb7ad3146106df57600080fd5b8063e68b094414610627578063e7768bf01461064a578063e985e9c51461065d57600080fd5b8063bd60b83f146105c6578063c87b56dd146105ce578063d011645c146105e1578063da95b76914610438578063db006a75146105f4578063df760b091461060757600080fd5b8063a22cb4651161013b578063a22cb46514610565578063a49062d414610578578063a92b6fc514610580578063aa44a39a14610467578063aefb3434146105a0578063b88d4fde146105b357600080fd5b806388338ea4146104cb57806388520dac146104eb5780638bd3ced61461050e5780638da5cb5b1461052157806395d89b41146105325780639b0df9131461053a57600080fd5b806332232aac116102415780635e387905116101fa57806370a08231116101d457806370a0823114610495578063715018a6146104a85780637641e6f3146104b05780638119c065146104c357600080fd5b80635e387905146104675780636352211e1461047a5780636867bd4a1461048d57600080fd5b806332232aac146103ff57806342842e0e146104125780634f6ccce714610425578063515c8b0f14610438578063568914121461044b5780635b151e6e1461045457600080fd5b806318160ddd1161029357806318160ddd1461039757806323b872dd146103a9578063250ea476146103bc578063265aa621146103cf5780632b180bcf146103e25780632f745c59146103ec57600080fd5b806301ffc9a7146102db578063020884141461030357806306fdde0314610323578063081812fc1461032b578063095ea7b314610356578063150b7a021461036b575b600080fd5b6102ee6102e9366004612b80565b6106ff565b60405190151581526020015b60405180910390f35b610316610311366004612b9d565b61072a565b6040516102fa9190612c06565b610316610829565b61033e610339366004612b9d565b6108bb565b6040516001600160a01b0390911681526020016102fa565b610369610364366004612c35565b6108e2565b005b61037e610379366004612ceb565b6109fc565b6040516001600160e01b031990911681526020016102fa565b6008545b6040519081526020016102fa565b6103696103b7366004612d67565b610a0d565b6103696103ca366004612b9d565b610a3e565b61039b6103dd366004612b9d565b610bed565b61039b620f424081565b61039b6103fa366004612c35565b610c0e565b61036961040d366004612b9d565b610ca4565b610369610420366004612d67565b610d34565b61039b610433366004612b9d565b610d4f565b610369610446366004612dc3565b610de2565b61039b60155481565b61039b610462366004612e0a565b610e1e565b610316610475366004612b9d565b610ec9565b61033e610488366004612b9d565b610ed4565b61039b601081565b61039b6104a3366004612e2c565b610f34565b610369610fba565b6103696104be366004612dc3565b610fce565b610369611051565b61039b6104d9366004612b9d565b600d6020526000908152604090205481565b61039b6104f9366004612b9d565b6000908152600c602052604090206001015490565b61039b61051c366004612e47565b6110a8565b600a546001600160a01b031661033e565b6103166110d0565b61039b610548366004612e47565b8051602081830181018051600e8252928201919093012091525481565b610369610573366004612e8a565b6110df565b61039b601381565b61039b61058e366004612b9d565b60009081526010602052604090205490565b61039b6105ae366004612e0a565b6110ee565b6103696105c1366004612ceb565b61111f565b61039b600a81565b6103166105dc366004612b9d565b611157565b61039b6105ef366004612b9d565b6111cb565b610369610602366004612b9d565b611216565b61039b610615366004612b9d565b6000908152600d602052604090205490565b61063a610635366004612b9d565b6113c4565b6040516102fa9493929190612ec1565b610369610658366004612e0a565b611479565b6102ee61066b366004612ef2565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b61039b6106a7366004612b9d565b6000908152600f602052604090205490565b6103696106c7366004612e2c565b611799565b6103696106da366004612e0a565b61180f565b61039b6106ed366004612b9d565b600f6020526000908152604090205481565b60006001600160e01b0319821663780e9d6360e01b1480610724575061072482611905565b92915050565b60608161074e816000908152600260205260409020546001600160a01b0316151590565b8061076b57506000818152600c602052604090206003015460ff16155b1561078957604051631308ae0d60e31b815260040160405180910390fd5b6000838152600c6020526040902080546107a290612f25565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce90612f25565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b505050505091505b50919050565b60606000805461083890612f25565b80601f016020809104026020016040519081016040528092919081815260200182805461086490612f25565b80156108b15780601f10610886576101008083540402835291602001916108b1565b820191906000526020600020905b81548152906001019060200180831161089457829003601f168201915b5050505050905090565b60006108c682611955565b506000908152600460205260409020546001600160a01b031690565b60006108ed82610ed4565b9050806001600160a01b0316836001600160a01b03160361095f5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061097b575061097b813361066b565b6109ed5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610956565b6109f783836119b4565b505050565b630a85bd0160e11b5b949350505050565b610a173382611a22565b610a335760405162461bcd60e51b815260040161095690612f59565b6109f7838383611aa0565b610a46611c11565b601354601254601454610a5a906001612fbc565b610a649190612fcf565b821115610a84576040516341a3c7a760e01b815260040160405180910390fd5b601454610a92906001612fbc565b610a9c8383612fbc565b1115610abb576040516341a3c7a760e01b815260040160405180910390fd5b6000610ac78383612fbc565b9050815b81811015610bc75760008051602061344e8339815191528054600181019091557f9c0edea247a057c4e16063140de72c14d2750a5bdea07c53ffa918662a8d7af2018190556040805160a0810182526000608082018181528252602082810182905260138385015260608301829052848252600c90529190912081518190610b539082613030565b50602082810151600183015560408084015160028401556060909301516003909201805460ff19169215159290921790915590518281527f1e929d7e2988c1e1a26286b445a3802c7eb75760e7137f543110cf0ccb19cb3c910160405180910390a180610bbf816130f0565b915050610acb565b508260126001016000828254610bdd9190612fbc565b909155506109f790506013611c6b565b60118181548110610bfd57600080fd5b600091825260209091200154905081565b6000610c1983610f34565b8210610c7b5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610956565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b806000600a821015610cc95760405163909fe6a160e01b815260040160405180910390fd5b6013821115610ceb57604051637ac8add760e01b815260040160405180910390fd5b6000828152601060205260409020548110610d1957604051632bc7640360e11b815260040160405180910390fd5b610d21611d77565b610d2a83611dd0565b6109f76001600b55565b6109f78383836040518060200160405280600081525061111f565b6000610d5a60085490565b8210610dbd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610956565b60088281548110610dd057610dd0613109565b90600052602060002001549050919050565b8133610ded82610ed4565b6001600160a01b031614610e14576040516313ae7ef760e21b815260040160405180910390fd5b6109f78383611ffc565b60008282600a821015610e445760405163909fe6a160e01b815260040160405180910390fd5b6013821115610e6657604051637ac8add760e01b815260040160405180910390fd5b6000828152601060205260409020548110610e9457604051632bc7640360e11b815260040160405180910390fd5b6000858152601060205260409020805485908110610eb457610eb4613109565b90600052602060002001549250505092915050565b6060610724826120a5565b6000818152600260205260408120546001600160a01b0316806107245760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610956565b60006001600160a01b038216610f9e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610956565b506001600160a01b031660009081526003602052604090205490565b610fc2611c11565b610fcc6000612147565b565b8133610fd982610ed4565b6001600160a01b031614611000576040516313ae7ef760e21b815260040160405180910390fd5b61100a8383611ffc565b61101383612199565b7f055f408bc5c6d7bacc099d9cb2b83c4c6fde6fd3b196e6d18f0f59fc6c0fc363838360405161104492919061311f565b60405180910390a1505050565b611059611d77565b60136000818152601060205260008051602061344e8339815191525461109257604051632bc7640360e11b815260040160405180910390fd5b61109c6013611dd0565b5050610fcc6001600b55565b6000600e826040516110ba9190613138565b9081526020016040518091039020549050919050565b60606001805461083890612f25565b6110ea33838361223c565b5050565b6010602052816000526040600020818154811061110a57600080fd5b90600052602060002001600091509150505481565b6111293383611a22565b6111455760405162461bcd60e51b815260040161095690612f59565b6111518484848461230a565b50505050565b606061116282611955565b600061117960408051602081019091526000815290565b9050600081511161119957604051806020016040528060008152506111c4565b806111a38461233d565b6040516020016111b4929190613154565b6040516020818303038152906040525b9392505050565b6000818152600c6020526040812060030154829060ff166111ff5760405163d03ce9df60e01b815260040160405180910390fd5b50506000908152600c602052604090206002015490565b61121e611d77565b803361122982610ed4565b6001600160a01b031614611250576040516313ae7ef760e21b815260040160405180910390fd5b611259826123d0565b6000828152600c6020908152604080832060020154808452601083529083208054600181018255908452919092200183905561129481611c6b565b60006112a1826002613267565b905080601560008282546112b59190612fcf565b909155506112c69050333086610d34565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb33611303620f424085613273565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561134e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611372919061328a565b5060408051838152602081018690529081018290527f70d4d13dc6a7ecab4daf04ef8818b27210ec56ba0fa05d767b00f95c3080df919060600160405180910390a15050506113c16001600b55565b50565b600c602052600090815260409020805481906113df90612f25565b80601f016020809104026020016040519081016040528092919081815260200182805461140b90612f25565b80156114585780601f1061142d57610100808354040283529160200191611458565b820191906000526020600020905b81548152906001019060200180831161143b57829003601f168201915b50505050600183015460028401546003909401549293909290915060ff1684565b816000600a82101561149e5760405163909fe6a160e01b815260040160405180910390fd5b60138211156114c057604051637ac8add760e01b815260040160405180910390fd5b60008281526010602052604090205481106114ee57604051632bc7640360e11b815260040160405180910390fd5b8383111561150f5760405163cea1042360e01b815260040160405180910390fd5b8260000361152f57604051629d330160e31b815260040160405180910390fd5b600061153b8486612fcf565b9050600a81101561155f576040516349b6be5960e11b815260040160405180910390fd5b600061156c856002613267565b6000838152601060208190526040909120549192509061158d908390612fbc565b11156115ab5760405162588ce360e81b815260040160405180910390fd5b60008681526010602052604081208054909190829082906115ce576115ce613109565b9060005260206000200154905081600183805490506115ed9190612fcf565b815481106115fd576115fd613109565b90600052602060002001548260008154811061161b5761161b613109565b906000526020600020018190555081805480611639576116396132a7565b6001900381819060005260206000200160009055905561165888611c6b565b6000818152600c602052604090206003015460ff161561167b5761167b81612199565b6000836116888184613273565b6116929190612fbc565b905060006116a08584613273565b90505b8181101561174c576000868152601060209081526040808320805460018101825590845282842001849055805160a0810182526080810184815281528083018490528082018a905260608101849052848452600c9092529091208151819061170b9082613030565b5060208201516001820155604082015160028201556060909101516003909101805460ff191691151591909117905580611744816130f0565b9150506116a3565b5060408051838152602081018b90529081018990527fd2baea580be49f4686f9010fd8d18c763f89350bdfac59a3479b37b9e5a355b59060600160405180910390a1505050505050505050565b6117a1611c11565b6001600160a01b0381166118065760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610956565b6113c181612147565b813361181a82610ed4565b6001600160a01b031614611841576040516313ae7ef760e21b815260040160405180910390fd5b61184a836123d0565b81156109f7576000838152600c602052604090206001810183905560028082015461187491613267565b6000848152600d602052604081208054909190611892908490612fbc565b925050819055507feeac879960dabc89f36df08da42d5d46e6b6d210be7a7bb8a20334805621ddc28484836002015460026118cd9190613267565b6000878152600d602090815260409182902054825195865290850193909352830152606082015260800160405180910390a150505050565b60006001600160e01b031982166380ac58cd60e01b148061193657506001600160e01b03198216635b5e139f60e01b145b8061072457506301ffc9a760e01b6001600160e01b0319831614610724565b6000818152600260205260409020546001600160a01b03166113c15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610956565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906119e982610ed4565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611a2e83610ed4565b9050806001600160a01b0316846001600160a01b03161480611a7557506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b80610a055750836001600160a01b0316611a8e846108bb565b6001600160a01b031614949350505050565b826001600160a01b0316611ab382610ed4565b6001600160a01b031614611ad95760405162461bcd60e51b8152600401610956906132bd565b6001600160a01b038216611b3b5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610956565b611b48838383600161249c565b826001600160a01b0316611b5b82610ed4565b6001600160a01b031614611b815760405162461bcd60e51b8152600401610956906132bd565b600081815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260038552838620805460001901905590871680865283862080546001019055868652600290945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a546001600160a01b03163314610fcc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610956565b601381036113c1576013600052601060205260008051602061344e8339815191525415611d4557601154600003611ceb5760136000908152601060205260008051602061344e833981519152805460119290611cc957611cc9613109565b6000918252602080832090910154835460018101855593835291209091015550565b60136000908152601060205260008051602061344e8339815191528054909190611d1757611d17613109565b90600052602060002001546011600081548110611d3657611d36613109565b60009182526020909120015550565b601154156113c1576011805480611d5e57611d5e6132a7565b6001900381819060005260206000200160009055905550565b6002600b5403611dc95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610956565b6002600b55565b6000611ddd826002613267565b90508060156000828254611df19190612fbc565b90915550506000828152601060205260408120805490919082908290611e1957611e19613109565b906000526020600020015490508160018380549050611e389190612fcf565b81548110611e4857611e48613109565b906000526020600020015482600081548110611e6657611e66613109565b906000526020600020018190555081805480611e8457611e846132a7565b60019003818190600052602060002001600090559055611ea384611c6b565b6000818152600c60205260409020600381015460ff1615611ede57611ed93033846040518060200160405280600081525061230a565b611efd565b60038101805460ff19166001179055611efd611ef73390565b836125d0565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166323b872dd3330611f3b620f424089613273565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af1158015611f8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb3919061328a565b5060408051838152602081018790529081018590527f92d941e0c114cd4379ba1e7d068a433f9e84070e2bd5213006935001f2720c3c9060600160405180910390a15050505050565b612005826123d0565b6000828152600c602052604090208061201e8382613030565b5060028082015461202e91613267565b600e8360405161203e9190613138565b9081526020016040518091039020600082825461205b9190612fbc565b925050819055507f14b4ef292c892a7b5ff4d146f58129326fdbf19e0723ba2696e147441cc68f488383836002015460026120969190613267565b60405161104493929190613302565b6000818152600c602052604090208054606091906120c290612f25565b80601f01602080910402602001604051908101604052809291908181526020018280546120ee90612f25565b801561213b5780601f106121105761010080835404028352916020019161213b565b820191906000526020600020905b81548152906001019060200180831161211e57829003601f168201915b50505050509050919050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006121a482610ed4565b90506121b481600084600161249c565b6121bd82610ed4565b600083815260046020908152604080832080546001600160a01b03199081169091556001600160a01b0385168085526003845282852080546000190190558785526002909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03160361229d5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610956565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612315848484611aa0565b612321848484846125ea565b6111515760405162461bcd60e51b81526004016109569061332b565b6060600061234a836126e8565b600101905060008167ffffffffffffffff81111561236a5761236a612c5f565b6040519080825280601f01601f191660200182016040528015612394576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461239e57509392505050565b6000818152600c60209081526040808320600f9092529091204290556001810154156124355760028082015461240591613267565b60018201546000908152600d602052604081208054909190612428908490612fcf565b9091555050600060018201555b600081600001805461244690612f25565b905011156110ea5760028082015461245d91613267565b604051600e9061246e90849061337d565b9081526020016040518091039020600082825461248b9190612fcf565b909155506110ea9050816000612b1c565b600181111561250b5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610956565b816001600160a01b0385166125675761256281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b61258a565b836001600160a01b0316856001600160a01b03161461258a5761258a85826127c0565b6001600160a01b0384166125a6576125a18161285d565b6125c9565b846001600160a01b0316846001600160a01b0316146125c9576125c9848261290c565b5050505050565b6110ea828260405180602001604052806000815250612950565b60006001600160a01b0384163b156126e057604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061262e9033908990889088906004016133f3565b6020604051808303816000875af1925050508015612669575060408051601f3d908101601f1916820190925261266691810190613430565b60015b6126c6573d808015612697576040519150601f19603f3d011682016040523d82523d6000602084013e61269c565b606091505b5080516000036126be5760405162461bcd60e51b81526004016109569061332b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050610a05565b506001610a05565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106127275772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612753576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061277157662386f26fc10000830492506010015b6305f5e1008310612789576305f5e100830492506008015b612710831061279d57612710830492506004015b606483106127af576064830492506002015b600a83106107245760010192915050565b600060016127cd84610f34565b6127d79190612fcf565b60008381526007602052604090205490915080821461282a576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b60085460009061286f90600190612fcf565b6000838152600960205260408120546008805493945090928490811061289757612897613109565b9060005260206000200154905080600883815481106128b8576128b8613109565b60009182526020808320909101929092558281526009909152604080822084905585825281205560088054806128f0576128f06132a7565b6001900381819060005260206000200160009055905550505050565b600061291783610f34565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b61295a8383612983565b61296760008484846125ea565b6109f75760405162461bcd60e51b81526004016109569061332b565b6001600160a01b0382166129d95760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610956565b6000818152600260205260409020546001600160a01b031615612a3e5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610956565b612a4c60008383600161249c565b6000818152600260205260409020546001600160a01b031615612ab15760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610956565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b508054612b2890612f25565b6000825580601f10612b38575050565b601f0160209004906000526020600020908101906113c191905b80821115612b665760008155600101612b52565b5090565b6001600160e01b0319811681146113c157600080fd5b600060208284031215612b9257600080fd5b81356111c481612b6a565b600060208284031215612baf57600080fd5b5035919050565b60005b83811015612bd1578181015183820152602001612bb9565b50506000910152565b60008151808452612bf2816020860160208601612bb6565b601f01601f19169290920160200192915050565b6020815260006111c46020830184612bda565b80356001600160a01b0381168114612c3057600080fd5b919050565b60008060408385031215612c4857600080fd5b612c5183612c19565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff80841115612c9057612c90612c5f565b604051601f8501601f19908116603f01168101908282118183101715612cb857612cb8612c5f565b81604052809350858152868686011115612cd157600080fd5b858560208301376000602087830101525050509392505050565b60008060008060808587031215612d0157600080fd5b612d0a85612c19565b9350612d1860208601612c19565b925060408501359150606085013567ffffffffffffffff811115612d3b57600080fd5b8501601f81018713612d4c57600080fd5b612d5b87823560208401612c75565b91505092959194509250565b600080600060608486031215612d7c57600080fd5b612d8584612c19565b9250612d9360208501612c19565b9150604084013590509250925092565b600082601f830112612db457600080fd5b6111c483833560208501612c75565b60008060408385031215612dd657600080fd5b82359150602083013567ffffffffffffffff811115612df457600080fd5b612e0085828601612da3565b9150509250929050565b60008060408385031215612e1d57600080fd5b50508035926020909101359150565b600060208284031215612e3e57600080fd5b6111c482612c19565b600060208284031215612e5957600080fd5b813567ffffffffffffffff811115612e7057600080fd5b610a0584828501612da3565b80151581146113c157600080fd5b60008060408385031215612e9d57600080fd5b612ea683612c19565b91506020830135612eb681612e7c565b809150509250929050565b608081526000612ed46080830187612bda565b60208301959095525060408101929092521515606090910152919050565b60008060408385031215612f0557600080fd5b612f0e83612c19565b9150612f1c60208401612c19565b90509250929050565b600181811c90821680612f3957607f821691505b60208210810361082357634e487b7160e01b600052602260045260246000fd5b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561072457610724612fa6565b8181038181111561072457610724612fa6565b601f8211156109f757600081815260208120601f850160051c810160208610156130095750805b601f850160051c820191505b8181101561302857828155600101613015565b505050505050565b815167ffffffffffffffff81111561304a5761304a612c5f565b61305e816130588454612f25565b84612fe2565b602080601f831160018114613093576000841561307b5750858301515b600019600386901b1c1916600185901b178555613028565b600085815260208120601f198616915b828110156130c2578886015182559484019460019091019084016130a3565b50858210156130e05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006001820161310257613102612fa6565b5060010190565b634e487b7160e01b600052603260045260246000fd5b828152604060208201526000610a056040830184612bda565b6000825161314a818460208701612bb6565b9190910192915050565b60008351613166818460208801612bb6565b83519083019061317a818360208801612bb6565b01949350505050565b600181815b808511156131be5781600019048211156131a4576131a4612fa6565b808516156131b157918102915b93841c9390800290613188565b509250929050565b6000826131d557506001610724565b816131e257506000610724565b81600181146131f857600281146132025761321e565b6001915050610724565b60ff84111561321357613213612fa6565b50506001821b610724565b5060208310610133831016604e8410600b8410161715613241575081810a610724565b61324b8383613183565b806000190482111561325f5761325f612fa6565b029392505050565b60006111c483836131c6565b808202811582820484141761072457610724612fa6565b60006020828403121561329c57600080fd5b81516111c481612e7c565b634e487b7160e01b600052603160045260246000fd5b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b83815260606020820152600061331b6060830185612bda565b9050826040830152949350505050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600080835461338b81612f25565b600182811680156133a357600181146133b8576133e7565b60ff19841687528215158302870194506133e7565b8760005260208060002060005b858110156133de5781548a8201529084019082016133c5565b50505082870194505b50929695505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061342690830184612bda565b9695505050505050565b60006020828403121561344257600080fd5b81516111c481612b6a56feab6e88ec9844f266cae57004e7e0869495b951c20b7a4491e795bfa666c3d029a2646970667358221220ae3a52bb365b57a9701d4c99e3eab320f8649285c9c91061cffb5be310b77c9c64736f6c63430008130033000000000000000000000000ea7b7dc089c9a4a916b5a7a37617f59fd54e37e400000000000000000000000000000000000000000000000000000000040000a00000000000000000000000000000000000000000000000000000000004000fff