ETH Price: $3,814.20 (+5.43%)

Token

ERC-20: CryptoUncle12 NFT (CryptoUncle12)
 

Overview

Max Total Supply

0 CryptoUncle12

Holders

786

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 CryptoUncle12
0x233397e8ff26b33cde83e8d86bb1a1a83f78a53b
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoUncle12

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-07
*/

// File: contracts/CryptoUncle12.sol

// SPDX-License-Identifier: MIT


pragma solidity >=0.5.0;

interface ILayerZeroUserApplicationConfig {
    // @notice set the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _configType - type of configuration. every messaging library has its own convention.
    // @param _config - configuration in the bytes. can encode arbitrary content.
    function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external;

    // @notice set the send() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setSendVersion(uint16 _version) external;

    // @notice set the lzReceive() LayerZero messaging library version to _version
    // @param _version - new messaging library version
    function setReceiveVersion(uint16 _version) external;

    // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload
    // @param _srcChainId - the chainId of the source chain
    // @param _srcAddress - the contract address of the source contract at the source chain
    function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external;
}

// File: contracts/interfaces/ILayerZeroEndpoint.sol



pragma solidity >=0.5.0;


interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig {
    // @notice send a LayerZero message to the specified address at a LayerZero endpoint.
    // @param _dstChainId - the destination chain identifier
    // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains
    // @param _payload - a custom bytes payload to send to the destination contract
    // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address
    // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction
    // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination
    function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable;

    // @notice used by the messaging library to publish verified payload
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source contract (as bytes) at the source chain
    // @param _dstAddress - the address on destination chain
    // @param _nonce - the unbound message ordering nonce
    // @param _gasLimit - the gas limit for external contract execution
    // @param _payload - verified payload to send to the destination contract
    function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external;

    // @notice get the inboundNonce of a receiver from a source chain which could be EVM or non-EVM chain
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64);

    // @notice get the outboundNonce from this source chain which, consequently, is always an EVM
    // @param _srcAddress - the source chain contract address
    function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64);

    // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery
    // @param _dstChainId - the destination chain identifier
    // @param _userApplication - the user app address on this EVM chain
    // @param _payload - the custom message to send over LayerZero
    // @param _payInZRO - if false, user app pays the protocol fee in native token
    // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain
    function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee);

    // @notice get this Endpoint's immutable source identifier
    function getChainId() external view returns (uint16);

    // @notice the interface to retry failed message on this Endpoint destination
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    // @param _payload - the payload to be retried
    function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external;

    // @notice query if any STORED payload (message blocking) at the endpoint.
    // @param _srcChainId - the source chain identifier
    // @param _srcAddress - the source chain contract address
    function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool);

    // @notice query if the _libraryAddress is valid for sending msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getSendLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the _libraryAddress is valid for receiving msgs.
    // @param _userApplication - the user app address on this EVM chain
    function getReceiveLibraryAddress(address _userApplication) external view returns (address);

    // @notice query if the non-reentrancy guard for send() is on
    // @return true if the guard is on. false otherwise
    function isSendingPayload() external view returns (bool);

    // @notice query if the non-reentrancy guard for receive() is on
    // @return true if the guard is on. false otherwise
    function isReceivingPayload() external view returns (bool);

    // @notice get the configuration of the LayerZero messaging library of the specified version
    // @param _version - messaging library version
    // @param _chainId - the chainId for the pending config change
    // @param _userApplication - the contract address of the user application
    // @param _configType - type of configuration. every messaging library has its own convention.
    function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory);

    // @notice get the send() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getSendVersion(address _userApplication) external view returns (uint16);

    // @notice get the lzReceive() LayerZero messaging library version
    // @param _userApplication - the contract address of the user application
    function getReceiveVersion(address _userApplication) external view returns (uint16);
}

// File: contracts/interfaces/ILayerZeroReceiver.sol



pragma solidity >=0.5.0;

interface ILayerZeroReceiver {
    // @notice LayerZero endpoint will invoke this function to deliver the message on the destination
    // @param _srcChainId - the source endpoint identifier
    // @param _srcAddress - the source sending contract address from the source chain
    // @param _nonce - the ordered message nonce
    // @param _payload - the signed payload is the UA bytes has encoded to be sent
    function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external;
}
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC721/ERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/NonblockingReceiver.sol


pragma solidity ^0.8.6;




abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver {

    ILayerZeroEndpoint internal endpoint;

    struct FailedMessages {
        uint payloadLength;
        bytes32 payloadHash;
    }

    mapping(uint16 => mapping(bytes => mapping(uint => FailedMessages))) public failedMessages;
    mapping(uint16 => bytes) public trustedRemoteLookup;

    event MessageFailed(uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload);

    function lzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) external override {
        require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security
        require(_srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), 
            "NonblockingReceiver: invalid source sending contract");

        // try-catch all errors/exceptions
        // having failed messages does not block messages passing
        try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) {
            // do nothing
        } catch {
            // error / exception
            failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages(_payload.length, keccak256(_payload));
            emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload);
        }
    }

    function onLzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) public {
        // only internal transaction
        require(msg.sender == address(this), "NonblockingReceiver: caller must be Bridge.");

        // handle incoming message
        _LzReceive( _srcChainId, _srcAddress, _nonce, _payload);
    }

    // abstract function
    function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) virtual internal;

    function _lzSend(uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam) internal {
        endpoint.send{value: msg.value}(_dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam);
    }

    function retryMessage(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload) external payable {
        // assert there is message to retry
        FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][_nonce];
        require(failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message");
        require(_payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload");
        // clear the stored message
        failedMsg.payloadLength = 0;
        failedMsg.payloadHash = bytes32(0);
        // execute the message. revert if it fails again
        this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload);
    }

    function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote) external onlyOwner {
        trustedRemoteLookup[_chainId] = _trustedRemote;
    }
}

// File: contracts/GhostlyGhosts.sol



pragma solidity ^0.8.7;

//                                                #K#EL# .                                          
//                                              j,#.#W#E#### #                                        
//                                            #W#t###W######## fD                                     
//                                          .################K###                                     
//                                         ###################t####                                   
//                                       :#########################                                   
//                                      #############################,                                
//                                     #G#############################                                
//                                     ####G###############Df#######D                                 
//                                    ############################E##L                                
//                                    ################Wf  G####,###,                                  
//                                   i###K###.####E        ##:## L##                                  
//                                    ##########,           ## #G: W                                  
//                                    j#########            .:    #                                   
//                                     #########                                                      
//                                     L########;                  #                                  
//                                      ########,                  W                                  
//                                      ########                                                      
//                                      ########                    f                                 
//                                       ######K       Kj        W. #                                 
//                                       ######      ##,  #    .#,  #E                                
//                                        #####     E  G###W;#K##   #DD                               
//                                        ##### ;LW#t   E#L#    #G  #;                                
//                                        K#  #         ## #  t i.  #f                                
//                                        #                #   #    ##                                
//                                       Wt if      K     t #  #    #                                 
//                                       Ki   #      #   K: f##L:##G#                                 
//                                        #           :j:  tKjt.    #                                 
//                                        W#tjG           #######  .W                                 
//                                          W#           ####Gi### WE                                 
//                                            #         ## #    D# #                                  
//                                            Dt        ##:f    :#D#                                  
//                                             #       .###  ##  ###                                  
//                                              #:     f##D E###L##                                   
//                                               ,     D###E#######                                   
//                                               E   #tD###########                                   
//                                               #   i############,                                   
//                                              ##     L##########                                    
//                                            f####D     L#######                                     
//                                       :E###########Wf   ;###:                                      
//                                   L##########################                                      
//                                i################# ###########D                                     
//                              i###E ###############W#############                                   
//                             #################################Gt###                                 
//                            ########################################W                               
//                           W########################################W;.                             
//                          K####################LW######################                             
//                          ##############################################                            
//                         ###############################################                            
//                        .###K ###########################################t.                         
//                        ##############L####################j########jttttttttD#                     
//                        ###################################,########ttttttttttt                     
//                       ############################################ttttttttttE                      
//                       ############################################ttttttttttE                      
//                      t###########################################ttttttttttG                       
//                      ##########################:#################ttttttttttW                       
//                      #####:#################### ################ttttttttttD                        
//                      ##########################################Gfttttttttt#                        
//                     j################j#####################j    tjttttttLKj                        
//                     ##################E##################W       WtttED                            
//                     #####################################     tK  #tK                              
//                      ############ ######################:      ## :tW.E#j                          
//                     #############t#####################E         WEt#      G                       
//                     #############D###########, #######E     E#;   f:       .                       
//                     #############E###################;        :#K #  tWj   W                       
//                     #############E#################:        f   #,#L        i                      
//                     ####G########f#################          ,t ##;  ,K##i :                       
//                     #####W#######;################W           E####i      ,E                       
//                     ############# ################K         #######     L###                       
//                     ############# ######i :#######W        #################.                      
//                     ############# ##:  ,W##########   .:  W#################K                      
//                     ############   D############### #########################                      
//                     #########;:##############################################                      
//                     K#######K################################################                      
//                     i################# ##################;#####;.######## ###                      
//                      ####################################:###############.###                      
//                      ####################################################:###                      
//                      W#####################; ############################G###                      
//                      .###i,##############::#################################K                      
//                       #################:i###################################;                      
//                       E##############.G############t########################                       
//                        ############ W############# ########################i                       
//                        ;#########,############################## ##########                        
//                         #################K#################################                        
//                          K############### ################################      


contract CryptoUncle12 is Ownable, ERC721, NonblockingReceiver {


    address public _owner;
    string private baseURI;
    uint256 nextTokenId = 0;
    uint256 MAX_MINT_ETHEREUM = 5000;
    uint256 PRICE = 0.002 ether;

    uint gasForDestinationLzReceive = 350000;

    constructor(string memory baseURI_, address _layerZeroEndpoint) ERC721("CryptoUncle12 NFT", "CryptoUncle12") {
        _owner = msg.sender;
        endpoint = ILayerZeroEndpoint(_layerZeroEndpoint);
        baseURI = baseURI_;
    }

    // mint function
    function mint(uint8 numTokens) external payable {
        require((PRICE * numTokens) <= msg.value, "Not enough amount sent.");
        require(nextTokenId + numTokens <= MAX_MINT_ETHEREUM, "CryptoUncle12: Mint exceeds supply");
        for (uint256 i = 0; i < numTokens; i++) {
            _safeMint(msg.sender, ++nextTokenId);
        }
    }

    // This function transfers the nft from your address on the
    // source chain to the same address on the destination chain
    function traverseChains(uint16 _chainId, uint tokenId) public payable {
        require(msg.sender == ownerOf(tokenId), "You must own the token to traverse");
        require(trustedRemoteLookup[_chainId].length > 0, "This chain is currently unavailable for travel");

        // burn NFT, eliminating it from circulation on src chain
        _burn(tokenId);

        // abi.encode() the payload with the values to send
        bytes memory payload = abi.encode(msg.sender, tokenId);

        // encode adapterParams to specify more gas for the destination
        uint16 version = 1;
        bytes memory adapterParams = abi.encodePacked(version, gasForDestinationLzReceive);

        // get the fees we need to pay to LayerZero + Relayer to cover message delivery
        // you will be refunded for extra gas paid
        (uint messageFee, ) = endpoint.estimateFees(_chainId, address(this), payload, false, adapterParams);

        require(msg.value >= messageFee, "CryptoUncle12: msg.value not enough to cover messageFee. Send gas for message fees");

        endpoint.send{value: msg.value}(
            _chainId,                           // destination chainId
            trustedRemoteLookup[_chainId],      // destination address of nft contract
            payload,                            // abi.encoded()'ed bytes
            payable(msg.sender),                // refund address
            address(0x0),                       // 'zroPaymentAddress' unused for this
            adapterParams                       // txParameters
        );
    }

    function setBaseURI(string memory URI) external onlyOwner {
        baseURI = URI;
    }

    function donate() external payable {
        // thank you
    }

    // This allows the devs to receive kind donations
    function withdraw(uint amt) external onlyOwner {
        (bool sent, ) = payable(_owner).call{value: amt}("");
        require(sent, "CryptoUncle12: Failed to withdraw Ether");
    }

    // just in case this fixed variable limits us from future integrations
    function setGasForDestinationLzReceive(uint newVal) external onlyOwner {
        gasForDestinationLzReceive = newVal;
    }

    // ------------------
    // Internal Functions
    // ------------------
 
    function _LzReceive(uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload) override internal {
        // decode
        (address toAddr, uint tokenId) = abi.decode(_payload, (address, uint));
        require(_srcChainId!=0,"_srcChainId");
        require(_srcAddress.length!=0,"_srcAddress");
        require(_nonce!=0,"_nonce");

        // mint the tokens back into existence on destination chain
        _safeMint(toAddr, tokenId);
    }

    function _baseURI() override internal view returns (string memory) {
        return baseURI;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"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"}],"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":"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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"onLzReceive","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":[],"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":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600c55611388600d5566071afd498d0000600e5562055730600f553480156200002e57600080fd5b5060405162003c5238038062003c52833981016040819052620000519162000247565b6040518060400160405280601181526020017010dc9e5c1d1bd55b98db194c4c88139195607a1b8152506040518060400160405280600d81526020016c21b93cb83a37aab731b632989960991b815250620000bb620000b56200013060201b60201c565b62000134565b8151620000d090600190602085019062000184565b508051620000e690600290602084019062000184565b5050600a8054336001600160a01b031991821617909155600780549091166001600160a01b0384161790555081516200012790600b90602085019062000184565b5050506200038b565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054620001929062000338565b90600052602060002090601f016020900481019282620001b6576000855562000201565b82601f10620001d157805160ff191683800117855562000201565b8280016001018555821562000201579182015b8281111562000201578251825591602001919060010190620001e4565b506200020f92915062000213565b5090565b5b808211156200020f576000815560010162000214565b80516001600160a01b03811681146200024257600080fd5b919050565b600080604083850312156200025b57600080fd5b82516001600160401b03808211156200027357600080fd5b818501915085601f8301126200028857600080fd5b8151818111156200029d576200029d62000375565b604051601f8201601f19908116603f01168101908382118183101715620002c857620002c862000375565b81604052828152602093508884848701011115620002e557600080fd5b600091505b82821015620003095784820184015181830185015290830190620002ea565b828211156200031b5760008484830101525b95506200032d9150508582016200022a565b925050509250929050565b600181811c908216806200034d57607f821691505b602082108114156200036f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6138b7806200039b6000396000f3fe6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610558578063eb8d72b7146105ae578063ed88c68e146101e6578063f2fde38b146105ce57600080fd5b8063b88d4fde146104f2578063c87b56dd14610512578063cf89fa0314610532578063d1deba1f1461054557600080fd5b8063943fb872116100d1578063943fb8721461047057806395d89b4114610490578063a22cb465146104a5578063b2bdfa7b146104c557600080fd5b80637533d788146103ba5780638da5cb5b146103da5780638ee749121461040557600080fd5b80632e1a7d4d116101645780636352211e1161013e5780636352211e146103445780636ecd23061461036457806370a0823114610377578063715018a6146103a557600080fd5b80632e1a7d4d146102e457806342842e0e1461030457806355f804b31461032457600080fd5b8063081812fc116101a0578063081812fc1461023f578063095ea7b3146102845780631c37a822146102a457806323b872dd146102c457600080fd5b80621d3567146101c657806301ffc9a7146101e857806306fdde031461021d575b600080fd5b3480156101d257600080fd5b506101e66101e1366004613161565b6105ee565b005b3480156101f457600080fd5b50610208610203366004612f8d565b610832565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b50610232610917565b60405161021491906133d4565b34801561024b57600080fd5b5061025f61025a3660046131f6565b6109a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610214565b34801561029057600080fd5b506101e661029f366004612f61565b610a83565b3480156102b057600080fd5b506101e66102bf366004613161565b610c10565b3480156102d057600080fd5b506101e66102df366004612e81565b610cab565b3480156102f057600080fd5b506101e66102ff3660046131f6565b610d4c565b34801561031057600080fd5b506101e661031f366004612e81565b610ec1565b34801561033057600080fd5b506101e661033f366004612fc7565b610edc565b34801561035057600080fd5b5061025f61035f3660046131f6565b610f70565b6101e6610372366004613233565b611022565b34801561038357600080fd5b50610397610392366004612dfd565b61117b565b604051908152602001610214565b3480156103b157600080fd5b506101e6611249565b3480156103c657600080fd5b506102326103d5366004613010565b6112d6565b3480156103e657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025f565b34801561041157600080fd5b5061045b61042036600461307e565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b60408051928352602083019190915201610214565b34801561047c57600080fd5b506101e661048b3660046131f6565b611370565b34801561049c57600080fd5b506102326113f6565b3480156104b157600080fd5b506101e66104c0366004612f2e565b611405565b3480156104d157600080fd5b50600a5461025f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104fe57600080fd5b506101e661050d366004612ec2565b611410565b34801561051e57600080fd5b5061023261052d3660046131f6565b6114b2565b6101e66105403660046131da565b6115c2565b6101e66105533660046130d5565b6119b3565b34801561056457600080fd5b50610208610573366004612e48565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105ba57600080fd5b506101e66105c936600461302b565b611ba5565b3480156105da57600080fd5b506101e66105e9366004612dfd565b611c44565b60075473ffffffffffffffffffffffffffffffffffffffff16331461061257600080fd5b61ffff841660009081526009602052604090208054610630906136d4565b9050835114801561066f575061ffff841660009081526009602052604090819020905161065d91906132cc565b60405180910390208380519060200120145b610700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560448201527f7263652073656e64696e6720636f6e747261637400000000000000000000000060648201526084015b60405180910390fd5b6040517f1c37a8220000000000000000000000000000000000000000000000000000000081523090631c37a822906107429087908790879087906004016134c6565b600060405180830381600087803b15801561075c57600080fd5b505af192505050801561076d575060015b61082c576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516107b791906132b0565b90815260408051918290036020908101832067ffffffffffffffff8716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906108239086908690869086906134c6565b60405180910390a15b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806108c557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061091157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060018054610926906136d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610952906136d4565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff16610a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106f7565b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610a8e82610f70565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b3373ffffffffffffffffffffffffffffffffffffffff82161480610b755750610b758133610573565b610c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106f7565b610c0b8383611d74565b505050565b333014610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201527f206265204272696467652e00000000000000000000000000000000000000000060648201526084016106f7565b61082c84848484611e14565b610cb53382611f89565b610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106f7565b610c0b8383836120f9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b600a5460405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d8060008114610e27576040519150601f19603f3d011682016040523d82523d6000602084013e610e2c565b606091505b5050905080610ebd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43727970746f556e636c6531323a204661696c656420746f207769746864726160448201527f772045746865720000000000000000000000000000000000000000000000000060648201526084016106f7565b5050565b610c0b83838360405180602001604052806000815250611410565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b8051610ebd90600b906020840190612ba6565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016106f7565b348160ff16600e546110349190613654565b111561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656e6f75676820616d6f756e742073656e742e00000000000000000060448201526064016106f7565b600d548160ff16600c546110b09190613628565b111561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43727970746f556e636c6531323a204d696e742065786365656473207375707060448201527f6c7900000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b60005b8160ff16811015610ebd5761116933600c6000815461115f90613728565b9182905550612360565b8061117381613728565b915050611141565b600073ffffffffffffffffffffffffffffffffffffffff8216611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016106f7565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1633146112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b6112d4600061237a565b565b600960205260009081526040902080546112ef906136d4565b80601f016020809104026020016040519081016040528092919081815260200182805461131b906136d4565b80156113685780601f1061133d57610100808354040283529160200191611368565b820191906000526020600020905b81548152906001019060200180831161134b57829003601f168201915b505050505081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b600f55565b606060028054610926906136d4565b610ebd3383836123ef565b61141a3383611f89565b6114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106f7565b61082c8484848461251d565b60008181526003602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016106f7565b60006115706125c0565b9050600081511161159057604051806020016040528060008152506115bb565b8061159a846125cf565b6040516020016115ab92919061335c565b6040516020818303038152906040525b9392505050565b6115cb81610f70565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260448201527f736500000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b61ffff8216600090815260096020526040812080546116a3906136d4565b905011611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201527f626c6520666f722074726176656c00000000000000000000000000000000000060648201526084016106f7565b61173b81612701565b60408051336020820152808201839052815180820383018152606082018352600f547e0100000000000000000000000000000000000000000000000000000000000060808401526082808401919091528351808403909101815260a28301938490526007547f40a7bb1000000000000000000000000000000000000000000000000000000000909452909260019260009173ffffffffffffffffffffffffffffffffffffffff16906340a7bb10906117ff908990309089908790899060a6016133e7565b604080518083038186803b15801561181657600080fd5b505afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e919061320f565b50905080341015611907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f43727970746f556e636c6531323a206d73672e76616c7565206e6f7420656e6f60448201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160648201527f7320666f72206d65737361676520666565730000000000000000000000000000608482015260a4016106f7565b60075461ffff871660009081526009602052604080822090517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093169263c5803100923492611979928c928b913391908b90600401613510565b6000604051808303818588803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b5050505050505050505050565b61ffff851660009081526008602052604080822090516119d49087906132b0565b908152604080516020928190038301902067ffffffffffffffff87166000908152925290206001810154909150611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201527f657373616765000000000000000000000000000000000000000000000000000060648201526084016106f7565b805482148015611ab7575080600101548383604051611aad9291906132a0565b6040518091039020145b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f616400000000000060448201526064016106f7565b600080825560018201556040517f1c37a8220000000000000000000000000000000000000000000000000000000081523090631c37a82290611b6b9089908990899089908990600401613446565b600060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b61ffff8316600090815260096020526040902061082c908383612c2a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff8116611d68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f7565b611d718161237a565b50565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611dce82610f70565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611e2b9190612e1a565b915091508561ffff1660001415611e9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5f737263436861696e496400000000000000000000000000000000000000000060448201526064016106f7565b8451611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5f7372634164647265737300000000000000000000000000000000000000000060448201526064016106f7565b67ffffffffffffffff8416611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f5f6e6f6e6365000000000000000000000000000000000000000000000000000060448201526064016106f7565b611f818282612360565b505050505050565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1661203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106f7565b600061204583610f70565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b457508373ffffffffffffffffffffffffffffffffffffffff1661209c846109a9565b73ffffffffffffffffffffffffffffffffffffffff16145b806120f1575073ffffffffffffffffffffffffffffffffffffffff80821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661211982610f70565b73ffffffffffffffffffffffffffffffffffffffff16146121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016106f7565b73ffffffffffffffffffffffffffffffffffffffff821661225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f7565b612269600082611d74565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040812080546001929061229f908490613691565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054600192906122da908490613628565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ebd8282604051806020016040528060008152506127ce565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6125288484846120f9565b61253484848484612871565b61082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b6060600b8054610926906136d4565b60608161260f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612639578061262381613728565b91506126329050600a83613640565b9150612613565b60008167ffffffffffffffff81111561265457612654613802565b6040519080825280601f01601f19166020018201604052801561267e576020820181803683370190505b5090505b84156120f157612693600183613691565b91506126a0600a86613761565b6126ab906030613628565b60f81b8183815181106126c0576126c06137d3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126fa600a86613640565b9450612682565b600061270c82610f70565b9050612719600083611d74565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020526040812080546001929061274f908490613691565b909155505060008281526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6127d88383612a70565b6127e56000848484612871565b610c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612a65576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906128e890339089908890889060040161338b565b602060405180830381600087803b15801561290257600080fd5b505af1925050508015612950575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261294d91810190612faa565b60015b612a1a573d80801561297e576040519150601f19603f3d011682016040523d82523d6000602084013e612983565b606091505b508051612a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506120f1565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260408120805460019290612b23908490613628565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612bb2906136d4565b90600052602060002090601f016020900481019282612bd45760008555612c1a565b82601f10612bed57805160ff1916838001178555612c1a565b82800160010185558215612c1a579182015b82811115612c1a578251825591602001919060010190612bff565b50612c26929150612cbc565b5090565b828054612c36906136d4565b90600052602060002090601f016020900481019282612c585760008555612c1a565b82601f10612c8f578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612c1a565b82800160010185558215612c1a579182015b82811115612c1a578235825591602001919060010190612ca1565b5b80821115612c265760008155600101612cbd565b600067ffffffffffffffff80841115612cec57612cec613802565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612d3257612d32613802565b81604052809350858152868686011115612d4b57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f840112612d7757600080fd5b50813567ffffffffffffffff811115612d8f57600080fd5b602083019150836020828501011115612da757600080fd5b9250929050565b600082601f830112612dbf57600080fd5b6115bb83833560208501612cd1565b803561ffff81168114612de057600080fd5b919050565b803567ffffffffffffffff81168114612de057600080fd5b600060208284031215612e0f57600080fd5b81356115bb81613831565b60008060408385031215612e2d57600080fd5b8251612e3881613831565b6020939093015192949293505050565b60008060408385031215612e5b57600080fd5b8235612e6681613831565b91506020830135612e7681613831565b809150509250929050565b600080600060608486031215612e9657600080fd5b8335612ea181613831565b92506020840135612eb181613831565b929592945050506040919091013590565b60008060008060808587031215612ed857600080fd5b8435612ee381613831565b93506020850135612ef381613831565b925060408501359150606085013567ffffffffffffffff811115612f1657600080fd5b612f2287828801612dae565b91505092959194509250565b60008060408385031215612f4157600080fd5b8235612f4c81613831565b915060208301358015158114612e7657600080fd5b60008060408385031215612f7457600080fd5b8235612f7f81613831565b946020939093013593505050565b600060208284031215612f9f57600080fd5b81356115bb81613853565b600060208284031215612fbc57600080fd5b81516115bb81613853565b600060208284031215612fd957600080fd5b813567ffffffffffffffff811115612ff057600080fd5b8201601f8101841361300157600080fd5b6120f184823560208401612cd1565b60006020828403121561302257600080fd5b6115bb82612dce565b60008060006040848603121561304057600080fd5b61304984612dce565b9250602084013567ffffffffffffffff81111561306557600080fd5b61307186828701612d65565b9497909650939450505050565b60008060006060848603121561309357600080fd5b61309c84612dce565b9250602084013567ffffffffffffffff8111156130b857600080fd5b6130c486828701612dae565b925050604084013590509250925092565b6000806000806000608086880312156130ed57600080fd5b6130f686612dce565b9450602086013567ffffffffffffffff8082111561311357600080fd5b61311f89838a01612dae565b955061312d60408901612de5565b9450606088013591508082111561314357600080fd5b5061315088828901612d65565b969995985093965092949392505050565b6000806000806080858703121561317757600080fd5b61318085612dce565b9350602085013567ffffffffffffffff8082111561319d57600080fd5b6131a988838901612dae565b94506131b760408801612de5565b935060608701359150808211156131cd57600080fd5b50612f2287828801612dae565b600080604083850312156131ed57600080fd5b612f7f83612dce565b60006020828403121561320857600080fd5b5035919050565b6000806040838503121561322257600080fd5b505080516020909101519092909150565b60006020828403121561324557600080fd5b813560ff811681146115bb57600080fd5b6000815180845261326e8160208601602086016136a8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b600082516132c28184602087016136a8565b9190910192915050565b60008083546132da816136d4565b600182811680156132f2576001811461332157613350565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528287019450613350565b8760005260208060002060005b858110156133475781548a82015290840190820161332e565b50505082870194505b50929695505050505050565b6000835161336e8184602088016136a8565b8351908301906133828183602088016136a8565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526133ca6080830184613256565b9695505050505050565b6020815260006115bb6020830184613256565b61ffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015260a06040820152600061342060a0830186613256565b8415156060840152828103608084015261343a8185613256565b98975050505050505050565b61ffff861681526080602082015260006134636080830187613256565b67ffffffffffffffff8616604084015282810360608401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601168201019150509695505050505050565b61ffff851681526080602082015260006134e36080830186613256565b67ffffffffffffffff8516604084015282810360608401526135058185613256565b979650505050505050565b61ffff871681526000602060c0818401526000885461352e816136d4565b8060c087015260e06001808416600081146135505760018114613583576135b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a0152610100890195506135b1565b8d6000528660002060005b858110156135a95781548b820186015290830190880161358e565b8a0184019650505b505050505083810360408501526135c88189613256565b9150506135ed606084018773ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8516608084015282810360a084015261361b8185613256565b9998505050505050505050565b6000821982111561363b5761363b613775565b500190565b60008261364f5761364f6137a4565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368c5761368c613775565b500290565b6000828210156136a3576136a3613775565b500390565b60005b838110156136c35781810151838201526020016136ab565b8381111561082c5750506000910152565b600181811c908216806136e857607f821691505b60208210811415613722577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375a5761375a613775565b5060010190565b600082613770576137706137a4565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611d7157600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611d7157600080fdfea264697066735822122016b88538ed6a6ac3aa4bc47027a59c912ed62b7d3c656390f2c672f769a45ef064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5251334479753974546b795658517450346744696b3273434d597a41544a36654441707347686d5161594c752f00000000000000000000

Deployed Bytecode

0x6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610558578063eb8d72b7146105ae578063ed88c68e146101e6578063f2fde38b146105ce57600080fd5b8063b88d4fde146104f2578063c87b56dd14610512578063cf89fa0314610532578063d1deba1f1461054557600080fd5b8063943fb872116100d1578063943fb8721461047057806395d89b4114610490578063a22cb465146104a5578063b2bdfa7b146104c557600080fd5b80637533d788146103ba5780638da5cb5b146103da5780638ee749121461040557600080fd5b80632e1a7d4d116101645780636352211e1161013e5780636352211e146103445780636ecd23061461036457806370a0823114610377578063715018a6146103a557600080fd5b80632e1a7d4d146102e457806342842e0e1461030457806355f804b31461032457600080fd5b8063081812fc116101a0578063081812fc1461023f578063095ea7b3146102845780631c37a822146102a457806323b872dd146102c457600080fd5b80621d3567146101c657806301ffc9a7146101e857806306fdde031461021d575b600080fd5b3480156101d257600080fd5b506101e66101e1366004613161565b6105ee565b005b3480156101f457600080fd5b50610208610203366004612f8d565b610832565b60405190151581526020015b60405180910390f35b34801561022957600080fd5b50610232610917565b60405161021491906133d4565b34801561024b57600080fd5b5061025f61025a3660046131f6565b6109a9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610214565b34801561029057600080fd5b506101e661029f366004612f61565b610a83565b3480156102b057600080fd5b506101e66102bf366004613161565b610c10565b3480156102d057600080fd5b506101e66102df366004612e81565b610cab565b3480156102f057600080fd5b506101e66102ff3660046131f6565b610d4c565b34801561031057600080fd5b506101e661031f366004612e81565b610ec1565b34801561033057600080fd5b506101e661033f366004612fc7565b610edc565b34801561035057600080fd5b5061025f61035f3660046131f6565b610f70565b6101e6610372366004613233565b611022565b34801561038357600080fd5b50610397610392366004612dfd565b61117b565b604051908152602001610214565b3480156103b157600080fd5b506101e6611249565b3480156103c657600080fd5b506102326103d5366004613010565b6112d6565b3480156103e657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025f565b34801561041157600080fd5b5061045b61042036600461307e565b600860209081526000938452604080852084518086018401805192815290840195840195909520945292905282529020805460019091015482565b60408051928352602083019190915201610214565b34801561047c57600080fd5b506101e661048b3660046131f6565b611370565b34801561049c57600080fd5b506102326113f6565b3480156104b157600080fd5b506101e66104c0366004612f2e565b611405565b3480156104d157600080fd5b50600a5461025f9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104fe57600080fd5b506101e661050d366004612ec2565b611410565b34801561051e57600080fd5b5061023261052d3660046131f6565b6114b2565b6101e66105403660046131da565b6115c2565b6101e66105533660046130d5565b6119b3565b34801561056457600080fd5b50610208610573366004612e48565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156105ba57600080fd5b506101e66105c936600461302b565b611ba5565b3480156105da57600080fd5b506101e66105e9366004612dfd565b611c44565b60075473ffffffffffffffffffffffffffffffffffffffff16331461061257600080fd5b61ffff841660009081526009602052604090208054610630906136d4565b9050835114801561066f575061ffff841660009081526009602052604090819020905161065d91906132cc565b60405180910390208380519060200120145b610700576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560448201527f7263652073656e64696e6720636f6e747261637400000000000000000000000060648201526084015b60405180910390fd5b6040517f1c37a8220000000000000000000000000000000000000000000000000000000081523090631c37a822906107429087908790879087906004016134c6565b600060405180830381600087803b15801561075c57600080fd5b505af192505050801561076d575060015b61082c576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff168152602001908152602001600020846040516107b791906132b0565b90815260408051918290036020908101832067ffffffffffffffff8716600090815290825291909120835181559201516001909201919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906108239086908690869086906134c6565b60405180910390a15b50505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd0000000000000000000000000000000000000000000000000000000014806108c557507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b8061091157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b606060018054610926906136d4565b80601f0160208091040260200160405190810160405280929190818152602001828054610952906136d4565b801561099f5780601f106109745761010080835404028352916020019161099f565b820191906000526020600020905b81548152906001019060200180831161098257829003601f168201915b5050505050905090565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff16610a5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106f7565b5060009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610a8e82610f70565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b3373ffffffffffffffffffffffffffffffffffffffff82161480610b755750610b758133610573565b610c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106f7565b610c0b8383611d74565b505050565b333014610c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460448201527f206265204272696467652e00000000000000000000000000000000000000000060648201526084016106f7565b61082c84848484611e14565b610cb53382611f89565b610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106f7565b610c0b8383836120f9565b60005473ffffffffffffffffffffffffffffffffffffffff163314610dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b600a5460405160009173ffffffffffffffffffffffffffffffffffffffff169083908381818185875af1925050503d8060008114610e27576040519150601f19603f3d011682016040523d82523d6000602084013e610e2c565b606091505b5050905080610ebd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f43727970746f556e636c6531323a204661696c656420746f207769746864726160448201527f772045746865720000000000000000000000000000000000000000000000000060648201526084016106f7565b5050565b610c0b83838360405180602001604052806000815250611410565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b8051610ebd90600b906020840190612ba6565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201527f656e7420746f6b656e000000000000000000000000000000000000000000000060648201526084016106f7565b348160ff16600e546110349190613654565b111561109c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f7420656e6f75676820616d6f756e742073656e742e00000000000000000060448201526064016106f7565b600d548160ff16600c546110b09190613628565b111561113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f43727970746f556e636c6531323a204d696e742065786365656473207375707060448201527f6c7900000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b60005b8160ff16811015610ebd5761116933600c6000815461115f90613728565b9182905550612360565b8061117381613728565b915050611141565b600073ffffffffffffffffffffffffffffffffffffffff8216611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a6560448201527f726f20616464726573730000000000000000000000000000000000000000000060648201526084016106f7565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604090205490565b60005473ffffffffffffffffffffffffffffffffffffffff1633146112ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b6112d4600061237a565b565b600960205260009081526040902080546112ef906136d4565b80601f016020809104026020016040519081016040528092919081815260200182805461131b906136d4565b80156113685780601f1061133d57610100808354040283529160200191611368565b820191906000526020600020905b81548152906001019060200180831161134b57829003601f168201915b505050505081565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b600f55565b606060028054610926906136d4565b610ebd3383836123ef565b61141a3383611f89565b6114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60448201527f776e6572206e6f7220617070726f76656400000000000000000000000000000060648201526084016106f7565b61082c8484848461251d565b60008181526003602052604090205460609073ffffffffffffffffffffffffffffffffffffffff16611566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201527f6e6578697374656e7420746f6b656e000000000000000000000000000000000060648201526084016106f7565b60006115706125c0565b9050600081511161159057604051806020016040528060008152506115bb565b8061159a846125cf565b6040516020016115ab92919061335c565b6040516020818303038152906040525b9392505050565b6115cb81610f70565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611685576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260448201527f736500000000000000000000000000000000000000000000000000000000000060648201526084016106f7565b61ffff8216600090815260096020526040812080546116a3906136d4565b905011611732576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f5468697320636861696e2069732063757272656e746c7920756e617661696c6160448201527f626c6520666f722074726176656c00000000000000000000000000000000000060648201526084016106f7565b61173b81612701565b60408051336020820152808201839052815180820383018152606082018352600f547e0100000000000000000000000000000000000000000000000000000000000060808401526082808401919091528351808403909101815260a28301938490526007547f40a7bb1000000000000000000000000000000000000000000000000000000000909452909260019260009173ffffffffffffffffffffffffffffffffffffffff16906340a7bb10906117ff908990309089908790899060a6016133e7565b604080518083038186803b15801561181657600080fd5b505afa15801561182a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061184e919061320f565b50905080341015611907576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f43727970746f556e636c6531323a206d73672e76616c7565206e6f7420656e6f60448201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160648201527f7320666f72206d65737361676520666565730000000000000000000000000000608482015260a4016106f7565b60075461ffff871660009081526009602052604080822090517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9093169263c5803100923492611979928c928b913391908b90600401613510565b6000604051808303818588803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b5050505050505050505050565b61ffff851660009081526008602052604080822090516119d49087906132b0565b908152604080516020928190038301902067ffffffffffffffff87166000908152925290206001810154909150611a8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60448201527f657373616765000000000000000000000000000000000000000000000000000060648201526084016106f7565b805482148015611ab7575080600101548383604051611aad9291906132a0565b6040518091039020145b611b1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f616400000000000060448201526064016106f7565b600080825560018201556040517f1c37a8220000000000000000000000000000000000000000000000000000000081523090631c37a82290611b6b9089908990899089908990600401613446565b600060405180830381600087803b158015611b8557600080fd5b505af1158015611b99573d6000803e3d6000fd5b50505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611c26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b61ffff8316600090815260096020526040902061082c908383612c2a565b60005473ffffffffffffffffffffffffffffffffffffffff163314611cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff8116611d68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106f7565b611d718161237a565b50565b600081815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091558190611dce82610f70565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611e2b9190612e1a565b915091508561ffff1660001415611e9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5f737263436861696e496400000000000000000000000000000000000000000060448201526064016106f7565b8451611f06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f5f7372634164647265737300000000000000000000000000000000000000000060448201526064016106f7565b67ffffffffffffffff8416611f77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f5f6e6f6e6365000000000000000000000000000000000000000000000000000060448201526064016106f7565b611f818282612360565b505050505050565b60008181526003602052604081205473ffffffffffffffffffffffffffffffffffffffff1661203a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201527f697374656e7420746f6b656e000000000000000000000000000000000000000060648201526084016106f7565b600061204583610f70565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806120b457508373ffffffffffffffffffffffffffffffffffffffff1661209c846109a9565b73ffffffffffffffffffffffffffffffffffffffff16145b806120f1575073ffffffffffffffffffffffffffffffffffffffff80821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff1661211982610f70565b73ffffffffffffffffffffffffffffffffffffffff16146121bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201527f73206e6f74206f776e000000000000000000000000000000000000000000000060648201526084016106f7565b73ffffffffffffffffffffffffffffffffffffffff821661225e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f726573730000000000000000000000000000000000000000000000000000000060648201526084016106f7565b612269600082611d74565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260046020526040812080546001929061229f908490613691565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081208054600192906122da908490613628565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff86811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ebd8282604051806020016040528060008152506127ce565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526006602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6125288484846120f9565b61253484848484612871565b61082c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b6060600b8054610926906136d4565b60608161260f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612639578061262381613728565b91506126329050600a83613640565b9150612613565b60008167ffffffffffffffff81111561265457612654613802565b6040519080825280601f01601f19166020018201604052801561267e576020820181803683370190505b5090505b84156120f157612693600183613691565b91506126a0600a86613761565b6126ab906030613628565b60f81b8183815181106126c0576126c06137d3565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506126fa600a86613640565b9450612682565b600061270c82610f70565b9050612719600083611d74565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260046020526040812080546001929061274f908490613691565b909155505060008281526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555183919073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6127d88383612a70565b6127e56000848484612871565b610c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b600073ffffffffffffffffffffffffffffffffffffffff84163b15612a65576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906128e890339089908890889060040161338b565b602060405180830381600087803b15801561290257600080fd5b505af1925050508015612950575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261294d91810190612faa565b60015b612a1a573d80801561297e576040519150601f19603f3d011682016040523d82523d6000602084013e612983565b606091505b508051612a12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e746572000000000000000000000000000060648201526084016106f7565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a02000000000000000000000000000000000000000000000000000000001490506120f1565b506001949350505050565b73ffffffffffffffffffffffffffffffffffffffff8216612aed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106f7565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600460205260408120805460019290612b23908490613628565b909155505060008181526003602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054612bb2906136d4565b90600052602060002090601f016020900481019282612bd45760008555612c1a565b82601f10612bed57805160ff1916838001178555612c1a565b82800160010185558215612c1a579182015b82811115612c1a578251825591602001919060010190612bff565b50612c26929150612cbc565b5090565b828054612c36906136d4565b90600052602060002090601f016020900481019282612c585760008555612c1a565b82601f10612c8f578280017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00823516178555612c1a565b82800160010185558215612c1a579182015b82811115612c1a578235825591602001919060010190612ca1565b5b80821115612c265760008155600101612cbd565b600067ffffffffffffffff80841115612cec57612cec613802565b604051601f85017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715612d3257612d32613802565b81604052809350858152868686011115612d4b57600080fd5b858560208301376000602087830101525050509392505050565b60008083601f840112612d7757600080fd5b50813567ffffffffffffffff811115612d8f57600080fd5b602083019150836020828501011115612da757600080fd5b9250929050565b600082601f830112612dbf57600080fd5b6115bb83833560208501612cd1565b803561ffff81168114612de057600080fd5b919050565b803567ffffffffffffffff81168114612de057600080fd5b600060208284031215612e0f57600080fd5b81356115bb81613831565b60008060408385031215612e2d57600080fd5b8251612e3881613831565b6020939093015192949293505050565b60008060408385031215612e5b57600080fd5b8235612e6681613831565b91506020830135612e7681613831565b809150509250929050565b600080600060608486031215612e9657600080fd5b8335612ea181613831565b92506020840135612eb181613831565b929592945050506040919091013590565b60008060008060808587031215612ed857600080fd5b8435612ee381613831565b93506020850135612ef381613831565b925060408501359150606085013567ffffffffffffffff811115612f1657600080fd5b612f2287828801612dae565b91505092959194509250565b60008060408385031215612f4157600080fd5b8235612f4c81613831565b915060208301358015158114612e7657600080fd5b60008060408385031215612f7457600080fd5b8235612f7f81613831565b946020939093013593505050565b600060208284031215612f9f57600080fd5b81356115bb81613853565b600060208284031215612fbc57600080fd5b81516115bb81613853565b600060208284031215612fd957600080fd5b813567ffffffffffffffff811115612ff057600080fd5b8201601f8101841361300157600080fd5b6120f184823560208401612cd1565b60006020828403121561302257600080fd5b6115bb82612dce565b60008060006040848603121561304057600080fd5b61304984612dce565b9250602084013567ffffffffffffffff81111561306557600080fd5b61307186828701612d65565b9497909650939450505050565b60008060006060848603121561309357600080fd5b61309c84612dce565b9250602084013567ffffffffffffffff8111156130b857600080fd5b6130c486828701612dae565b925050604084013590509250925092565b6000806000806000608086880312156130ed57600080fd5b6130f686612dce565b9450602086013567ffffffffffffffff8082111561311357600080fd5b61311f89838a01612dae565b955061312d60408901612de5565b9450606088013591508082111561314357600080fd5b5061315088828901612d65565b969995985093965092949392505050565b6000806000806080858703121561317757600080fd5b61318085612dce565b9350602085013567ffffffffffffffff8082111561319d57600080fd5b6131a988838901612dae565b94506131b760408801612de5565b935060608701359150808211156131cd57600080fd5b50612f2287828801612dae565b600080604083850312156131ed57600080fd5b612f7f83612dce565b60006020828403121561320857600080fd5b5035919050565b6000806040838503121561322257600080fd5b505080516020909101519092909150565b60006020828403121561324557600080fd5b813560ff811681146115bb57600080fd5b6000815180845261326e8160208601602086016136a8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b8183823760009101908152919050565b600082516132c28184602087016136a8565b9190910192915050565b60008083546132da816136d4565b600182811680156132f2576001811461332157613350565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841687528287019450613350565b8760005260208060002060005b858110156133475781548a82015290840190820161332e565b50505082870194505b50929695505050505050565b6000835161336e8184602088016136a8565b8351908301906133828183602088016136a8565b01949350505050565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526133ca6080830184613256565b9695505050505050565b6020815260006115bb6020830184613256565b61ffff8616815273ffffffffffffffffffffffffffffffffffffffff8516602082015260a06040820152600061342060a0830186613256565b8415156060840152828103608084015261343a8185613256565b98975050505050505050565b61ffff861681526080602082015260006134636080830187613256565b67ffffffffffffffff8616604084015282810360608401528381528385602083013760006020858301015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8601168201019150509695505050505050565b61ffff851681526080602082015260006134e36080830186613256565b67ffffffffffffffff8516604084015282810360608401526135058185613256565b979650505050505050565b61ffff871681526000602060c0818401526000885461352e816136d4565b8060c087015260e06001808416600081146135505760018114613583576135b1565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516838a0152610100890195506135b1565b8d6000528660002060005b858110156135a95781548b820186015290830190880161358e565b8a0184019650505b505050505083810360408501526135c88189613256565b9150506135ed606084018773ffffffffffffffffffffffffffffffffffffffff169052565b73ffffffffffffffffffffffffffffffffffffffff8516608084015282810360a084015261361b8185613256565b9998505050505050505050565b6000821982111561363b5761363b613775565b500190565b60008261364f5761364f6137a4565b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561368c5761368c613775565b500290565b6000828210156136a3576136a3613775565b500390565b60005b838110156136c35781810151838201526020016136ab565b8381111561082c5750506000910152565b600181811c908216806136e857607f821691505b60208210811415613722577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561375a5761375a613775565b5060010190565b600082613770576137706137a4565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff81168114611d7157600080fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611d7157600080fdfea264697066735822122016b88538ed6a6ac3aa4bc47027a59c912ed62b7d3c656390f2c672f769a45ef064736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5251334479753974546b795658517450346744696b3273434d597a41544a36654441707347686d5161594c752f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmRQ3Dyu9tTkyVXQtP4gDik2sCMYzATJ6eDApsGhmQaYLu/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5251334479753974546b795658517450346744696b3273
Arg [4] : 434d597a41544a36654441707347686d5161594c752f00000000000000000000


Deployed Bytecode Sourcemap

56088:3942:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44474:949;;;;;;;;;;-1:-1:-1;44474:949:0;;;;;:::i;:::-;;:::i;:::-;;31547:305;;;;;;;;;;-1:-1:-1;31547:305:0;;;;;:::i;:::-;;:::i;:::-;;;13121:14:1;;13114:22;13096:41;;13084:2;13069:18;31547:305:0;;;;;;;;32492:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;34051:221::-;;;;;;;;;;-1:-1:-1;34051:221:0;;;;;:::i;:::-;;:::i;:::-;;;12083:42:1;12071:55;;;12053:74;;12041:2;12026:18;34051:221:0;11907:226:1;33574:411:0;;;;;;;;;;-1:-1:-1;33574:411:0;;;;;:::i;:::-;;:::i;45431:356::-;;;;;;;;;;-1:-1:-1;45431:356:0;;;;;:::i;:::-;;:::i;34801:339::-;;;;;;;;;;-1:-1:-1;34801:339:0;;;;;:::i;:::-;;:::i;58952:185::-;;;;;;;;;;-1:-1:-1;58952:185:0;;;;;:::i;:::-;;:::i;35211:::-;;;;;;;;;;-1:-1:-1;35211:185:0;;;;;:::i;:::-;;:::i;58726:90::-;;;;;;;;;;-1:-1:-1;58726:90:0;;;;;:::i;:::-;;:::i;32186:239::-;;;;;;;;;;-1:-1:-1;32186:239:0;;;;;:::i;:::-;;:::i;56639:350::-;;;;;;:::i;:::-;;:::i;31916:208::-;;;;;;;;;;-1:-1:-1;31916:208:0;;;;;:::i;:::-;;:::i;:::-;;;28416:25:1;;;28404:2;28389:18;31916:208:0;28270:177:1;12547:103:0;;;;;;;;;;;;;:::i;44316:51::-;;;;;;;;;;-1:-1:-1;44316:51:0;;;;;:::i;:::-;;:::i;11896:87::-;;;;;;;;;;-1:-1:-1;11942:7:0;11969:6;;;11896:87;;44219:90;;;;;;;;;;-1:-1:-1;44219:90:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28626:25:1;;;28682:2;28667:18;;28660:34;;;;28599:18;44219:90:0;28452:248:1;59221:125:0;;;;;;;;;;-1:-1:-1;59221:125:0;;;;;:::i;:::-;;:::i;32661:104::-;;;;;;;;;;;;;:::i;34344:155::-;;;;;;;;;;-1:-1:-1;34344:155:0;;;;;:::i;:::-;;:::i;56162:21::-;;;;;;;;;;-1:-1:-1;56162:21:0;;;;;;;;35467:328;;;;;;;;;;-1:-1:-1;35467:328:0;;;;;:::i;:::-;;:::i;32836:334::-;;;;;;;;;;-1:-1:-1;32836:334:0;;;;;:::i;:::-;;:::i;57128:1590::-;;;;;;:::i;:::-;;:::i;46263:758::-;;;;;;:::i;:::-;;:::i;34570:164::-;;;;;;;;;;-1:-1:-1;34570:164:0;;;;;:::i;:::-;34691:25;;;;34667:4;34691:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;34570:164;47029:158;;;;;;;;;;-1:-1:-1;47029:158:0;;;;;:::i;:::-;;:::i;12805:201::-;;;;;;;;;;-1:-1:-1;12805:201:0;;;;;:::i;:::-;;:::i;44474:949::-;44636:8;;;;44614:10;:31;44606:40;;;;;;44757:32;;;;;;;:19;:32;;;;;:39;;;;;:::i;:::-;;;44735:11;:18;:61;:134;;;;-1:-1:-1;44836:32:0;;;;;;;:19;:32;;;;;;;44826:43;;;;44836:32;44826:43;:::i;:::-;;;;;;;;44810:11;44800:22;;;;;;:69;44735:134;44727:213;;;;;;;20994:2:1;44727:213:0;;;20976:21:1;21033:2;21013:18;;;21006:30;21072:34;21052:18;;;21045:62;21143:22;21123:18;;;21116:50;21183:19;;44727:213:0;;;;;;;;;45068:60;;;;;:4;;:16;;:60;;45085:11;;45098;;45111:6;;45119:8;;45068:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45064:352;;45275:52;;;;;;;;45290:8;:15;45275:52;;;;45317:8;45307:19;;;;;;45275:52;;;45224:14;:27;45239:11;45224:27;;;;;;;;;;;;;;;45252:11;45224:40;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;:103;;;;;;;;;;;;;;;45347:57;;;;45361:11;;45374;;45265:6;;45395:8;;45347:57;:::i;:::-;;;;;;;;45064:352;44474:949;;;;:::o;31547:305::-;31649:4;31686:40;;;31701:25;31686:40;;:105;;-1:-1:-1;31743:48:0;;;31758:33;31743:48;31686:105;:158;;;-1:-1:-1;24452:25:0;24437:40;;;;31808:36;31666:178;31547:305;-1:-1:-1;;31547:305:0:o;32492:100::-;32546:13;32579:5;32572:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32492:100;:::o;34051:221::-;34127:7;37394:16;;;:7;:16;;;;;;:30;:16;34147:73;;;;;;;20220:2:1;34147:73:0;;;20202:21:1;20259:2;20239:18;;;20232:30;20298:34;20278:18;;;20271:62;20369:14;20349:18;;;20342:42;20401:19;;34147:73:0;20018:408:1;34147:73:0;-1:-1:-1;34240:24:0;;;;:15;:24;;;;;;;;;34051:221::o;33574:411::-;33655:13;33671:23;33686:7;33671:14;:23::i;:::-;33655:39;;33719:5;33713:11;;:2;:11;;;;33705:57;;;;;;;22989:2:1;33705:57:0;;;22971:21:1;23028:2;23008:18;;;23001:30;23067:34;23047:18;;;23040:62;23138:3;23118:18;;;23111:31;23159:19;;33705:57:0;22787:397:1;33705:57:0;10700:10;33797:21;;;;;:62;;-1:-1:-1;33822:37:0;33839:5;10700:10;34570:164;:::i;33822:37::-;33775:168;;;;;;;18201:2:1;33775:168:0;;;18183:21:1;18240:2;18220:18;;;18213:30;18279:34;18259:18;;;18252:62;18350:26;18330:18;;;18323:54;18394:19;;33775:168:0;17999:420:1;33775:168:0;33956:21;33965:2;33969:7;33956:8;:21::i;:::-;33644:341;33574:411;;:::o;45431:356::-;45600:10;45622:4;45600:27;45592:83;;;;;;;19447:2:1;45592:83:0;;;19429:21:1;19486:2;19466:18;;;19459:30;19525:34;19505:18;;;19498:62;19596:13;19576:18;;;19569:41;19627:19;;45592:83:0;19245:407:1;45592:83:0;45724:55;45736:11;45749;45762:6;45770:8;45724:10;:55::i;34801:339::-;34996:41;10700:10;35029:7;34996:18;:41::i;:::-;34988:103;;;;;;;23391:2:1;34988:103:0;;;23373:21:1;23430:2;23410:18;;;23403:30;23469:34;23449:18;;;23442:62;23540:19;23520:18;;;23513:47;23577:19;;34988:103:0;23189:413:1;34988:103:0;35104:28;35114:4;35120:2;35124:7;35104:9;:28::i;58952:185::-;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;59034:6:::1;::::0;59026:36:::1;::::0;59011:9:::1;::::0;59034:6:::1;;::::0;59054:3;;59011:9;59026:36;59011:9;59026:36;59054:3;59034:6;59026:36:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59010:52;;;59081:4;59073:56;;;::::0;::::1;::::0;;21825:2:1;59073:56:0::1;::::0;::::1;21807:21:1::0;21864:2;21844:18;;;21837:30;21903:34;21883:18;;;21876:62;21974:9;21954:18;;;21947:37;22001:19;;59073:56:0::1;21623:403:1::0;59073:56:0::1;58999:138;58952:185:::0;:::o;35211:::-;35349:39;35366:4;35372:2;35376:7;35349:39;;;;;;;;;;;;:16;:39::i;58726:90::-;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;58795:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;32186:239::-:0;32258:7;32294:16;;;:7;:16;;;;;;;;32329:19;32321:73;;;;;;;19037:2:1;32321:73:0;;;19019:21:1;19076:2;19056:18;;;19049:30;19115:34;19095:18;;;19088:62;19186:11;19166:18;;;19159:39;19215:19;;32321:73:0;18835:405:1;56639:350:0;56729:9;56715;56707:17;;:5;;:17;;;;:::i;:::-;56706:32;;56698:68;;;;;;;23809:2:1;56698:68:0;;;23791:21:1;23848:2;23828:18;;;23821:30;23887:25;23867:18;;;23860:53;23930:18;;56698:68:0;23607:347:1;56698:68:0;56812:17;;56799:9;56785:23;;:11;;:23;;;;:::i;:::-;:44;;56777:91;;;;;;;17798:2:1;56777:91:0;;;17780:21:1;17837:2;17817:18;;;17810:30;17876:34;17856:18;;;17849:62;17947:4;17927:18;;;17920:32;17969:19;;56777:91:0;17596:398:1;56777:91:0;56884:9;56879:103;56903:9;56899:13;;:1;:13;56879:103;;;56934:36;56944:10;56958:11;;56956:13;;;;;:::i;:::-;;;;;-1:-1:-1;56934:9:0;:36::i;:::-;56914:3;;;;:::i;:::-;;;;56879:103;;31916:208;31988:7;32016:19;;;32008:74;;;;;;;18626:2:1;32008:74:0;;;18608:21:1;18665:2;18645:18;;;18638:30;18704:34;18684:18;;;18677:62;18775:12;18755:18;;;18748:40;18805:19;;32008:74:0;18424:406:1;32008:74:0;-1:-1:-1;32100:16:0;;;;;;:9;:16;;;;;;;31916:208::o;12547:103::-;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;12612:30:::1;12639:1;12612:18;:30::i;:::-;12547:103::o:0;44316:51::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59221:125::-;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;59303:26:::1;:35:::0;59221:125::o;32661:104::-;32717:13;32750:7;32743:14;;;;;:::i;34344:155::-;34439:52;10700:10;34472:8;34482;34439:18;:52::i;35467:328::-;35642:41;10700:10;35675:7;35642:18;:41::i;:::-;35634:103;;;;;;;23391:2:1;35634:103:0;;;23373:21:1;23430:2;23410:18;;;23403:30;23469:34;23449:18;;;23442:62;23540:19;23520:18;;;23513:47;23577:19;;35634:103:0;23189:413:1;35634:103:0;35748:39;35762:4;35768:2;35772:7;35781:5;35748:13;:39::i;32836:334::-;37370:4;37394:16;;;:7;:16;;;;;;32909:13;;37394:30;:16;32935:76;;;;;;;22233:2:1;32935:76:0;;;22215:21:1;22272:2;22252:18;;;22245:30;22311:34;22291:18;;;22284:62;22382:17;22362:18;;;22355:45;22417:19;;32935:76:0;22031:411:1;32935:76:0;33024:21;33048:10;:8;:10::i;:::-;33024:34;;33100:1;33082:7;33076:21;:25;:86;;;;;;;;;;;;;;;;;33128:7;33137:18;:7;:16;:18::i;:::-;33111:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33076:86;33069:93;32836:334;-1:-1:-1;;;32836:334:0:o;57128:1590::-;57231:16;57239:7;57231;:16::i;:::-;57217:30;;:10;:30;;;57209:77;;;;;;;16642:2:1;57209:77:0;;;16624:21:1;16681:2;16661:18;;;16654:30;16720:34;16700:18;;;16693:62;16791:4;16771:18;;;16764:32;16813:19;;57209:77:0;16440:398:1;57209:77:0;57305:29;;;57344:1;57305:29;;;:19;:29;;;;;:36;;;;;:::i;:::-;;;:40;57297:99;;;;;;;15872:2:1;57297:99:0;;;15854:21:1;15911:2;15891:18;;;15884:30;15950:34;15930:18;;;15923:62;16021:16;16001:18;;;15994:44;16055:19;;57297:99:0;15670:410:1;57297:99:0;57476:14;57482:7;57476:5;:14::i;:::-;57587:31;;;57598:10;57587:31;;;12828:74:1;12918:18;;;12911:34;;;57587:31:0;;;;;;;;;12801:18:1;;;57587:31:0;;57788:26;;11746:16:1;57762:53:0;;;11730:102:1;11848:11;;;;11841:27;;;;57762:53:0;;;;;;;;;;11884:12:1;;;57762:53:0;;;;57991:8;;:77;;;;57587:31;;57721:1;;-1:-1:-1;;57991:8:0;;;:21;;:77;;58013:8;;58031:4;;57587:31;;-1:-1:-1;;57762:53:0;;57991:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57969:99;;;58102:10;58089:9;:23;;58081:118;;;;;;;13796:2:1;58081:118:0;;;13778:21:1;13835:2;13815:18;;;13808:30;13874:34;13854:18;;;13847:62;13945:34;13925:18;;;13918:62;14017:20;13996:19;;;13989:49;14055:19;;58081:118:0;13594:486:1;58081:118:0;58212:8;;58330:29;;;58212:8;58330:29;;;:19;:29;;;;;;58212:498;;;;;:8;;;;;:13;;58233:9;;58212:498;;58258:8;;58418:7;;58501:10;;58212:8;58648:13;;58212:498;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57198:1520;;;;57128:1590;;:::o;46263:758::-;46479:27;;;46444:32;46479:27;;;:14;:27;;;;;;:40;;;;46507:11;;46479:40;:::i;:::-;;;;;;;;;;;;;;;;:48;;;;;;;;;;;46546:21;;;;46479:48;;-1:-1:-1;46538:86:0;;;;;;;24495:2:1;46538:86:0;;;24477:21:1;24534:2;24514:18;;;24507:30;24573:34;24553:18;;;24546:62;24644:8;24624:18;;;24617:36;24670:19;;46538:86:0;24293:402:1;46538:86:0;46662:23;;46643:42;;:90;;;;;46712:9;:21;;;46699:8;;46689:19;;;;;;;:::i;:::-;;;;;;;;:44;46643:90;46635:129;;;;;;;16287:2:1;46635:129:0;;;16269:21:1;16326:2;16306:18;;;16299:30;16365:28;16345:18;;;16338:56;16411:18;;46635:129:0;16085:350:1;46635:129:0;46838:1;46812:27;;;46850:21;;;:34;46953:60;;;;;:4;;:16;;:60;;46970:11;;46983;;46996:6;;47004:8;;;;46953:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46388:633;46263:758;;;;;:::o;47029:158::-;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;47133:29:::1;::::0;::::1;;::::0;;;:19:::1;:29;::::0;;;;:46:::1;::::0;47165:14;;47133:46:::1;:::i;12805:201::-:0;11942:7;11969:6;12116:23;11969:6;10700:10;12116:23;12108:68;;;;;;;20633:2:1;12108:68:0;;;20615:21:1;;;20652:18;;;20645:30;20711:34;20691:18;;;20684:62;20763:18;;12108:68:0;20431:356:1;12108:68:0;12894:22:::1;::::0;::::1;12886:73;;;::::0;::::1;::::0;;14706:2:1;12886:73:0::1;::::0;::::1;14688:21:1::0;14745:2;14725:18;;;14718:30;14784:34;14764:18;;;14757:62;14855:8;14835:18;;;14828:36;14881:19;;12886:73:0::1;14504:402:1::0;12886:73:0::1;12970:28;12989:8;12970:18;:28::i;:::-;12805:201:::0;:::o;41218:174::-;41293:24;;;;:15;:24;;;;;:29;;;;;;;;;;;;;:24;;41347:23;41293:24;41347:14;:23::i;:::-;41338:46;;;;;;;;;;;;41218:174;;:::o;59438:479::-;59591:14;59607:12;59634:8;59623:37;;;;;;;;;;;;:::i;:::-;59590:70;;;;59679:11;:14;;59692:1;59679:14;;59671:37;;;;;;;17045:2:1;59671:37:0;;;17027:21:1;17084:2;17064:18;;;17057:30;17123:13;17103:18;;;17096:41;17154:18;;59671:37:0;16843:335:1;59671:37:0;59727:18;;59719:44;;;;;;;22649:2:1;59719:44:0;;;22631:21:1;22688:2;22668:18;;;22661:30;22727:13;22707:18;;;22700:41;22758:18;;59719:44:0;22447:335:1;59719:44:0;59782:9;;;59774:27;;;;;;;24161:2:1;59774:27:0;;;24143:21:1;24200:1;24180:18;;;24173:29;24238:8;24218:18;;;24211:36;24264:18;;59774:27:0;23959:329:1;59774:27:0;59883:26;59893:6;59901:7;59883:9;:26::i;:::-;59560:357;;59438:479;;;;:::o;37599:348::-;37692:4;37394:16;;;:7;:16;;;;;;:30;:16;37709:73;;;;;;;17385:2:1;37709:73:0;;;17367:21:1;17424:2;17404:18;;;17397:30;17463:34;17443:18;;;17436:62;17534:14;17514:18;;;17507:42;17566:19;;37709:73:0;17183:408:1;37709:73:0;37793:13;37809:23;37824:7;37809:14;:23::i;:::-;37793:39;;37862:5;37851:16;;:7;:16;;;:51;;;;37895:7;37871:31;;:20;37883:7;37871:11;:20::i;:::-;:31;;;37851:51;:87;;;-1:-1:-1;34691:25:0;;;;34667:4;34691:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;37906:32;37843:96;37599:348;-1:-1:-1;;;;37599:348:0:o;40522:578::-;40681:4;40654:31;;:23;40669:7;40654:14;:23::i;:::-;:31;;;40646:85;;;;;;;21415:2:1;40646:85:0;;;21397:21:1;21454:2;21434:18;;;21427:30;21493:34;21473:18;;;21466:62;21564:11;21544:18;;;21537:39;21593:19;;40646:85:0;21213:405:1;40646:85:0;40750:16;;;40742:65;;;;;;;15113:2:1;40742:65:0;;;15095:21:1;15152:2;15132:18;;;15125:30;15191:34;15171:18;;;15164:62;15262:6;15242:18;;;15235:34;15286:19;;40742:65:0;14911:400:1;40742:65:0;40924:29;40941:1;40945:7;40924:8;:29::i;:::-;40966:15;;;;;;;:9;:15;;;;;:20;;40985:1;;40966:15;:20;;40985:1;;40966:20;:::i;:::-;;;;-1:-1:-1;;40997:13:0;;;;;;;:9;:13;;;;;:18;;41014:1;;40997:13;:18;;41014:1;;40997:18;:::i;:::-;;;;-1:-1:-1;;41026:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;;41065:27;;41026:16;;41065:27;;;;;;;40522:578;;;:::o;38289:110::-;38365:26;38375:2;38379:7;38365:26;;;;;;;;;;;;:9;:26::i;13166:191::-;13240:16;13259:6;;;13276:17;;;;;;;;;;13309:40;;13259:6;;;;;;;13309:40;;13240:16;13309:40;13229:128;13166:191;:::o;41534:315::-;41689:8;41680:17;;:5;:17;;;;41672:55;;;;;;;15518:2:1;41672:55:0;;;15500:21:1;15557:2;15537:18;;;15530:30;15596:27;15576:18;;;15569:55;15641:18;;41672:55:0;15316:349:1;41672:55:0;41738:25;;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;;;;;;;;;;;;41800:41;;13096::1;;;41800::0;;13069:18:1;41800:41:0;;;;;;;41534:315;;;:::o;36677:::-;36834:28;36844:4;36850:2;36854:7;36834:9;:28::i;:::-;36881:48;36904:4;36910:2;36914:7;36923:5;36881:22;:48::i;:::-;36873:111;;;;;;;14287:2:1;36873:111:0;;;14269:21:1;14326:2;14306:18;;;14299:30;14365:34;14345:18;;;14338:62;14436:20;14416:18;;;14409:48;14474:19;;36873:111:0;14085:414:1;59925:100:0;59977:13;60010:7;60003:14;;;;;:::i;8182:723::-;8238:13;8459:10;8455:53;;-1:-1:-1;;8486:10:0;;;;;;;;;;;;;;;;;;8182:723::o;8455:53::-;8533:5;8518:12;8574:78;8581:9;;8574:78;;8607:8;;;;:::i;:::-;;-1:-1:-1;8630:10:0;;-1:-1:-1;8638:2:0;8630:10;;:::i;:::-;;;8574:78;;;8662:19;8694:6;8684:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8684:17:0;;8662:39;;8712:154;8719:10;;8712:154;;8746:11;8756:1;8746:11;;:::i;:::-;;-1:-1:-1;8815:10:0;8823:2;8815:5;:10;:::i;:::-;8802:24;;:2;:24;:::i;:::-;8789:39;;8772:6;8779;8772:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;8843:11:0;8852:2;8843:11;;:::i;:::-;;;8712:154;;39825:360;39885:13;39901:23;39916:7;39901:14;:23::i;:::-;39885:39;;40026:29;40043:1;40047:7;40026:8;:29::i;:::-;40068:16;;;;;;;:9;:16;;;;;:21;;40088:1;;40068:16;:21;;40088:1;;40068:21;:::i;:::-;;;;-1:-1:-1;;40107:16:0;;;;:7;:16;;;;;;40100:23;;;;;;40141:36;40115:7;;40107:16;40100:23;40141:36;;;;;40107:16;;40141:36;39874:311;39825:360;:::o;38626:321::-;38756:18;38762:2;38766:7;38756:5;:18::i;:::-;38807:54;38838:1;38842:2;38846:7;38855:5;38807:22;:54::i;:::-;38785:154;;;;;;;14287:2:1;38785:154:0;;;14269:21:1;14326:2;14306:18;;;14299:30;14365:34;14345:18;;;14338:62;14436:20;14416:18;;;14409:48;14474:19;;38785:154:0;14085:414:1;42414:799:0;42569:4;42590:13;;;14507:20;14555:8;42586:620;;42626:72;;;;;:36;;;;;;:72;;10700:10;;42677:4;;42683:7;;42692:5;;42626:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42626:72:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42622:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42868:13:0;;42864:272;;42911:60;;;;;14287:2:1;42911:60:0;;;14269:21:1;14326:2;14306:18;;;14299:30;14365:34;14345:18;;;14338:62;14436:20;14416:18;;;14409:48;14474:19;;42911:60:0;14085:414:1;42864:272:0;43086:6;43080:13;43071:6;43067:2;43063:15;43056:38;42622:529;42749:51;;42759:41;42749:51;;-1:-1:-1;42742:58:0;;42586:620;-1:-1:-1;43190:4:0;42414:799;;;;;;:::o;39283:313::-;39363:16;;;39355:61;;;;;;;19859:2:1;39355:61:0;;;19841:21:1;;;19878:18;;;19871:30;19937:34;19917:18;;;19910:62;19989:18;;39355:61:0;19657:356:1;39355:61:0;39487:13;;;;;;;:9;:13;;;;;:18;;39504:1;;39487:13;:18;;39504:1;;39487:18;:::i;:::-;;;;-1:-1:-1;;39516:16:0;;;;:7;:16;;;;;;:21;;;;;;;;;;;;;39555:33;;39516:16;;;39555:33;;39516:16;;39555:33;39283:313;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:690:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;289:2;283:9;355:2;343:15;;194:66;339:24;;;365:2;335:33;331:42;319:55;;;389:18;;;409:22;;;386:46;383:72;;;435:18;;:::i;:::-;475:10;471:2;464:22;504:6;495:15;;534:6;526;519:22;574:3;565:6;560:3;556:16;553:25;550:45;;;591:1;588;581:12;550:45;641:6;636:3;629:4;621:6;617:17;604:44;696:1;689:4;680:6;672;668:19;664:30;657:41;;;;14:690;;;;;:::o;709:347::-;760:8;770:6;824:3;817:4;809:6;805:17;801:27;791:55;;842:1;839;832:12;791:55;-1:-1:-1;865:20:1;;908:18;897:30;;894:50;;;940:1;937;930:12;894:50;977:4;969:6;965:17;953:29;;1029:3;1022:4;1013:6;1005;1001:19;997:30;994:39;991:59;;;1046:1;1043;1036:12;991:59;709:347;;;;;:::o;1061:220::-;1103:5;1156:3;1149:4;1141:6;1137:17;1133:27;1123:55;;1174:1;1171;1164:12;1123:55;1196:79;1271:3;1262:6;1249:20;1242:4;1234:6;1230:17;1196:79;:::i;1286:159::-;1353:20;;1413:6;1402:18;;1392:29;;1382:57;;1435:1;1432;1425:12;1382:57;1286:159;;;:::o;1450:171::-;1517:20;;1577:18;1566:30;;1556:41;;1546:69;;1611:1;1608;1601:12;1626:247;1685:6;1738:2;1726:9;1717:7;1713:23;1709:32;1706:52;;;1754:1;1751;1744:12;1706:52;1793:9;1780:23;1812:31;1837:5;1812:31;:::i;1878:320::-;1965:6;1973;2026:2;2014:9;2005:7;2001:23;1997:32;1994:52;;;2042:1;2039;2032:12;1994:52;2074:9;2068:16;2093:31;2118:5;2093:31;:::i;:::-;2188:2;2173:18;;;;2167:25;2143:5;;2167:25;;-1:-1:-1;;;1878:320:1:o;2203:388::-;2271:6;2279;2332:2;2320:9;2311:7;2307:23;2303:32;2300:52;;;2348:1;2345;2338:12;2300:52;2387:9;2374:23;2406:31;2431:5;2406:31;:::i;:::-;2456:5;-1:-1:-1;2513:2:1;2498:18;;2485:32;2526:33;2485:32;2526:33;:::i;:::-;2578:7;2568:17;;;2203:388;;;;;:::o;2596:456::-;2673:6;2681;2689;2742:2;2730:9;2721:7;2717:23;2713:32;2710:52;;;2758:1;2755;2748:12;2710:52;2797:9;2784:23;2816:31;2841:5;2816:31;:::i;:::-;2866:5;-1:-1:-1;2923:2:1;2908:18;;2895:32;2936:33;2895:32;2936:33;:::i;:::-;2596:456;;2988:7;;-1:-1:-1;;;3042:2:1;3027:18;;;;3014:32;;2596:456::o;3057:665::-;3152:6;3160;3168;3176;3229:3;3217:9;3208:7;3204:23;3200:33;3197:53;;;3246:1;3243;3236:12;3197:53;3285:9;3272:23;3304:31;3329:5;3304:31;:::i;:::-;3354:5;-1:-1:-1;3411:2:1;3396:18;;3383:32;3424:33;3383:32;3424:33;:::i;:::-;3476:7;-1:-1:-1;3530:2:1;3515:18;;3502:32;;-1:-1:-1;3585:2:1;3570:18;;3557:32;3612:18;3601:30;;3598:50;;;3644:1;3641;3634:12;3598:50;3667:49;3708:7;3699:6;3688:9;3684:22;3667:49;:::i;:::-;3657:59;;;3057:665;;;;;;;:::o;3727:416::-;3792:6;3800;3853:2;3841:9;3832:7;3828:23;3824:32;3821:52;;;3869:1;3866;3859:12;3821:52;3908:9;3895:23;3927:31;3952:5;3927:31;:::i;:::-;3977:5;-1:-1:-1;4034:2:1;4019:18;;4006:32;4076:15;;4069:23;4057:36;;4047:64;;4107:1;4104;4097:12;4148:315;4216:6;4224;4277:2;4265:9;4256:7;4252:23;4248:32;4245:52;;;4293:1;4290;4283:12;4245:52;4332:9;4319:23;4351:31;4376:5;4351:31;:::i;:::-;4401:5;4453:2;4438:18;;;;4425:32;;-1:-1:-1;;;4148:315:1:o;4468:245::-;4526:6;4579:2;4567:9;4558:7;4554:23;4550:32;4547:52;;;4595:1;4592;4585:12;4547:52;4634:9;4621:23;4653:30;4677:5;4653:30;:::i;4718:249::-;4787:6;4840:2;4828:9;4819:7;4815:23;4811:32;4808:52;;;4856:1;4853;4846:12;4808:52;4888:9;4882:16;4907:30;4931:5;4907:30;:::i;4972:450::-;5041:6;5094:2;5082:9;5073:7;5069:23;5065:32;5062:52;;;5110:1;5107;5100:12;5062:52;5150:9;5137:23;5183:18;5175:6;5172:30;5169:50;;;5215:1;5212;5205:12;5169:50;5238:22;;5291:4;5283:13;;5279:27;-1:-1:-1;5269:55:1;;5320:1;5317;5310:12;5269:55;5343:73;5408:7;5403:2;5390:16;5385:2;5381;5377:11;5343:73;:::i;5427:184::-;5485:6;5538:2;5526:9;5517:7;5513:23;5509:32;5506:52;;;5554:1;5551;5544:12;5506:52;5577:28;5595:9;5577:28;:::i;5616:481::-;5694:6;5702;5710;5763:2;5751:9;5742:7;5738:23;5734:32;5731:52;;;5779:1;5776;5769:12;5731:52;5802:28;5820:9;5802:28;:::i;:::-;5792:38;;5881:2;5870:9;5866:18;5853:32;5908:18;5900:6;5897:30;5894:50;;;5940:1;5937;5930:12;5894:50;5979:58;6029:7;6020:6;6009:9;6005:22;5979:58;:::i;:::-;5616:481;;6056:8;;-1:-1:-1;5953:84:1;;-1:-1:-1;;;;5616:481:1:o;6102:460::-;6187:6;6195;6203;6256:2;6244:9;6235:7;6231:23;6227:32;6224:52;;;6272:1;6269;6262:12;6224:52;6295:28;6313:9;6295:28;:::i;:::-;6285:38;;6374:2;6363:9;6359:18;6346:32;6401:18;6393:6;6390:30;6387:50;;;6433:1;6430;6423:12;6387:50;6456:49;6497:7;6488:6;6477:9;6473:22;6456:49;:::i;:::-;6446:59;;;6552:2;6541:9;6537:18;6524:32;6514:42;;6102:460;;;;;:::o;6567:773::-;6671:6;6679;6687;6695;6703;6756:3;6744:9;6735:7;6731:23;6727:33;6724:53;;;6773:1;6770;6763:12;6724:53;6796:28;6814:9;6796:28;:::i;:::-;6786:38;;6875:2;6864:9;6860:18;6847:32;6898:18;6939:2;6931:6;6928:14;6925:34;;;6955:1;6952;6945:12;6925:34;6978:49;7019:7;7010:6;6999:9;6995:22;6978:49;:::i;:::-;6968:59;;7046:37;7079:2;7068:9;7064:18;7046:37;:::i;:::-;7036:47;;7136:2;7125:9;7121:18;7108:32;7092:48;;7165:2;7155:8;7152:16;7149:36;;;7181:1;7178;7171:12;7149:36;;7220:60;7272:7;7261:8;7250:9;7246:24;7220:60;:::i;:::-;6567:773;;;;-1:-1:-1;6567:773:1;;-1:-1:-1;7299:8:1;;7194:86;6567:773;-1:-1:-1;;;6567:773:1:o;7345:684::-;7447:6;7455;7463;7471;7524:3;7512:9;7503:7;7499:23;7495:33;7492:53;;;7541:1;7538;7531:12;7492:53;7564:28;7582:9;7564:28;:::i;:::-;7554:38;;7643:2;7632:9;7628:18;7615:32;7666:18;7707:2;7699:6;7696:14;7693:34;;;7723:1;7720;7713:12;7693:34;7746:49;7787:7;7778:6;7767:9;7763:22;7746:49;:::i;:::-;7736:59;;7814:37;7847:2;7836:9;7832:18;7814:37;:::i;:::-;7804:47;;7904:2;7893:9;7889:18;7876:32;7860:48;;7933:2;7923:8;7920:16;7917:36;;;7949:1;7946;7939:12;7917:36;;7972:51;8015:7;8004:8;7993:9;7989:24;7972:51;:::i;8034:252::-;8101:6;8109;8162:2;8150:9;8141:7;8137:23;8133:32;8130:52;;;8178:1;8175;8168:12;8130:52;8201:28;8219:9;8201:28;:::i;8291:180::-;8350:6;8403:2;8391:9;8382:7;8378:23;8374:32;8371:52;;;8419:1;8416;8409:12;8371:52;-1:-1:-1;8442:23:1;;8291:180;-1:-1:-1;8291:180:1:o;8476:245::-;8555:6;8563;8616:2;8604:9;8595:7;8591:23;8587:32;8584:52;;;8632:1;8629;8622:12;8584:52;-1:-1:-1;;8655:16:1;;8711:2;8696:18;;;8690:25;8655:16;;8690:25;;-1:-1:-1;8476:245:1:o;8726:269::-;8783:6;8836:2;8824:9;8815:7;8811:23;8807:32;8804:52;;;8852:1;8849;8842:12;8804:52;8891:9;8878:23;8941:4;8934:5;8930:16;8923:5;8920:27;8910:55;;8961:1;8958;8951:12;9140:316;9181:3;9219:5;9213:12;9246:6;9241:3;9234:19;9262:63;9318:6;9311:4;9306:3;9302:14;9295:4;9288:5;9284:16;9262:63;:::i;:::-;9370:2;9358:15;9375:66;9354:88;9345:98;;;;9445:4;9341:109;;9140:316;-1:-1:-1;;9140:316:1:o;9461:271::-;9644:6;9636;9631:3;9618:33;9600:3;9670:16;;9695:13;;;9670:16;9461:271;-1:-1:-1;9461:271:1:o;9737:274::-;9866:3;9904:6;9898:13;9920:53;9966:6;9961:3;9954:4;9946:6;9942:17;9920:53;:::i;:::-;9989:16;;;;;9737:274;-1:-1:-1;;9737:274:1:o;10016:869::-;10142:3;10171:1;10204:6;10198:13;10234:36;10260:9;10234:36;:::i;:::-;10289:1;10306:18;;;10333:162;;;;10509:1;10504:356;;;;10299:561;;10333:162;10381:66;10370:9;10366:82;10361:3;10354:95;10478:6;10473:3;10469:16;10462:23;;10333:162;;10504:356;10535:6;10532:1;10525:17;10565:4;10610:2;10607:1;10597:16;10635:1;10649:165;10663:6;10660:1;10657:13;10649:165;;;10741:14;;10728:11;;;10721:35;10784:16;;;;10678:10;;10649:165;;;10653:3;;;10843:6;10838:3;10834:16;10827:23;;10299:561;-1:-1:-1;10876:3:1;;10016:869;-1:-1:-1;;;;;;10016:869:1:o;10890:470::-;11069:3;11107:6;11101:13;11123:53;11169:6;11164:3;11157:4;11149:6;11145:17;11123:53;:::i;:::-;11239:13;;11198:16;;;;11261:57;11239:13;11198:16;11295:4;11283:17;;11261:57;:::i;:::-;11334:20;;10890:470;-1:-1:-1;;;;10890:470:1:o;12138:511::-;12332:4;12361:42;12442:2;12434:6;12430:15;12419:9;12412:34;12494:2;12486:6;12482:15;12477:2;12466:9;12462:18;12455:43;;12534:6;12529:2;12518:9;12514:18;12507:34;12577:3;12572:2;12561:9;12557:18;12550:31;12598:45;12638:3;12627:9;12623:19;12615:6;12598:45;:::i;:::-;12590:53;12138:511;-1:-1:-1;;;;;;12138:511:1:o;13148:217::-;13295:2;13284:9;13277:21;13258:4;13315:44;13355:2;13344:9;13340:18;13332:6;13315:44;:::i;24700:663::-;24981:6;24973;24969:19;24958:9;24951:38;25037:42;25029:6;25025:55;25020:2;25009:9;25005:18;24998:83;25117:3;25112:2;25101:9;25097:18;25090:31;24932:4;25144:45;25184:3;25173:9;25169:19;25161:6;25144:45;:::i;:::-;25239:6;25232:14;25225:22;25220:2;25209:9;25205:18;25198:50;25297:9;25289:6;25285:22;25279:3;25268:9;25264:19;25257:51;25325:32;25350:6;25342;25325:32;:::i;:::-;25317:40;24700:663;-1:-1:-1;;;;;;;;24700:663:1:o;25368:776::-;25635:6;25627;25623:19;25612:9;25605:38;25679:3;25674:2;25663:9;25659:18;25652:31;25586:4;25706:45;25746:3;25735:9;25731:19;25723:6;25706:45;:::i;:::-;25799:18;25791:6;25787:31;25782:2;25771:9;25767:18;25760:59;25867:9;25859:6;25855:22;25850:2;25839:9;25835:18;25828:50;25902:6;25894;25887:22;25956:6;25948;25943:2;25935:6;25931:15;25918:45;26009:1;26004:2;25995:6;25987;25983:19;25979:28;25972:39;26135:2;26065:66;26060:2;26052:6;26048:15;26044:88;26036:6;26032:101;26028:110;26020:118;;;25368:776;;;;;;;;:::o;26149:555::-;26406:6;26398;26394:19;26383:9;26376:38;26450:3;26445:2;26434:9;26430:18;26423:31;26357:4;26477:45;26517:3;26506:9;26502:19;26494:6;26477:45;:::i;:::-;26570:18;26562:6;26558:31;26553:2;26542:9;26538:18;26531:59;26638:9;26630:6;26626:22;26621:2;26610:9;26606:18;26599:50;26666:32;26691:6;26683;26666:32;:::i;:::-;26658:40;26149:555;-1:-1:-1;;;;;;;26149:555:1:o;26709:1556::-;27055:6;27047;27043:19;27032:9;27025:38;27006:4;27082:2;27120:3;27115:2;27104:9;27100:18;27093:31;27144:1;27177:6;27171:13;27207:36;27233:9;27207:36;:::i;:::-;27280:6;27274:3;27263:9;27259:19;27252:35;27306:3;27328:1;27360:2;27349:9;27345:18;27377:1;27372:180;;;;27566:1;27561:354;;;;27338:577;;27372:180;27435:66;27424:9;27420:82;27415:2;27404:9;27400:18;27393:110;27538:3;27527:9;27523:19;27516:26;;27372:180;;27561:354;27592:6;27589:1;27582:17;27640:2;27637:1;27627:16;27665:1;27679:180;27693:6;27690:1;27687:13;27679:180;;;27786:14;;27762:17;;;27758:26;;27751:50;27829:16;;;;27708:10;;27679:180;;;27883:17;;27879:26;;;-1:-1:-1;;27338:577:1;;;;;;27960:9;27955:3;27951:19;27946:2;27935:9;27931:18;27924:47;27994:29;28019:3;28011:6;27994:29;:::i;:::-;27980:43;;;28032:54;28082:2;28071:9;28067:18;28059:6;9085:42;9074:54;9062:67;;9000:135;28032:54;9085:42;9074:54;;28145:3;28130:19;;9062:67;28199:9;28191:6;28187:22;28181:3;28170:9;28166:19;28159:51;28227:32;28252:6;28244;28227:32;:::i;:::-;28219:40;26709:1556;-1:-1:-1;;;;;;;;;26709:1556:1:o;28705:128::-;28745:3;28776:1;28772:6;28769:1;28766:13;28763:39;;;28782:18;;:::i;:::-;-1:-1:-1;28818:9:1;;28705:128::o;28838:120::-;28878:1;28904;28894:35;;28909:18;;:::i;:::-;-1:-1:-1;28943:9:1;;28838:120::o;28963:228::-;29003:7;29129:1;29061:66;29057:74;29054:1;29051:81;29046:1;29039:9;29032:17;29028:105;29025:131;;;29136:18;;:::i;:::-;-1:-1:-1;29176:9:1;;28963:228::o;29196:125::-;29236:4;29264:1;29261;29258:8;29255:34;;;29269:18;;:::i;:::-;-1:-1:-1;29306:9:1;;29196:125::o;29326:258::-;29398:1;29408:113;29422:6;29419:1;29416:13;29408:113;;;29498:11;;;29492:18;29479:11;;;29472:39;29444:2;29437:10;29408:113;;;29539:6;29536:1;29533:13;29530:48;;;-1:-1:-1;;29574:1:1;29556:16;;29549:27;29326:258::o;29589:437::-;29668:1;29664:12;;;;29711;;;29732:61;;29786:4;29778:6;29774:17;29764:27;;29732:61;29839:2;29831:6;29828:14;29808:18;29805:38;29802:218;;;29876:77;29873:1;29866:88;29977:4;29974:1;29967:15;30005:4;30002:1;29995:15;29802:218;;29589:437;;;:::o;30031:195::-;30070:3;30101:66;30094:5;30091:77;30088:103;;;30171:18;;:::i;:::-;-1:-1:-1;30218:1:1;30207:13;;30031:195::o;30231:112::-;30263:1;30289;30279:35;;30294:18;;:::i;:::-;-1:-1:-1;30328:9:1;;30231:112::o;30348:184::-;30400:77;30397:1;30390:88;30497:4;30494:1;30487:15;30521:4;30518:1;30511:15;30537:184;30589:77;30586:1;30579:88;30686:4;30683:1;30676:15;30710:4;30707:1;30700:15;30726:184;30778:77;30775:1;30768:88;30875:4;30872:1;30865:15;30899:4;30896:1;30889:15;30915:184;30967:77;30964:1;30957:88;31064:4;31061:1;31054:15;31088:4;31085:1;31078:15;31104:154;31190:42;31183:5;31179:54;31172:5;31169:65;31159:93;;31248:1;31245;31238:12;31263:177;31348:66;31341:5;31337:78;31330:5;31327:89;31317:117;;31430:1;31427;31420:12

Swarm Source

ipfs://16b88538ed6a6ac3aa4bc47027a59c912ed62b7d3c656390f2c672f769a45ef0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.