[ { "inputs": [ { "internalType": "uint256", "name": "_minGasToStore", "type": "uint256" }, { "internalType": "address", "name": "_layerZeroEndpoint", "type": "address" }, { "internalType": "uint256", "name": "_startMintId", "type": "uint256" }, { "internalType": "uint256", "name": "_endMintId", "type": "uint256" } ], "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": "bytes32", "name": "_hashedPayload", "type": "bytes32" } ], "name": "CreditCleared", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bytes32", "name": "_hashedPayload", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "CreditStored", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes", "name": "_payload", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "_reason", "type": "bytes" } ], "name": "MessageFailed", "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": true, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": true, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": true, "internalType": "address", "name": "_toAddress", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" } ], "name": "ReceiveFromChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "indexed": false, "internalType": "bytes32", "name": "_payloadHash", "type": "bytes32" } ], "name": "RetryMessageSuccess", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": true, "internalType": "address", "name": "_from", "type": "address" }, { "indexed": true, "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "indexed": false, "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" } ], "name": "SendToChain", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_dstChainIdToBatchLimit", "type": "uint256" } ], "name": "SetDstChainIdToBatchLimit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_dstChainIdToTransferGas", "type": "uint256" } ], "name": "SetDstChainIdToTransferGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "indexed": false, "internalType": "uint16", "name": "_type", "type": "uint16" }, { "indexed": false, "internalType": "uint256", "name": "_minDstGas", "type": "uint256" } ], "name": "SetMinDstGas", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "_minGasToTransferAndStore", "type": "uint256" } ], "name": "SetMinGasToTransferAndStore", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "precrime", "type": "address" } ], "name": "SetPrecrime", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "SetTrustedRemote", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "indexed": false, "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "SetTrustedRemoteAddress", "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": "DEFAULT_PAYLOAD_SIZE_LIMIT", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FUNCTION_TYPE_SEND", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "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": [ { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "clearCredits", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "dstChainIdToBatchLimit", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "dstChainIdToTransferGas", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendBatchFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "bool", "name": "_useZro", "type": "bool" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "estimateSendFee", "outputs": [ { "internalType": "uint256", "name": "nativeFee", "type": "uint256" }, { "internalType": "uint256", "name": "zroFee", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "bytes", "name": "", "type": "bytes" }, { "internalType": "uint64", "name": "", "type": "uint64" } ], "name": "failedMessages", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "forceResumeReceive", "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": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "address", "name": "", "type": "address" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" } ], "name": "getConfig", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" } ], "name": "getTrustedRemoteAddress", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "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": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" } ], "name": "isTrustedRemote", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lzEndpoint", "outputs": [ { "internalType": "contract ILayerZeroEndpoint", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "lzReceive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "maxMintId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "", "type": "uint16" }, { "internalType": "uint16", "name": "", "type": "uint16" } ], "name": "minDstGasLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minGasToTransferAndStore", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "nextMintId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "nonblockingLzReceive", "outputs": [], "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": "uint16", "name": "", "type": "uint16" } ], "name": "payloadSizeLimitLookup", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "precrime", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_srcChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_srcAddress", "type": "bytes" }, { "internalType": "uint64", "name": "_nonce", "type": "uint64" }, { "internalType": "bytes", "name": "_payload", "type": "bytes" } ], "name": "retryMessage", "outputs": [], "stateMutability": "payable", "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": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendBatchFrom", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256", "name": "_tokenId", "type": "uint256" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes", "name": "_adapterParams", "type": "bytes" } ], "name": "sendFrom", "outputs": [], "stateMutability": "payable", "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": "_baseUri", "type": "string" } ], "name": "setBaseUri", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" }, { "internalType": "uint16", "name": "_chainId", "type": "uint16" }, { "internalType": "uint256", "name": "_configType", "type": "uint256" }, { "internalType": "bytes", "name": "_config", "type": "bytes" } ], "name": "setConfig", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_dstChainIdToBatchLimit", "type": "uint256" } ], "name": "setDstChainIdToBatchLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_dstChainIdToTransferGas", "type": "uint256" } ], "name": "setDstChainIdToTransferGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "name": "setFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint16", "name": "_packetType", "type": "uint16" }, { "internalType": "uint256", "name": "_minGas", "type": "uint256" } ], "name": "setMinDstGas", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_minGasToTransferAndStore", "type": "uint256" } ], "name": "setMinGasToTransferAndStore", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_dstChainId", "type": "uint16" }, { "internalType": "uint256", "name": "_size", "type": "uint256" } ], "name": "setPayloadSizeLimit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_precrime", "type": "address" } ], "name": "setPrecrime", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setReceiveVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_version", "type": "uint16" } ], "name": "setSendVersion", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_path", "type": "bytes" } ], "name": "setTrustedRemote", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_remoteChainId", "type": "uint16" }, { "internalType": "bytes", "name": "_remoteAddress", "type": "bytes" } ], "name": "setTrustedRemoteAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "name": "storedCredits", "outputs": [ { "internalType": "uint16", "name": "srcChainId", "type": "uint16" }, { "internalType": "address", "name": "toAddress", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" }, { "internalType": "bool", "name": "creditsRemain", "type": "bool" } ], "stateMutability": "view", "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": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "uint16", "name": "", "type": "uint16" } ], "name": "trustedRemoteLookup", "outputs": [ { "internalType": "bytes", "name": "", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "times", "type": "uint256" } ], "name": "ultraMint", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "uint16[]", "name": "_dstChainIds", "type": "uint16[]" }, { "internalType": "bytes", "name": "_toAddress", "type": "bytes" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "address payable", "name": "_refundAddress", "type": "address" }, { "internalType": "address", "name": "_zroPaymentAddress", "type": "address" }, { "internalType": "bytes[]", "name": "_adapterParams", "type": "bytes[]" }, { "internalType": "uint256[]", "name": "_nativeFees", "type": "uint256[]" } ], "name": "ultraRun", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [], "name": "withdrawETH", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a06040523480156200001157600080fd5b506040516200541e3803806200541e83398101604081905262000034916200028a565b6040518060400160405280600d81526020016c2ab63a3930a6b0b930ba3437b760991b8152506040518060400160405280600b81526020016a2ab63a3930a93ab73732b960a91b8152508585858585858585838383838080620000a6620000a06200019060201b60201c565b62000194565b6001600160a01b031660805250600160065581620001165760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b606482015260840160405180910390fd5b5060075581516200012f90600b906020850190620001e4565b5080516200014590600c906020840190620001e4565b5050506011959095555050506012555050660119f17fe16000601355505060408051602081019182905260009081905262000185925060149190620001e4565b505050505062000314565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001f290620002d7565b90600052602060002090601f01602090048101928262000216576000855562000261565b82601f106200023157805160ff191683800117855562000261565b8280016001018555821562000261579182015b828111156200026157825182559160200191906001019062000244565b506200026f92915062000273565b5090565b5b808211156200026f576000815560010162000274565b60008060008060808587031215620002a157600080fd5b845160208601519094506001600160a01b0381168114620002c157600080fd5b6040860151606090960151949790965092505050565b600181811c90821680620002ec57607f821691505b602082108114156200030e57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516150b6620003686000396000818161098201528181610bda01528181610ede015281816111630152818161146001528181611d5c0152818161223d0152818161237001526137ea01526150b66000f3fe6080604052600436106103965760003560e01c80638da5cb5b116101dc578063c87b56dd11610102578063e1d4c870116100a0578063f2fde38b1161006f578063f2fde38b14610b57578063f5ecbdbc14610b77578063f7f3f2fd14610b97578063fa25f9b614610baa57600080fd5b8063e1d4c87014610ab8578063e985e9c514610ace578063eb8d72b714610b17578063f235364114610b3757600080fd5b8063d1deba1f116100dc578063d1deba1f14610a5a578063ddca3f4314610a6d578063df2a5b3b14610a83578063e086e5ec14610aa357600080fd5b8063c87b56dd146109fa578063cbed8b9c14610a1a578063d12473a514610a3a57600080fd5b8063a22cb4651161017a578063b353aaa711610149578063b353aaa714610970578063b88d4fde146109a4578063baf3292d146109c4578063c4461834146109e457600080fd5b8063a22cb465146108f5578063a6c3d16514610915578063ab3ffb9314610935578063af3fb21c1461094857600080fd5b806395d89b41116101b657806395d89b41146108805780639ea5d6b1146108955780639f38369a146108b5578063a0bcfc7f146108d557600080fd5b80638da5cb5b146108225780638ffa1f2a14610840578063950c8a741461086057600080fd5b80633f6dc453116102c15780636352211e1161025f57806370a082311161022e57806370a0823114610795578063715018a6146107b55780637533d788146107ca5780638cfd8f5c146107ea57600080fd5b80636352211e1461071f57806366ad5c8a1461073f57806369fe0e2d1461075f5780636aa99da31461077f57600080fd5b8063482881901161029b578063482881901461067a5780634ac3f4ff1461069057806351905636146106bd5780635b8c41e6146106d057600080fd5b80633f6dc4531461062757806342842e0e1461063a57806342d65a8d1461065a57600080fd5b80630df374831161033957806323b872dd1161030857806323b872dd146105775780632a205e3d146105975780633d8b38f6146105cc5780633f1f4fa4146105ec57600080fd5b80630df37483146104ac57806310ddb137146104cc5780631249c58b146104ec57806322a3ecf9146104f457600080fd5b806307e0db171161037557806307e0db1714610414578063081812fc14610434578063095ea7b31461046c5780630b4cad4c1461048c57600080fd5b80621d35671461039b57806301ffc9a7146103bd57806306fdde03146103f2575b600080fd5b3480156103a757600080fd5b506103bb6103b6366004613e53565b610bd7565b005b3480156103c957600080fd5b506103dd6103d8366004613efc565b610e08565b60405190151581526020015b60405180910390f35b3480156103fe57600080fd5b50610407610e2b565b6040516103e99190613f71565b34801561042057600080fd5b506103bb61042f366004613f84565b610ebd565b34801561044057600080fd5b5061045461044f366004613f9f565b610f46565b6040516001600160a01b0390911681526020016103e9565b34801561047857600080fd5b506103bb610487366004613fd8565b610f6d565b34801561049857600080fd5b506103bb6104a7366004613f9f565b611083565b3480156104b857600080fd5b506103bb6104c7366004614004565b611123565b3480156104d857600080fd5b506103bb6104e7366004613f84565b611142565b6103bb61119a565b34801561050057600080fd5b5061054861050f366004613f9f565b600a6020526000908152604090208054600182015460029092015461ffff821692620100009092046001600160a01b0316919060ff1684565b6040805161ffff90951685526001600160a01b03909316602085015291830152151560608201526080016103e9565b34801561058357600080fd5b506103bb610592366004614020565b61126f565b3480156105a357600080fd5b506105b76105b236600461413c565b6112a1565b604080519283526020830191909152016103e9565b3480156105d857600080fd5b506103dd6105e73660046141ca565b6112c7565b3480156105f857600080fd5b50610619610607366004613f84565b60036020526000908152604090205481565b6040519081526020016103e9565b6103bb610635366004613f9f565b611393565b34801561064657600080fd5b506103bb610655366004614020565b611426565b34801561066657600080fd5b506103bb6106753660046141ca565b611441565b34801561068657600080fd5b5061061960075481565b34801561069c57600080fd5b506106196106ab366004613f84565b60086020526000908152604090205481565b6103bb6106cb36600461421c565b6114c7565b3480156106dc57600080fd5b506106196106eb3660046142d5565b6005602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b34801561072b57600080fd5b5061045461073a366004613f9f565b6114de565b34801561074b57600080fd5b506103bb61075a366004613e53565b61153e565b34801561076b57600080fd5b506103bb61077a366004613f9f565b61161a565b34801561078b57600080fd5b5061061960115481565b3480156107a157600080fd5b506106196107b0366004614332565b611627565b3480156107c157600080fd5b506103bb6116ad565b3480156107d657600080fd5b506104076107e5366004613f84565b6116c1565b3480156107f657600080fd5b5061061961080536600461434f565b600260209081526000928352604080842090915290825290205481565b34801561082e57600080fd5b506000546001600160a01b0316610454565b34801561084c57600080fd5b506103bb61085b366004614382565b61175b565b34801561086c57600080fd5b50600454610454906001600160a01b031681565b34801561088c57600080fd5b506104076119a4565b3480156108a157600080fd5b506103bb6108b0366004614004565b6119b3565b3480156108c157600080fd5b506104076108d0366004613f84565b611a6a565b3480156108e157600080fd5b506103bb6108f03660046143b6565b611b81565b34801561090157600080fd5b506103bb6109103660046143fe565b611b9c565b34801561092157600080fd5b506103bb6109303660046141ca565b611ba7565b6103bb6109433660046144b3565b611c3a565b34801561095457600080fd5b5061095d600181565b60405161ffff90911681526020016103e9565b34801561097c57600080fd5b506104547f000000000000000000000000000000000000000000000000000000000000000081565b3480156109b057600080fd5b506103bb6109bf366004614568565b611c49565b3480156109d057600080fd5b506103bb6109df366004614332565b611c81565b3480156109f057600080fd5b5061061961271081565b348015610a0657600080fd5b50610407610a15366004613f9f565b611cd7565b348015610a2657600080fd5b506103bb610a353660046145d3565b611d3d565b348015610a4657600080fd5b506103bb610a55366004614004565b611dd2565b6103bb610a68366004613e53565b611e82565b348015610a7957600080fd5b5061061960135481565b348015610a8f57600080fd5b506103bb610a9e366004614641565b612098565b348015610aaf57600080fd5b506103dd61214a565b348015610ac457600080fd5b5061061960125481565b348015610ada57600080fd5b506103dd610ae936600461467d565b6001600160a01b03918216600090815260106020908152604080832093909416825291909152205460ff1690565b348015610b2357600080fd5b506103bb610b323660046141ca565b6121a4565b348015610b4357600080fd5b506105b7610b523660046146b6565b6121fe565b348015610b6357600080fd5b506103bb610b72366004614332565b6122c9565b348015610b8357600080fd5b50610407610b9236600461472f565b61233f565b6103bb610ba536600461485d565b6123f2565b348015610bb657600080fd5b50610619610bc5366004613f84565b60096020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610c545760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff861660009081526001602052604081208054610c7290614960565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90614960565b8015610ceb5780601f10610cc057610100808354040283529160200191610ceb565b820191906000526020600020905b815481529060010190602001808311610cce57829003601f168201915b50505050509050805186869050148015610d06575060008151115b8015610d2e575080516020820120604051610d24908890889061499b565b6040518091039020145b610d895760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f6044820152651b9d1c9858dd60d21b6064820152608401610c4b565b610dff8787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152506126bc92505050565b50505050505050565b60006001600160e01b031982161580610e255750610e2582612735565b92915050565b6060600b8054610e3a90614960565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6690614960565b8015610eb35780601f10610e8857610100808354040283529160200191610eb3565b820191906000526020600020905b815481529060010190602001808311610e9657829003601f168201915b5050505050905090565b610ec5612775565b6040516307e0db1760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307e0db17906024015b600060405180830381600087803b158015610f2b57600080fd5b505af1158015610f3f573d6000803e3d6000fd5b5050505050565b6000610f51826127cf565b506000908152600f60205260409020546001600160a01b031690565b6000610f78826114de565b9050806001600160a01b0316836001600160a01b03161415610fe65760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c4b565b336001600160a01b038216148061100257506110028133610ae9565b6110745760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610c4b565b61107e838361281f565b505050565b61108b612775565b600081116110e75760405162461bcd60e51b8152602060048201526024808201527f6d696e476173546f5472616e73666572416e6453746f7265206d7573742062656044820152630203e20360e41b6064820152608401610c4b565b60078190556040518181527ffebbc4f8bb9ec2313950c718d43123124b15778efda4c1f1d529de2995b4f34d906020015b60405180910390a150565b61112b612775565b61ffff909116600090815260036020526040902055565b61114a612775565b6040516310ddb13760e01b815261ffff821660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906310ddb13790602401610f11565b60125460115411156111f95760405162461bcd60e51b815260206004820152602260248201527f4c324d61726174686f6e3a206d6178206d696e74206c696d6974207265616368604482015261195960f21b6064820152608401610c4b565b60135434101561124b5760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420656e6f756768204554482073656e743a20636865636b206665652e006044820152606401610c4b565b60118054908190600061125d836149c1565b919050555061126c338261288d565b50565b61127a335b826128a7565b6112965760405162461bcd60e51b8152600401610c4b906149dc565b61107e838383612925565b6000806112b987876112b288612a89565b87876121fe565b915091509550959350505050565b61ffff8316600090815260016020526040812080548291906112e890614960565b80601f016020809104026020016040519081016040528092919081815260200182805461131490614960565b80156113615780601f1061133657610100808354040283529160200191611361565b820191906000526020600020905b81548152906001019060200180831161134457829003601f168201915b50505050509050838360405161137892919061499b565b60405180910390208180519060200120149150509392505050565b6013546113a09082614a29565b3410156113e55760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08115512081cd95b9d606a1b6044820152606401610c4b565b60005b8181101561142257601180549081906000611402836149c1565b9190505550611411338261288d565b5061141b816149c1565b90506113e8565b5050565b61107e83838360405180602001604052806000815250611c49565b611449612775565b6040516342d65a8d60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906342d65a8d9061149990869086908690600401614a71565b600060405180830381600087803b1580156114b357600080fd5b505af1158015610dff573d6000803e3d6000fd5b610dff8787876114d688612a89565b878787612ad4565b6000818152600d60205260408120546001600160a01b031680610e255760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c4b565b33301461159c5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d7573742062656044820152650204c7a4170760d41b6064820152608401610c4b565b6116128686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250612c6d92505050565b505050505050565b611622612775565b601355565b60006001600160a01b0382166116915760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610c4b565b506001600160a01b03166000908152600e602052604090205490565b6116b5612775565b6116bf6000612dc4565b565b600160205260009081526040902080546116da90614960565b80601f016020809104026020016040519081016040528092919081815260200182805461170690614960565b80156117535780601f1061172857610100808354040283529160200191611753565b820191906000526020600020905b81548152906001019060200180831161173657829003601f168201915b505050505081565b611763612e14565b80516020808301919091206000818152600a90925260409091206002015460ff166117c45760405162461bcd60e51b81526020600482015260116024820152701b9bc818dc99591a5d1cc81cdd1bdc9959607a1b6044820152606401610c4b565b6000828060200190518101906117da9190614ad4565b6000848152600a6020526040812080546001909101549294509092506118169161ffff8216916201000090046001600160a01b03169085612e6e565b6000848152600a6020526040902060010154909150811161188b5760405162461bcd60e51b815260206004820152602960248201527f6e6f7420656e6f7567682067617320746f2070726f6365737320637265646974604482015268103a3930b739b332b960b91b6064820152608401610c4b565b8151811415611903576000838152600a602052604080822080546001600160b01b031916815560018101929092556002909101805460ff19169055517fd7be02b8dd0d27bd0517a9cb4d7469ce27df4313821ae5ec1ff69acc594ba233906118f69085815260200190565b60405180910390a1611997565b604080516080810182526000858152600a6020818152848320805461ffff80821687526001600160a01b03620100008084048216868a019081529989018b8152600160608b01818152998f90529790965297519851169096026001600160b01b03199091169690951695909517939093178455915191830191909155516002909101805491151560ff199092169190911790555b50505061126c6001600655565b6060600c8054610e3a90614960565b6119bb612775565b60008111611a165760405162461bcd60e51b815260206004820152602260248201527f647374436861696e4964546f42617463684c696d6974206d757374206265203e604482015261020360f41b6064820152608401610c4b565b61ffff8216600081815260086020908152604091829020849055815192835282018390527f7315f7654d594ead24a30160ed9ba2d23247f543016b918343591e93d7afdb6d91015b60405180910390a15050565b61ffff8116600090815260016020526040812080546060929190611a8d90614960565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab990614960565b8015611b065780601f10611adb57610100808354040283529160200191611b06565b820191906000526020600020905b815481529060010190602001808311611ae957829003601f168201915b50505050509050805160001415611b5f5760405162461bcd60e51b815260206004820152601d60248201527f4c7a4170703a206e6f20747275737465642070617468207265636f72640000006044820152606401610c4b565b611b7a600060148351611b729190614b8e565b839190612ec0565b9392505050565b611b89612775565b8051611422906014906020840190613cd0565b611422338383612fcd565b611baf612775565b818130604051602001611bc493929190614ba5565b60408051601f1981840301815291815261ffff85166000908152600160209081529190208251611bf993919290910190613cd0565b507f8c0400cfe2d1199b1a725c78960bcc2a344d869b80590d0f2bd005db15a572ce838383604051611c2d93929190614a71565b60405180910390a1505050565b610dff87878787878787612ad4565b611c5333836128a7565b611c6f5760405162461bcd60e51b8152600401610c4b906149dc565b611c7b8484848461309c565b50505050565b611c89612775565b600480546001600160a01b0319166001600160a01b0383169081179091556040519081527f5db758e995a17ec1ad84bdef7e8c3293a0bd6179bcce400dff5d4c3d87db726b90602001611118565b6060611ce2826127cf565b6000611cec6130cf565b90506000815111611d0c5760405180602001604052806000815250611b7a565b80611d16846130de565b604051602001611d27929190614bcb565b6040516020818303038152906040529392505050565b611d45612775565b6040516332fb62e760e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063cbed8b9c90611d999088908890889088908890600401614bfa565b600060405180830381600087803b158015611db357600080fd5b505af1158015611dc7573d6000803e3d6000fd5b505050505050505050565b611dda612775565b60008111611e365760405162461bcd60e51b815260206004820152602360248201527f647374436861696e4964546f5472616e73666572476173206d7573742062652060448201526203e20360ec1b6064820152608401610c4b565b61ffff8216600081815260096020908152604091829020849055815192835282018390527fc46df2983228ac2d9754e94a0d565e6671665dc8ad38602bc8e544f0685a29fb9101611a5e565b61ffff86166000908152600560205260408082209051611ea5908890889061499b565b90815260408051602092819003830190206001600160401b03871660009081529252902054905080611f255760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201526261676560e81b6064820152608401610c4b565b808383604051611f3692919061499b565b604051809103902014611f955760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f616044820152601960fa1b6064820152608401610c4b565b61ffff87166000908152600560205260408082209051611fb8908990899061499b565b90815260408051602092819003830181206001600160401b038916600090815290845282902093909355601f88018290048202830182019052868252612050918991899089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250612c6d92505050565b7fc264d91f3adc5588250e1551f547752ca0cfa8f6b530d243b9f9f4cab10ea8e58787878785604051612087959493929190614c33565b60405180910390a150505050505050565b6120a0612775565b600081116120e85760405162461bcd60e51b81526020600482015260156024820152744c7a4170703a20696e76616c6964206d696e47617360581b6044820152606401610c4b565b61ffff83811660008181526002602090815260408083209487168084529482529182902085905581519283528201929092529081018290527f9d5c7c0b934da8fefa9c7760c98383778a12dfbfc0c3b3106518f43fb9508ac090606001611c2d565b6000612154612775565b604051600090339047908381818185875af1925050503d8060008114612196576040519150601f19603f3d011682016040523d82523d6000602084013e61219b565b606091505b50909250505090565b6121ac612775565b61ffff831660009081526001602052604090206121ca908383613d54565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab838383604051611c2d93929190614a71565b60008060008686604051602001612216929190614ca9565b60408051601f198184030181529082905263040a7bb160e41b825291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340a7bb109061227a908b90309086908b908b90600401614cd7565b6040805180830381865afa158015612296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ba9190614d2b565b92509250509550959350505050565b6122d1612775565b6001600160a01b0381166123365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c4b565b61126c81612dc4565b604051633d7b2f6f60e21b815261ffff808616600483015284166024820152306044820152606481018290526060907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f5ecbdbc90608401600060405180830381865afa1580156123bf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123e79190810190614d4f565b90505b949350505050565b86518551146124695760405162461bcd60e51b815260206004820152603760248201527f556c7472614d61726174686f6e3a20746f6b656e49647320616e64206473744360448201527f6861696e496473206c656e677468206d69736d617463680000000000000000006064820152608401610c4b565b81518551146124e05760405162461bcd60e51b815260206004820152603960248201527f556c7472614d61726174686f6e3a20746f6b656e49647320616e64206164617060448201527f746572506172616d73206c656e677468206d69736d61746368000000000000006064820152608401610c4b565b80518551146125505760405162461bcd60e51b815260206004820152603660248201527f556c7472614d61726174686f6e3a20746f6b656e49647320616e64206e6174696044820152750ecca8ccacae640d8cadccee8d040dad2e6dac2e8c6d60531b6064820152608401610c4b565b86518151146125715760405162461bcd60e51b8152600401610c4b90614d83565b86518251146125925760405162461bcd60e51b8152600401610c4b90614d83565b80518251146126095760405162461bcd60e51b815260206004820152603b60248201527f556c7472614d61726174686f6e3a206e61746976654665657320616e6420616460448201527f6170746572506172616d73206c656e677468206d69736d6174636800000000006064820152608401610c4b565b60005b8751811015611dc757600088828151811061262957612629614de0565b60200260200101519050600084838151811061264757612647614de0565b60200260200101519050600088848151811061266557612665614de0565b60200260200101519050600085858151811061268357612683614de0565b602002602001015190506126a58d858d61269c86612a89565b8d8d898861317a565b5050505080806126b4906149c1565b91505061260c565b60008061271f5a60966366ad5c8a60e01b898989896040516024016126e49493929190614df6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091523092919061334a565b91509150816116125761161286868686856133d4565b60006001600160e01b031982166380ac58cd60e01b148061276657506001600160e01b03198216635b5e139f60e01b145b80610e255750610e2582613471565b6000546001600160a01b031633146116bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c4b565b6127d8816134a6565b61126c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610c4b565b6000818152600f6020526040902080546001600160a01b0319166001600160a01b0384169081179091558190612854826114de565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6114228282604051806020016040528060008152506134c3565b6000806128b3836114de565b9050806001600160a01b0316846001600160a01b031614806128fa57506001600160a01b0380821660009081526010602090815260408083209388168352929052205460ff165b806123ea5750836001600160a01b031661291384610f46565b6001600160a01b031614949350505050565b826001600160a01b0316612938826114de565b6001600160a01b03161461295e5760405162461bcd60e51b8152600401610c4b90614e34565b6001600160a01b0382166129c05760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c4b565b826001600160a01b03166129d3826114de565b6001600160a01b0316146129f95760405162461bcd60e51b8152600401610c4b90614e34565b6000818152600f6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652600e8552838620805460001901905590871680865283862080546001019055868652600d90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ac357612ac3614de0565b602090810291909101015292915050565b6000845111612b1b5760405162461bcd60e51b8152602060048201526013602482015272746f6b656e4964735b5d20697320656d70747960681b6044820152606401610c4b565b835160011480612b3f575061ffff8616600090815260086020526040902054845111155b612b5b5760405162461bcd60e51b8152600401610c4b90614e79565b60005b8451811015612b9e57612b8c888888888581518110612b7f57612b7f614de0565b60200260200101516134f6565b80612b96816149c1565b915050612b5e565b5060008585604051602001612bb4929190614ca9565b6040516020818303038152906040529050612bf9876001848851600960008d61ffff1661ffff16815260200190815260200160002054612bf49190614a29565b6135e1565b612c078782868686346136c0565b85604051612c159190614ebb565b6040518091039020886001600160a01b03168861ffff167fe1b87c47fdeb4f9cbadbca9df3af7aba453bb6e501075d0440d88125b711522a88604051612c5b9190614ed7565b60405180910390a45050505050505050565b60008082806020019051810190612c849190614ad4565b601482015191935091506000612c9c88838386612e6e565b90508251811015612d705784516020808701919091206040805160808101825261ffff808d1682526001600160a01b038088168387019081528385018881526001606086018181526000898152600a909a529887902095518654935190941662010000026001600160b01b03199093169390941692909217178355519082015592516002909301805493151560ff199094169390931790925590517f10e0b70d256bccc84b7027506978bd8b68984a870788b93b479def144c839ad790612d669083908990614eea565b60405180910390a1505b816001600160a01b031687604051612d889190614ebb565b60405180910390208961ffff167f5b821db8a46f8ecbe1941ba2f51cfeea9643268b56631f70d45e2a745d99026586604051612c5b9190614ed7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60026006541415612e675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c4b565b6002600655565b6000825b82518110156123e7576007545a1015612e8a576123e7565b612eae8686858481518110612ea157612ea1614de0565b6020026020010151613866565b80612eb8816149c1565b915050612e72565b606081612ece81601f614f03565b1015612f0d5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610c4b565b612f178284614f03565b84511015612f5b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610c4b565b606082158015612f7a5760405191506000825260208201604052612fc4565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612fb3578051835260209283019201612f9b565b5050858452601f01601f1916604052505b50949350505050565b816001600160a01b0316836001600160a01b0316141561302f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c4b565b6001600160a01b03838116600081815260106020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6130a7848484612925565b6130b3848484846138c6565b611c7b5760405162461bcd60e51b8152600401610c4b90614f1b565b606060148054610e3a90614960565b606060006130eb836139c1565b60010190506000816001600160401b0381111561310a5761310a614061565b6040519080825280601f01601f191660200182016040528015613134576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461316d57613172565b61313e565b509392505050565b600081116131c25760405162461bcd60e51b815260206004820152601560248201527406e6174697665466565206d757374206265203e203605c1b6044820152606401610c4b565b60008551116132095760405162461bcd60e51b8152602060048201526013602482015272746f6b656e4964735b5d20697320656d70747960681b6044820152606401610c4b565b84516001148061322d575061ffff8716600090815260086020526040902054855111155b6132495760405162461bcd60e51b8152600401610c4b90614e79565b60005b855181101561327f5761326d898989898581518110612b7f57612b7f614de0565b80613277816149c1565b91505061324c565b5060008686604051602001613295929190614ca9565b60405160208183030381529060405290506132d5886001858951600960008e61ffff1661ffff16815260200190815260200160002054612bf49190614a29565b6132e38882878787876136c0565b866040516132f19190614ebb565b6040518091039020896001600160a01b03168961ffff167fe1b87c47fdeb4f9cbadbca9df3af7aba453bb6e501075d0440d88125b711522a896040516133379190614ed7565b60405180910390a4505050505050505050565b6000606060008060008661ffff166001600160401b0381111561336f5761336f614061565b6040519080825280601f01601f191660200182016040528015613399576020820181803683370190505b50905060008087516020890160008d8df191503d9250868311156133bb578692505b828152826000602083013e909890975095505050505050565b8180519060200120600560008761ffff1661ffff168152602001908152602001600020856040516134059190614ebb565b9081526040805191829003602090810183206001600160401b0388166000908152915220919091557fe183f33de2837795525b4792ca4cd60535bd77c53b7e7030060bfcf5734d6b0c906134629087908790879087908790614f6d565b60405180910390a15050505050565b60006001600160e01b031982166322bac5d960e01b1480610e2557506301ffc9a760e01b6001600160e01b0319831614610e25565b6000908152600d60205260409020546001600160a01b0316151590565b6134cd8383613a99565b6134da60008484846138c6565b61107e5760405162461bcd60e51b8152600401610c4b90614f1b565b6134ff33611274565b6135625760405162461bcd60e51b815260206004820152602e60248201527f4f4e46543732313a2073656e642063616c6c6572206973206e6f74206f776e6560448201526d1c881b9bdc88185c1c1c9bdd995960921b6064820152608401610c4b565b836001600160a01b0316613575826114de565b6001600160a01b0316146135d65760405162461bcd60e51b815260206004820152602260248201527f4f4e46543732313a2073656e642066726f6d20696e636f7272656374206f776e60448201526132b960f11b6064820152608401610c4b565b611c7b843083612925565b60006135ec83613c06565b61ffff80871660009081526002602090815260408083209389168352929052908120549192509061361e908490614f03565b9050600081116136705760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610c4b565b808210156116125760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610c4b565b61ffff8616600090815260016020526040812080546136de90614960565b80601f016020809104026020016040519081016040528092919081815260200182805461370a90614960565b80156137575780601f1061372c57610100808354040283529160200191613757565b820191906000526020600020905b81548152906001019060200180831161373a57829003601f168201915b505050505090508051600014156137c95760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201526f61207472757374656420736f7572636560801b6064820152608401610c4b565b6137d4878751613c62565b60405162c5803160e81b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c580310090849061382b908b9086908c908c908c908c90600401614fbf565b6000604051808303818588803b15801561384457600080fd5b505af1158015613858573d6000803e3d6000fd5b505050505050505050505050565b61386f816134a6565b158061389b575061387f816134a6565b801561389b575030613890826114de565b6001600160a01b0316145b6138a457600080fd5b6138ad816134a6565b6138bb5761107e828261288d565b61107e308383612925565b60006001600160a01b0384163b156139b957604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061390a903390899088908890600401615026565b6020604051808303816000875af1925050508015613945575060408051601f3d908101601f1916820190925261394291810190615063565b60015b61399f573d808015613973576040519150601f19603f3d011682016040523d82523d6000602084013e613978565b606091505b5080516139975760405162461bcd60e51b8152600401610c4b90614f1b565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506123ea565b5060016123ea565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613a005772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310613a2c576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310613a4a57662386f26fc10000830492506010015b6305f5e1008310613a62576305f5e100830492506008015b6127108310613a7657612710830492506004015b60648310613a88576064830492506002015b600a8310610e255760010192915050565b6001600160a01b038216613aef5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c4b565b613af8816134a6565b15613b455760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c4b565b613b4e816134a6565b15613b9b5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c4b565b6001600160a01b0382166000818152600e6020908152604080832080546001019055848352600d90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000602282511015613c5a5760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c69642061646170746572506172616d73000000006044820152606401610c4b565b506022015190565b61ffff821660009081526003602052604090205480613c8057506127105b8082111561107e5760405162461bcd60e51b815260206004820181905260248201527f4c7a4170703a207061796c6f61642073697a6520697320746f6f206c617267656044820152606401610c4b565b828054613cdc90614960565b90600052602060002090601f016020900481019282613cfe5760008555613d44565b82601f10613d1757805160ff1916838001178555613d44565b82800160010185558215613d44579182015b82811115613d44578251825591602001919060010190613d29565b50613d50929150613dc8565b5090565b828054613d6090614960565b90600052602060002090601f016020900481019282613d825760008555613d44565b82601f10613d9b5782800160ff19823516178555613d44565b82800160010185558215613d44579182015b82811115613d44578235825591602001919060010190613dad565b5b80821115613d505760008155600101613dc9565b803561ffff81168114613def57600080fd5b919050565b60008083601f840112613e0657600080fd5b5081356001600160401b03811115613e1d57600080fd5b602083019150836020828501011115613e3557600080fd5b9250929050565b80356001600160401b0381168114613def57600080fd5b60008060008060008060808789031215613e6c57600080fd5b613e7587613ddd565b955060208701356001600160401b0380821115613e9157600080fd5b613e9d8a838b01613df4565b9097509550859150613eb160408a01613e3c565b94506060890135915080821115613ec757600080fd5b50613ed489828a01613df4565b979a9699509497509295939492505050565b6001600160e01b03198116811461126c57600080fd5b600060208284031215613f0e57600080fd5b8135611b7a81613ee6565b60005b83811015613f34578181015183820152602001613f1c565b83811115611c7b5750506000910152565b60008151808452613f5d816020860160208601613f19565b601f01601f19169290920160200192915050565b602081526000611b7a6020830184613f45565b600060208284031215613f9657600080fd5b611b7a82613ddd565b600060208284031215613fb157600080fd5b5035919050565b6001600160a01b038116811461126c57600080fd5b8035613def81613fb8565b60008060408385031215613feb57600080fd5b8235613ff681613fb8565b946020939093013593505050565b6000806040838503121561401757600080fd5b613ff683613ddd565b60008060006060848603121561403557600080fd5b833561404081613fb8565b9250602084013561405081613fb8565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561409f5761409f614061565b604052919050565b60006001600160401b038211156140c0576140c0614061565b50601f01601f191660200190565b60006140e16140dc846140a7565b614077565b90508281528383830111156140f557600080fd5b828260208301376000602084830101529392505050565b600082601f83011261411d57600080fd5b611b7a838335602085016140ce565b80358015158114613def57600080fd5b600080600080600060a0868803121561415457600080fd5b61415d86613ddd565b945060208601356001600160401b038082111561417957600080fd5b61418589838a0161410c565b95506040880135945061419a6060890161412c565b935060808801359150808211156141b057600080fd5b506141bd8882890161410c565b9150509295509295909350565b6000806000604084860312156141df57600080fd5b6141e884613ddd565b925060208401356001600160401b0381111561420357600080fd5b61420f86828701613df4565b9497909650939450505050565b600080600080600080600060e0888a03121561423757600080fd5b873561424281613fb8565b965061425060208901613ddd565b955060408801356001600160401b038082111561426c57600080fd5b6142788b838c0161410c565b965060608a0135955060808a0135915061429182613fb8565b90935060a0890135906142a382613fb8565b90925060c089013590808211156142b957600080fd5b506142c68a828b0161410c565b91505092959891949750929550565b6000806000606084860312156142ea57600080fd5b6142f384613ddd565b925060208401356001600160401b0381111561430e57600080fd5b61431a8682870161410c565b92505061432960408501613e3c565b90509250925092565b60006020828403121561434457600080fd5b8135611b7a81613fb8565b6000806040838503121561436257600080fd5b61436b83613ddd565b915061437960208401613ddd565b90509250929050565b60006020828403121561439457600080fd5b81356001600160401b038111156143aa57600080fd5b6123ea8482850161410c565b6000602082840312156143c857600080fd5b81356001600160401b038111156143de57600080fd5b8201601f810184136143ef57600080fd5b6123ea848235602084016140ce565b6000806040838503121561441157600080fd5b823561441c81613fb8565b91506143796020840161412c565b60006001600160401b0382111561444357614443614061565b5060051b60200190565b600082601f83011261445e57600080fd5b8135602061446e6140dc8361442a565b82815260059290921b8401810191818101908684111561448d57600080fd5b8286015b848110156144a85780358352918301918301614491565b509695505050505050565b600080600080600080600060e0888a0312156144ce57600080fd5b87356144d981613fb8565b96506144e760208901613ddd565b955060408801356001600160401b038082111561450357600080fd5b61450f8b838c0161410c565b965060608a013591508082111561452557600080fd5b6145318b838c0161444d565b955060808a0135915061454382613fb8565b81945061455260a08b01613fcd565b935060c08a01359150808211156142b957600080fd5b6000806000806080858703121561457e57600080fd5b843561458981613fb8565b9350602085013561459981613fb8565b92506040850135915060608501356001600160401b038111156145bb57600080fd5b6145c78782880161410c565b91505092959194509250565b6000806000806000608086880312156145eb57600080fd5b6145f486613ddd565b945061460260208701613ddd565b93506040860135925060608601356001600160401b0381111561462457600080fd5b61463088828901613df4565b969995985093965092949392505050565b60008060006060848603121561465657600080fd5b61465f84613ddd565b925061466d60208501613ddd565b9150604084013590509250925092565b6000806040838503121561469057600080fd5b823561469b81613fb8565b915060208301356146ab81613fb8565b809150509250929050565b600080600080600060a086880312156146ce57600080fd5b6146d786613ddd565b945060208601356001600160401b03808211156146f357600080fd5b6146ff89838a0161410c565b9550604088013591508082111561471557600080fd5b61472189838a0161444d565b945061419a6060890161412c565b6000806000806080858703121561474557600080fd5b61474e85613ddd565b935061475c60208601613ddd565b9250604085013561476c81613fb8565b9396929550929360600135925050565b600082601f83011261478d57600080fd5b8135602061479d6140dc8361442a565b82815260059290921b840181019181810190868411156147bc57600080fd5b8286015b848110156144a8576147d181613ddd565b83529183019183016147c0565b600082601f8301126147ef57600080fd5b813560206147ff6140dc8361442a565b82815260059290921b8401810191818101908684111561481e57600080fd5b8286015b848110156144a85780356001600160401b038111156148415760008081fd5b61484f8986838b010161410c565b845250918301918301614822565b600080600080600080600080610100898b03121561487a57600080fd5b61488389613fcd565b975060208901356001600160401b038082111561489f57600080fd5b6148ab8c838d0161477c565b985060408b01359150808211156148c157600080fd5b6148cd8c838d0161410c565b975060608b01359150808211156148e357600080fd5b6148ef8c838d0161444d565b96506148fd60808c01613fcd565b955061490b60a08c01613fcd565b945060c08b013591508082111561492157600080fd5b61492d8c838d016147de565b935060e08b013591508082111561494357600080fd5b506149508b828c0161444d565b9150509295985092959890939650565b600181811c9082168061497457607f821691505b6020821081141561499557634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b634e487b7160e01b600052601160045260246000fd5b60006000198214156149d5576149d56149ab565b5060010190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6000816000190483118215151615614a4357614a436149ab565b500290565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b61ffff841681526040602082015260006123e7604083018486614a48565b600082601f830112614aa057600080fd5b8151614aae6140dc826140a7565b818152846020838601011115614ac357600080fd5b6123ea826020830160208701613f19565b60008060408385031215614ae757600080fd5b82516001600160401b0380821115614afe57600080fd5b614b0a86838701614a8f565b9350602091508185015181811115614b2157600080fd5b85019050601f81018613614b3457600080fd5b8051614b426140dc8261442a565b81815260059190911b82018301908381019088831115614b6157600080fd5b928401925b82841015614b7f57835182529284019290840190614b66565b80955050505050509250929050565b600082821015614ba057614ba06149ab565b500390565b8284823760609190911b6bffffffffffffffffffffffff19169101908152601401919050565b60008351614bdd818460208801613f19565b835190830190614bf1818360208801613f19565b01949350505050565b600061ffff808816835280871660208401525084604083015260806060830152614c28608083018486614a48565b979650505050505050565b61ffff86168152608060208201526000614c51608083018688614a48565b6001600160401b0394909416604083015250606001529392505050565b600081518084526020808501945080840160005b83811015614c9e57815187529582019590820190600101614c82565b509495945050505050565b604081526000614cbc6040830185613f45565b8281036020840152614cce8185614c6e565b95945050505050565b61ffff861681526001600160a01b038516602082015260a060408201819052600090614d0590830186613f45565b84151560608401528281036080840152614d1f8185613f45565b98975050505050505050565b60008060408385031215614d3e57600080fd5b505080516020909101519092909150565b600060208284031215614d6157600080fd5b81516001600160401b03811115614d7757600080fd5b6123ea84828501614a8f565b60208082526039908201527f556c7472614d61726174686f6e3a206e61746976654665657320616e6420647360408201527f74436861696e496473206c656e677468206d69736d6174636800000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b61ffff85168152608060208201526000614e136080830186613f45565b6001600160401b03851660408401528281036060840152614c288185613f45565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b60208082526022908201527f62617463682073697a65206578636565647320647374206261746368206c696d6040820152611a5d60f21b606082015260800190565b60008251614ecd818460208701613f19565b9190910192915050565b602081526000611b7a6020830184614c6e565b8281526040602082015260006123ea6040830184613f45565b60008219821115614f1657614f166149ab565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b61ffff8616815260a060208201526000614f8a60a0830187613f45565b6001600160401b03861660408401528281036060840152614fab8186613f45565b90508281036080840152614d1f8185613f45565b61ffff8716815260c060208201526000614fdc60c0830188613f45565b8281036040840152614fee8188613f45565b6001600160a01b0387811660608601528616608085015283810360a085015290506150198185613f45565b9998505050505050505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061505990830184613f45565b9695505050505050565b60006020828403121561507557600080fd5b8151611b7a81613ee656fea2646970667358221220df4283bee9755404704503999e3a7ac76220b0946be9a43f9fa9cc3daa3c99c764736f6c634300080c003300000000000000000000000000000000000000000000000000000000000249f00000000000000000000000003c2269811836af69497e5f486a85d7316753cf6200000000000000000000000000000000000000000000000000000000007a12010000000000000000000000000000000000000000000000000000000000895440