ETH Price: $3,336.72 (-3.70%)
Gas: 2 Gwei

Token

Dreamin Divers Cheers (DIVER)
 

Overview

Max Total Supply

1,387 DIVER

Holders

350

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
onono.eth
Balance
3 DIVER
0x07246c91dbf58dd091821070dd8d06cc4e0289bc
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:
DDPERC721A

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**

██████╗ ██████╗ ███████╗ █████╗ ███╗   ███╗██╗███╗   ██╗
██╔══██╗██╔══██╗██╔════╝██╔══██╗████╗ ████║██║████╗  ██║
██║  ██║██████╔╝█████╗  ███████║██╔████╔██║██║██╔██╗ ██║
██║  ██║██╔══██╗██╔══╝  ██╔══██║██║╚██╔╝██║██║██║╚██╗██║
██████╔╝██║  ██║███████╗██║  ██║██║ ╚═╝ ██║██║██║ ╚████║
╚═════╝ ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝╚═╝╚═╝  ╚═══╝

██████╗ ██╗██╗   ██╗███████╗██████╗ ███████╗
██╔══██╗██║██║   ██║██╔════╝██╔══██╗██╔════╝
██║  ██║██║██║   ██║█████╗  ██████╔╝███████╗
██║  ██║██║╚██╗ ██╔╝██╔══╝  ██╔══██╗╚════██║
██████╔╝██║ ╚████╔╝ ███████╗██║  ██║███████║
╚═════╝ ╚═╝  ╚═══╝  ╚══════╝╚═╝  ╚═╝╚══════╝

██████╗ ██████╗  ██████╗      ██╗███████╗ ██████╗████████╗
██╔══██╗██╔══██╗██╔═══██╗     ██║██╔════╝██╔════╝╚══██╔══╝
██████╔╝██████╔╝██║   ██║     ██║█████╗  ██║        ██║
██╔═══╝ ██╔══██╗██║   ██║██   ██║██╔══╝  ██║        ██║
██║     ██║  ██║╚██████╔╝╚█████╔╝███████╗╚██████╗   ██║
╚═╝     ╚═╝  ╚═╝ ╚═════╝  ╚════╝ ╚══════╝ ╚═════╝   ╚═╝

**/

//SPDX-License-Identifier: MIT


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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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
                /// @solidity memory-safe-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 (last updated v4.6.0) (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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: contracts/MerkleProof.sol

pragma solidity ^0.8.7;


abstract contract MerkleProof {
    bytes32 internal _vipMerkleRoot;
    bytes32 internal _wlMerkleRoot;

    // Free Mint
    function _setVipMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _vipMerkleRoot = merkleRoot_;
    }

    function isValidVipCount(address address_, uint256 vipCount, bytes32[] memory proof_) public view returns (bool) {
        bytes32 _leaf = keccak256(abi.encodePacked(address_, vipCount));
        for (uint256 i = 0; i < proof_.length; i++) {
            _leaf = _leaf < proof_[i] ? keccak256(abi.encodePacked(_leaf, proof_[i])) : keccak256(abi.encodePacked(proof_[i], _leaf));
        }
        return _leaf == _vipMerkleRoot;
    }

    // WL
    function _setWlMerkleRoot(bytes32 merkleRoot_) internal virtual {
        _wlMerkleRoot = merkleRoot_;
    }

    function isWhitelisted(address address_, bytes32[] memory proof_) public view returns (bool) {
        bytes32 _leaf = keccak256(abi.encodePacked(address_));
        for (uint256 i = 0; i < proof_.length; i++) {
            _leaf = _leaf < proof_[i] ? keccak256(abi.encodePacked(_leaf, proof_[i])) : keccak256(abi.encodePacked(proof_[i], _leaf));
        }
        return _leaf == _wlMerkleRoot;
    }
}
// File: @openzeppelin/contracts/utils/Base64.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Base64.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides a set of functions to operate with Base64 strings.
 *
 * _Available since v4.5._
 */
library Base64 {
    /**
     * @dev Base64 Encoding/Decoding Table
     */
    string internal constant _TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    /**
     * @dev Converts a `bytes` to its Bytes64 `string` representation.
     */
    function encode(bytes memory data) internal pure returns (string memory) {
        /**
         * Inspired by Brecht Devos (Brechtpd) implementation - MIT licence
         * https://github.com/Brechtpd/base64/blob/e78d9fd951e7b0977ddca77d92dc85183770daf4/base64.sol
         */
        if (data.length == 0) return "";

        // Loads the table into memory
        string memory table = _TABLE;

        // Encoding takes 3 bytes chunks of binary data from `bytes` data parameter
        // and split into 4 numbers of 6 bits.
        // The final Base64 length should be `bytes` data length multiplied by 4/3 rounded up
        // - `data.length + 2`  -> Round up
        // - `/ 3`              -> Number of 3-bytes chunks
        // - `4 *`              -> 4 characters for each chunk
        string memory result = new string(4 * ((data.length + 2) / 3));

        /// @solidity memory-safe-assembly
        assembly {
            // Prepare the lookup table (skip the first "length" byte)
            let tablePtr := add(table, 1)

            // Prepare result pointer, jump over length
            let resultPtr := add(result, 32)

            // Run over the input, 3 bytes at a time
            for {
                let dataPtr := data
                let endPtr := add(data, mload(data))
            } lt(dataPtr, endPtr) {

            } {
                // Advance 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // To write each character, shift the 3 bytes (18 bits) chunk
                // 4 times in blocks of 6 bits for each character (18, 12, 6, 0)
                // and apply logical AND with 0x3F which is the number of
                // the previous character in the ASCII table prior to the Base64 Table
                // The result is then added to the table to get the character to write,
                // and finally write it in the result pointer but with a left shift
                // of 256 (1 byte) - 8 (1 ASCII char) = 248 bits

                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance

                mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
                resultPtr := add(resultPtr, 1) // Advance
            }

            // When data `bytes` is not exactly 3 bytes long
            // it is padded with `=` characters at the end
            switch mod(mload(data), 3)
            case 1 {
                mstore8(sub(resultPtr, 1), 0x3d)
                mstore8(sub(resultPtr, 2), 0x3d)
            }
            case 2 {
                mstore8(sub(resultPtr, 1), 0x3d)
            }
        }

        return result;
    }
}

// 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/token/ERC721/IERC721.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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`.
     *
     * 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;

    /**
     * @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 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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @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);
}

// 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: contracts/erc721a/IERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;



/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}

// 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/interfaces/IERC2981.sol


// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

// File: @openzeppelin/contracts/token/common/ERC2981.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/common/ERC2981.sol)

pragma solidity ^0.8.0;



/**
 * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
 * fee is specified in basis points by default.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

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

    /**
     * @inheritdoc IERC2981
     */
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// 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: contracts/erc721a/ERC721A.sol


// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;







/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @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 override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        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 override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 {
        _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 {
        _transfer(from, to, tokenId);
        if (to.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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: contracts/DDPERC721A.sol

pragma solidity ^0.8.7;








contract DDPERC721A is Ownable, ERC721A, ReentrancyGuard, MerkleProof, ERC2981{

  //Project Settings
  uint256 public vipMintPrice;
  uint256 public wlMintPrice;
  uint256 public psMintPrice;
  uint256 public maxMintsPerVip;
  uint256 public maxMintsPerWL;
  uint256 public maxMintsPerPS;
  uint256 public maxSupply;
  address payable internal _withdrawWallet;

  //URI
  string[5] internal _revealUris;
  string public _baseExtension = ".json";
  string internal _baseTokenURI;
  //flags
  bool public isFreeMintEnabled;
  bool public isVipSaleEnabled;
  bool public isWlSaleEnabled;
  bool public isPablicSaleEnabled;
  bool internal _isRevealed;
  //mint records.
  mapping(address => uint256) internal _freeMinted;
  mapping(address => uint256) internal _vipMinted;
  mapping(address => uint256) internal _wlMinted;
  mapping(address => uint256) internal _psMinted;

  constructor (
      string memory _name,
      string memory _symbol
  ) ERC721A (_name,_symbol) {
  }
  //start from 1.djust for bueno.
  function _startTokenId() internal view virtual override returns (uint256) {
        return 1;
  }
  //set Default Royalty._feeNumerator 500 = 5% Royalty
  function setDefaultRoyalty(address _receiver, uint96 _feeNumerator) external virtual onlyOwner {
      _setDefaultRoyalty(_receiver, _feeNumerator);
  }
  //for ERC2981
  function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721A, ERC2981) returns (bool) {
    return super.supportsInterface(interfaceId);
  }
  //for ERC2981 Opensea
  function contractURI() external view virtual returns (string memory) {
        return _formatContractURI();
  }
  //make contractURI
  function _formatContractURI() internal view returns (string memory) {
    (address receiver, uint256 royaltyFraction) = royaltyInfo(0,_feeDenominator());//tokenid=0
    return string(
      abi.encodePacked(
        "data:application/json;base64,",
        Base64.encode(
          bytes(
            abi.encodePacked(
                '{"seller_fee_basis_points":', Strings.toString(royaltyFraction),
                ', "fee_recipient":"', Strings.toHexString(uint256(uint160(receiver)), 20), '"}'
            )
          )
        )
      )
    );
  }
  //set owner's wallet.withdraw to this wallet.only owner.
  function setWithdrawWallet(address _owner) external virtual onlyOwner {
    _withdrawWallet = payable(_owner);
  }

  //set maxSupply.only owner.
  function setMaxSupply(uint256 _maxSupply) external virtual onlyOwner {
    require(totalSupply() <= _maxSupply, "Lower than _currentIndex.");
    maxSupply = _maxSupply;
  }

  // SET PRICES.
  function setVipPrice(uint256 newPrice) external virtual onlyOwner {
    vipMintPrice = newPrice;
  }
  function setWlPrice(uint256 newPrice) external virtual onlyOwner {
    wlMintPrice = newPrice;
  }
  function setPsPrice(uint256 newPrice) external virtual onlyOwner {
    psMintPrice = newPrice;
  }

  //set reveal.only owner.
  function setReveal(bool bool_) external virtual onlyOwner {
    _isRevealed = bool_;
  }
  //retuen _isRevealed.
  function isRevealed() external view virtual returns (bool){
    return _isRevealed;
  }

  // GET MINTED COUNT.
  function freeMinted(address _address) external view virtual returns (uint256){
    return _freeMinted[_address];
  }
  function vipMinted(address _address) external view virtual returns (uint256){
    return _vipMinted[_address];
  }
  function wlMinted(address _address) external view virtual returns (uint256){
    return _wlMinted[_address];
  }
  function psMinted(address _address) external view virtual returns (uint256){
    return _psMinted[_address];
  }

  // SET MAX MINTS.
  function setVipMaxMints(uint256 _max) external virtual onlyOwner {
    maxMintsPerVip = _max;
  }
  function setWlMaxMints(uint256 _max) external virtual onlyOwner {
    maxMintsPerWL = _max;
  }
  function setPsMaxMints(uint256 _max) external virtual onlyOwner {
    maxMintsPerPS = _max;
  }

  // SET SALES ENABLE.
  function setFreeMintEnable(bool bool_) external virtual onlyOwner {
    isFreeMintEnabled = bool_;
  }
  function setVipSaleEnable(bool bool_) external virtual onlyOwner {
    isVipSaleEnabled = bool_;
  }
  function setWhitelistSaleEnable(bool bool_) external virtual onlyOwner {
    isWlSaleEnabled = bool_;
  }
  function setPublicSaleEnable(bool bool_) external virtual onlyOwner {
    isPablicSaleEnabled = bool_;
  }

  // SET MERKLE ROOT.
  function setVipMerkleRoot(bytes32 merkleRoot_) external virtual onlyOwner {
    _setVipMerkleRoot(merkleRoot_);
  }
  function setWlMerkleRoot(bytes32 merkleRoot_) external virtual onlyOwner {
    _setWlMerkleRoot(merkleRoot_);
  }

  //set HiddenBaseURI.only owner.
  function setHiddenURI(uint256 index, string memory uri_) external virtual onlyOwner {
    require(index < 6, "Invalid Index");
    _revealUris[index] = uri_;
  }

  //return _currentIndex
  function getCurrentIndex() external view virtual returns (uint256){
    return _currentIndex;
  }

  //set BaseURI at after reveal. only owner.
  function setBaseURI(string memory uri_) external virtual onlyOwner {
    _baseTokenURI = uri_;
  }

  function setBaseExtension(string memory _newBaseExtension) external onlyOwner
  {
    _baseExtension = _newBaseExtension;
  }

  //retuen BaseURI.internal.
  function _currentBaseURI() internal view returns (string memory){
    return _baseTokenURI;
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), "URI query for nonexistent token");
    if(_isRevealed == false) {
      return _revealUris[_tokenId % 5];
    }
    return string(abi.encodePacked(_currentBaseURI(), Strings.toString(_tokenId), _baseExtension));
  }

  //owner mint.transfer to _address.only owner.
  function ownerMint(uint256 _amount, address _address) external virtual onlyOwner { 
    require((_amount + totalSupply()) <= (maxSupply), "No more NFTs");
    _safeMint(_address, _amount);
  }

  //Free mint.
  function freeMint(uint256 _amount, uint256 vipCount, bytes32[] memory proof_) external virtual nonReentrant {
    require(isFreeMintEnabled, "Free Mint is Paused");
    require(isValidVipCount(msg.sender, vipCount, proof_), "Invalid Vip Count!");
    require(vipCount > 0, "You have no VIP!");
    require(vipCount >= _amount, "FreeMint: Over max mints per wallet");
    require(vipCount >= _freeMinted[msg.sender] + _amount, "You have no FreeMint left");
    require((_amount + totalSupply()) <= (maxSupply), "No more NFTs");

    _freeMinted[msg.sender] += _amount;
    _safeMint(msg.sender, _amount);
  }

  //Vip mint.
  function vipMint(uint256 _amount, uint256 vipCount, bytes32[] memory proof_) external payable virtual nonReentrant {
    require(isVipSaleEnabled, "Vip Sale is Paused");
    require(isValidVipCount(msg.sender, vipCount, proof_), "Invalid Vip Count!");
    require(vipCount > 0, "You have no VIP!");
    require(maxMintsPerVip >= _amount, "VipMint: Over max mints per wallet");
    require(maxMintsPerVip >= _vipMinted[msg.sender] + _amount, "You have no VipMint left");
    require(msg.value == vipMintPrice * _amount, "ETH value is not correct");
    require((_amount + totalSupply()) <= (maxSupply), "No more NFTs");

    _vipMinted[msg.sender] += _amount;
    _safeMint(msg.sender, _amount);
  }

  //WL mint.
  function whitelistMint(uint256 _amount, bytes32[] memory proof_) external payable virtual nonReentrant {
    require(isWlSaleEnabled, "whitelistMint is Paused");
    require(isWhitelisted(msg.sender, proof_), "You are not whitelisted!");
    require(maxMintsPerWL >= _amount, "whitelistMint: Over max mints per wallet");
    require(maxMintsPerWL >= _wlMinted[msg.sender] + _amount, "You have no whitelistMint left");
    require(msg.value == wlMintPrice * _amount, "ETH value is not correct");
    require((_amount + totalSupply()) <= (maxSupply), "No more NFTs");

    _wlMinted[msg.sender] += _amount;
    _safeMint(msg.sender, _amount);
  }
  
  //Public mint.
  function publicMint(uint256 _amount) external payable virtual nonReentrant {
    require(isPablicSaleEnabled, "publicMint is Paused");
    require(maxMintsPerPS >= _amount, "publicMint: Over max mints per wallet");
    require(maxMintsPerPS >= _psMinted[msg.sender] + _amount, "You have no publicMint left");
    require(msg.value == psMintPrice * _amount, "ETH value is not correct");
    require((_amount + totalSupply()) <= (maxSupply), "No more NFTs");
      
    _psMinted[msg.sender] += _amount;
    _safeMint(msg.sender, _amount);
  }

  //burn
  function burn(uint256 tokenId) external virtual {
    _burn(tokenId, true);
  }

  //widraw ETH from this contract.only owner. 
  function withdraw() external payable virtual onlyOwner nonReentrant{
    // This will payout the owner 100% of the contract balance.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    bool os;
    if(_withdrawWallet != address(0)){//if _withdrawWallet has.
      (os, ) = payable(_withdrawWallet).call{value: address(this).balance}("");
    }else{
      (os, ) = payable(owner()).call{value: address(this).balance}("");
    }
    require(os);
    // =============================================================================
  }

  //return wallet owned tokenids.
  function walletOfOwner(address _address) external view virtual returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(_address);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    //search from all tonkenid. so spend high gas values.attention.
    uint256 tokenindex = 0;
    for (uint256 i = _startTokenId(); i < _currentIndex; i++) {
      if(_address == this.tryOwnerOf(i)) tokenIds[tokenindex++] = i;
    }
    return tokenIds;
  }

  //try catch vaersion ownerOf. I have a error at burned tokenid.so need to try catch.  only external.
  function tryOwnerOf(uint256 tokenId) external view  virtual returns (address) {
    try this.ownerOf(tokenId) returns (address _address) {
      return(_address);
    } catch {
        return (address(0));//return 0x0 if error.
    }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"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":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":"_baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"vipCount","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"freeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"freeMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFreeMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPablicSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"uint256","name":"vipCount","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"isValidVipCount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isVipSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWlSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerVip","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintsPerWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"psMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"psMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint96","name":"_feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setFreeMintEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"setHiddenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setPsMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPsPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setPublicSaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setVipMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setVipMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setVipPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setVipSaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setWhitelistSaleEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"setWithdrawWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setWlMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"name":"setWlMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setWlPrice","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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tryOwnerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"vipCount","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"vipMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"vipMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"vipMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"wlMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"wlMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a09081526200002891601b9190620000f5565b503480156200003657600080fd5b5060405162003f6b38038062003f6b833981016040819052620000599162000252565b81816200006633620000a5565b81516200007b906003906020850190620000f5565b50805162000091906004906020840190620000f5565b506001808155600955506200030f92505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8280546200010390620002bc565b90600052602060002090601f01602090048101928262000127576000855562000172565b82601f106200014257805160ff191683800117855562000172565b8280016001018555821562000172579182015b828111156200017257825182559160200191906001019062000155565b506200018092915062000184565b5090565b5b8082111562000180576000815560010162000185565b600082601f830112620001ad57600080fd5b81516001600160401b0380821115620001ca57620001ca620002f9565b604051601f8301601f19908116603f01168101908282118183101715620001f557620001f5620002f9565b816040528381526020925086838588010111156200021257600080fd5b600091505b8382101562000236578582018301518183018401529082019062000217565b83821115620002485760008385830101525b9695505050505050565b600080604083850312156200026657600080fd5b82516001600160401b03808211156200027e57600080fd5b6200028c868387016200019b565b93506020850151915080821115620002a357600080fd5b50620002b2858286016200019b565b9150509250929050565b600181811c90821680620002d157607f821691505b60208210811415620002f357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b613c4c806200031f6000396000f3fe6080604052600436106103e45760003560e01c806378a9238011610208578063b88d4fde11610118578063d2cab056116100ab578063da3ef23f1161007a578063da3ef23f14610bad578063e8a3d48514610bcd578063e985e9c514610be2578063f2fde38b14610c2b578063f9e7dafa14610c4b57600080fd5b8063d2cab05614610b44578063d52c57e014610b57578063d5abeb0114610b77578063d78be71c14610b8d57600080fd5b8063c87b56dd116100e7578063c87b56dd14610ac3578063cb2b66b314610ae3578063ce702ad614610b04578063d13f9c0414610b2457600080fd5b8063b88d4fde14610a4d578063bc976afd14610a6d578063c3faf72414610a8d578063c833e25814610aad57600080fd5b8063942958f41161019b5780639aa289ce1161016a5780639aa289ce146109ad578063a195aabd146109cd578063a22cb465146109ed578063a355fd2914610a0d578063a4c619ff14610a2d57600080fd5b8063942958f41461093257806395d89b411461096857806397554dd31461097d5780639970cc291461099757600080fd5b80638b6d7cf3116101d75780638b6d7cf3146108b55780638da5cb5b146108d45780638dd07d0f146108f25780639373f4321461091257600080fd5b806378a9238014610820578063813779ef14610855578063830b3a64146108755780638ac1e1611461089557600080fd5b806336261ef61161030357806355f804b311610296578063707368f811610265578063707368f81461079857806370a08231146107b8578063715018a6146107d8578063719eaef8146107ed57806371a4b01d1461080d57600080fd5b806355f804b3146107185780635a23dd99146107385780636352211e146107585780636f8b44b01461077857600080fd5b806342842e0e116102d257806342842e0e1461068b57806342966c68146106ab578063438b6300146106cb57806354214f69146106f857600080fd5b806336261ef614610601578063389fcf06146106375780633ccfd60b1461066d57806342454db91461067557600080fd5b80631a09cfe21161037b5780632a55205a1161034a5780632a55205a146105795780632c4e9fc6146105b85780632db11544146105ce57806332b243c7146105e157600080fd5b80631a09cfe21461050e57806323b872dd146105245780632672c902146105445780632a3f300c1461055957600080fd5b8063095ea7b3116103b7578063095ea7b31461049a5780630d9005ae146104ba57806318160ddd146104d9578063189f3de1146104ee57600080fd5b806301ffc9a7146103e957806304634d8d1461041e57806306fdde0314610440578063081812fc14610462575b600080fd5b3480156103f557600080fd5b506104096104043660046135b7565b610c61565b60405190151581526020015b60405180910390f35b34801561042a57600080fd5b5061043e610439366004613549565b610c72565b005b34801561044c57600080fd5b50610455610c88565b604051610415919061394d565b34801561046e57600080fd5b5061048261047d36600461359e565b610d1a565b6040516001600160a01b039091168152602001610415565b3480156104a657600080fd5b5061043e6104b53660046134c5565b610d5e565b3480156104c657600080fd5b506001545b604051908152602001610415565b3480156104e557600080fd5b506104cb610de5565b3480156104fa57600080fd5b50601d546104099062010000900460ff1681565b34801561051a57600080fd5b506104cb60135481565b34801561053057600080fd5b5061043e61053f366004613381565b610df3565b34801561055057600080fd5b50610455610dfe565b34801561056557600080fd5b5061043e610574366004613583565b610e8c565b34801561058557600080fd5b506105996105943660046136b6565b610eb4565b604080516001600160a01b039093168352602083019190915201610415565b3480156105c457600080fd5b506104cb600f5481565b61043e6105dc36600461359e565b610f60565b3480156105ed57600080fd5b506104096105fc3660046134f1565b611143565b34801561060d57600080fd5b506104cb61061c36600461330e565b6001600160a01b03166000908152601f602052604090205490565b34801561064357600080fd5b506104cb61065236600461330e565b6001600160a01b03166000908152601e602052604090205490565b61043e61126f565b34801561068157600080fd5b506104cb60105481565b34801561069757600080fd5b5061043e6106a6366004613381565b61137b565b3480156106b757600080fd5b5061043e6106c636600461359e565b611396565b3480156106d757600080fd5b506106eb6106e636600461330e565b6113a4565b6040516104159190613909565b34801561070457600080fd5b50601d54640100000000900460ff16610409565b34801561072457600080fd5b5061043e6107333660046135f1565b6114d7565b34801561074457600080fd5b50610409610753366004613441565b6114f2565b34801561076457600080fd5b5061048261077336600461359e565b611616565b34801561078457600080fd5b5061043e61079336600461359e565b611628565b3480156107a457600080fd5b5061043e6107b3366004613583565b61168c565b3480156107c457600080fd5b506104cb6107d336600461330e565b6116a7565b3480156107e457600080fd5b5061043e6116f5565b3480156107f957600080fd5b5061043e61080836600461359e565b611709565b61043e61081b3660046136d8565b611716565b34801561082c57600080fd5b506104cb61083b36600461330e565b6001600160a01b0316600090815260208052604090205490565b34801561086157600080fd5b5061043e61087036600461359e565b61197a565b34801561088157600080fd5b5061048261089036600461359e565b611987565b3480156108a157600080fd5b5061043e6108b036600461359e565b611a02565b3480156108c157600080fd5b50601d5461040990610100900460ff1681565b3480156108e057600080fd5b506000546001600160a01b0316610482565b3480156108fe57600080fd5b5061043e61090d36600461359e565b611a13565b34801561091e57600080fd5b5061043e61092d36600461330e565b611a20565b34801561093e57600080fd5b506104cb61094d36600461330e565b6001600160a01b031660009081526021602052604090205490565b34801561097457600080fd5b50610455611a4a565b34801561098957600080fd5b50601d546104099060ff1681565b3480156109a357600080fd5b506104cb60125481565b3480156109b957600080fd5b5061043e6109c83660046136d8565b611a59565b3480156109d957600080fd5b5061043e6109e836600461359e565b611c70565b3480156109f957600080fd5b5061043e610a08366004613490565b611c7d565b348015610a1957600080fd5b5061043e610a28366004613583565b611d13565b348015610a3957600080fd5b5061043e610a4836600461359e565b611d39565b348015610a5957600080fd5b5061043e610a683660046133c2565b611d46565b348015610a7957600080fd5b5061043e610a8836600461359e565b611d90565b348015610a9957600080fd5b5061043e610aa8366004613583565b611da1565b348015610ab957600080fd5b506104cb600e5481565b348015610acf57600080fd5b50610455610ade36600461359e565b611dc5565b348015610aef57600080fd5b50601d54610409906301000000900460ff1681565b348015610b1057600080fd5b5061043e610b1f36600461367a565b611f17565b348015610b3057600080fd5b5061043e610b3f366004613583565b611f87565b61043e610b5236600461364a565b611fa9565b348015610b6357600080fd5b5061043e610b72366004613625565b6121e3565b348015610b8357600080fd5b506104cb60145481565b348015610b9957600080fd5b5061043e610ba836600461359e565b612228565b348015610bb957600080fd5b5061043e610bc83660046135f1565b612235565b348015610bd957600080fd5b50610455612250565b348015610bee57600080fd5b50610409610bfd366004613348565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610c3757600080fd5b5061043e610c4636600461330e565b61225f565b348015610c5757600080fd5b506104cb60115481565b6000610c6c826122d5565b92915050565b610c7a6122fa565b610c848282612354565b5050565b606060038054610c9790613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc390613ac9565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b5050505050905090565b6000610d2582612451565b610d42576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610d6982611616565b9050806001600160a01b0316836001600160a01b03161415610d9e5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610dd557610db88133610bfd565b610dd5576040516367d9dca160e11b815260040160405180910390fd5b610de083838361248a565b505050565b600254600154036000190190565b610de08383836124e6565b601b8054610e0b90613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3790613ac9565b8015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b505050505081565b610e946122fa565b601d80549115156401000000000264ff0000000019909216919091179055565b6000828152600d602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610f29575060408051808201909152600c546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610f48906001600160601b031687613a50565b610f529190613a3c565b915196919550909350505050565b60026009541415610f8c5760405162461bcd60e51b8152600401610f83906139bd565b60405180910390fd5b6002600955601d546301000000900460ff16610fe15760405162461bcd60e51b81526020600482015260146024820152731c1d589b1a58d35a5b9d081a5cc814185d5cd95960621b6044820152606401610f83565b8060135410156110415760405162461bcd60e51b815260206004820152602560248201527f7075626c69634d696e743a204f766572206d6178206d696e7473207065722077604482015264185b1b195d60da1b6064820152608401610f83565b3360009081526021602052604090205461105c908290613a24565b60135410156110ad5760405162461bcd60e51b815260206004820152601b60248201527f596f752068617665206e6f207075626c69634d696e74206c65667400000000006044820152606401610f83565b806010546110bb9190613a50565b34146110d95760405162461bcd60e51b8152600401610f8390613960565b6014546110e4610de5565b6110ee9083613a24565b111561110c5760405162461bcd60e51b8152600401610f8390613997565b336000908152602160205260408120805483929061112b908490613a24565b9091555061113b905033826126c1565b506001600955565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052600090819060540160405160208183030381529060405280519060200120905060005b8351811015611262578381815181106111a4576111a4613b5f565b60200260200101518210611202578381815181106111c4576111c4613b5f565b6020026020010151826040516020016111e7929190918252602082015260400190565b6040516020818303038152906040528051906020012061124e565b8184828151811061121557611215613b5f565b6020026020010151604051602001611237929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061125a81613b04565b915050611189565b50600a5414949350505050565b6112776122fa565b6002600954141561129a5760405162461bcd60e51b8152600401610f83906139bd565b60026009556015546000906001600160a01b031615611310576015546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611300576040519150601f19603f3d011682016040523d82523d6000602084013e611305565b606091505b505080915050611371565b6000546001600160a01b03166001600160a01b03164760405160006040518083038185875af1925050503d8060008114611366576040519150601f19603f3d011682016040523d82523d6000602084013e61136b565b606091505b50909150505b8061113b57600080fd5b610de083838360405180602001604052806000815250611d46565b6113a18160016126db565b50565b606060006113b1836116a7565b90506000816001600160401b038111156113cd576113cd613b75565b6040519080825280602002602001820160405280156113f6578160200160208202803683370190505b509050600060015b6001548110156114cd576040516320c2ce9960e21b815260048101829052309063830b3a649060240160206040518083038186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611477919061332b565b6001600160a01b0316866001600160a01b031614156114bb5780838361149c81613b04565b9450815181106114ae576114ae613b5f565b6020026020010181815250505b806114c581613b04565b9150506113fe565b5090949350505050565b6114df6122fa565b8051610c8490601c906020840190613169565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b835181101561160a5783818151811061154c5761154c613b5f565b602002602001015182106115aa5783818151811061156c5761156c613b5f565b60200260200101518260405160200161158f929190918252602082015260400190565b604051602081830303815290604052805190602001206115f6565b818482815181106115bd576115bd613b5f565b60200260200101516040516020016115df929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061160281613b04565b915050611531565b50600b54149392505050565b60006116218261288f565b5192915050565b6116306122fa565b80611639610de5565b11156116875760405162461bcd60e51b815260206004820152601960248201527f4c6f776572207468616e205f63757272656e74496e6465782e000000000000006044820152606401610f83565b601455565b6116946122fa565b601d805460ff1916911515919091179055565b60006001600160a01b0382166116d0576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600660205260409020546001600160401b031690565b6116fd6122fa565b61170760006129b1565b565b6117116122fa565b601255565b600260095414156117395760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d54610100900460ff1661178a5760405162461bcd60e51b8152602060048201526012602482015271159a5c0814d85b19481a5cc814185d5cd95960721b6044820152606401610f83565b611795338383611143565b6117d65760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642056697020436f756e742160701b6044820152606401610f83565b600082116118195760405162461bcd60e51b815260206004820152601060248201526f596f752068617665206e6f205649502160801b6044820152606401610f83565b8260115410156118765760405162461bcd60e51b815260206004820152602260248201527f5669704d696e743a204f766572206d6178206d696e7473207065722077616c6c604482015261195d60f21b6064820152608401610f83565b336000908152601f6020526040902054611891908490613a24565b60115410156118e25760405162461bcd60e51b815260206004820152601860248201527f596f752068617665206e6f205669704d696e74206c65667400000000000000006044820152606401610f83565b82600e546118f09190613a50565b341461190e5760405162461bcd60e51b8152600401610f8390613960565b601454611919610de5565b6119239085613a24565b11156119415760405162461bcd60e51b8152600401610f8390613997565b336000908152601f602052604081208054859290611960908490613a24565b90915550611970905033846126c1565b5050600160095550565b6119826122fa565b601355565b6040516331a9108f60e11b8152600481018290526000903090636352211e9060240160206040518083038186803b1580156119c157600080fd5b505afa9250505080156119f1575060408051601f3d908101601f191682019092526119ee9181019061332b565b60015b610c6c57506000919050565b919050565b611a0a6122fa565b6113a181600b55565b611a1b6122fa565b600f55565b611a286122fa565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610c9790613ac9565b60026009541415611a7c5760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d5460ff16611ac95760405162461bcd60e51b8152602060048201526013602482015272119c995948135a5b9d081a5cc814185d5cd959606a1b6044820152606401610f83565b611ad4338383611143565b611b155760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642056697020436f756e742160701b6044820152606401610f83565b60008211611b585760405162461bcd60e51b815260206004820152601060248201526f596f752068617665206e6f205649502160801b6044820152606401610f83565b82821015611bb45760405162461bcd60e51b815260206004820152602360248201527f467265654d696e743a204f766572206d6178206d696e7473207065722077616c6044820152621b195d60ea1b6064820152608401610f83565b336000908152601e6020526040902054611bcf908490613a24565b821015611c1e5760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20467265654d696e74206c656674000000000000006044820152606401610f83565b601454611c29610de5565b611c339085613a24565b1115611c515760405162461bcd60e51b8152600401610f8390613997565b336000908152601e602052604081208054859290611960908490613a24565b611c786122fa565b600e55565b6001600160a01b038216331415611ca75760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611d1b6122fa565b601d805491151563010000000263ff00000019909216919091179055565b611d416122fa565b601155565b611d518484846124e6565b6001600160a01b0383163b15611d8a57611d6d84848484612a01565b611d8a576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b611d986122fa565b6113a181600a55565b611da96122fa565b601d8054911515620100000262ff000019909216919091179055565b6060611dd082612451565b611e1c5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610f83565b601d54640100000000900460ff16611edc576016611e3b600584613b1f565b60058110611e4b57611e4b613b5f565b018054611e5790613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8390613ac9565b8015611ed05780601f10611ea557610100808354040283529160200191611ed0565b820191906000526020600020905b815481529060010190602001808311611eb357829003601f168201915b50505050509050919050565b611ee4612af9565b611eed83612b08565b601b604051602001611f019392919061373d565b6040516020818303038152906040529050919050565b611f1f6122fa565b60068210611f5f5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c84092dcc8caf609b1b6044820152606401610f83565b8060168360058110611f7357611f73613b5f565b019080519060200190610de0929190613169565b611f8f6122fa565b601d80549115156101000261ff0019909216919091179055565b60026009541415611fcc5760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d5462010000900460ff166120295760405162461bcd60e51b815260206004820152601760248201527f77686974656c6973744d696e74206973205061757365640000000000000000006044820152606401610f83565b61203333826114f2565b61207f5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742077686974656c69737465642100000000000000006044820152606401610f83565b8160125410156120e25760405162461bcd60e51b815260206004820152602860248201527f77686974656c6973744d696e743a204f766572206d6178206d696e74732070656044820152671c881dd85b1b195d60c21b6064820152608401610f83565b3360009081526020805260409020546120fc908390613a24565b601254101561214d5760405162461bcd60e51b815260206004820152601e60248201527f596f752068617665206e6f2077686974656c6973744d696e74206c65667400006044820152606401610f83565b81600f5461215b9190613a50565b34146121795760405162461bcd60e51b8152600401610f8390613960565b601454612184610de5565b61218e9084613a24565b11156121ac5760405162461bcd60e51b8152600401610f8390613997565b336000908152602080526040812080548492906121ca908490613a24565b909155506121da905033836126c1565b50506001600955565b6121eb6122fa565b6014546121f6610de5565b6122009084613a24565b111561221e5760405162461bcd60e51b8152600401610f8390613997565b610c8481836126c1565b6122306122fa565b601055565b61223d6122fa565b8051610c8490601b906020840190613169565b606061225a612c05565b905090565b6122676122fa565b6001600160a01b0381166122cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f83565b6113a1816129b1565b60006001600160e01b0319821663152a902d60e11b1480610c6c5750610c6c82612c85565b6000546001600160a01b031633146117075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f83565b6127106001600160601b03821611156123c25760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610f83565b6001600160a01b0382166124185760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610f83565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600c55565b600081600111158015612465575060015482105b8015610c6c575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006124f18261288f565b9050836001600160a01b031681600001516001600160a01b0316146125285760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061254657506125468533610bfd565b8061256157503361255684610d1a565b6001600160a01b0316145b90508061258157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166125a857604051633a954ecd60e21b815260040160405180910390fd5b6125b46000848761248a565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b4290921691909102178355870180845292208054919390911661268857600154821461268857805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b0316600080516020613bf783398151915260405160405180910390a45050505050565b610c84828260405180602001604052806000815250612cd5565b60006126e68361288f565b8051909150821561274c576000336001600160a01b038316148061270f575061270f8233610bfd565b8061272a57503361271f86610d1a565b6001600160a01b0316145b90508061274a57604051632ce44b5f60e11b815260040160405180910390fd5b505b6127586000858361248a565b6001600160a01b0380821660008181526006602090815260408083208054600160801b6000196001600160401b0380841691909101811667ffffffffffffffff198416811783900482166001908101831690930277ffffffffffffffff0000000000000000ffffffffffffffff19909416179290921783558b86526005909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b17855591890180845292208054919490911661285657600154821461285657805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b03841690600080516020613bf7833981519152908390a450506002805460010190555050565b604080516060810182526000808252602082018190529181019190915281806001116129985760015481101561299857600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906129965780516001600160a01b03161561292d579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612991579392505050565b61292d565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612a369033908990889088906004016138cc565b602060405180830381600087803b158015612a5057600080fd5b505af1925050508015612a80575060408051601f3d908101601f19168201909252612a7d918101906135d4565b60015b612adb573d808015612aae576040519150601f19603f3d011682016040523d82523d6000602084013e612ab3565b606091505b508051612ad3576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060601c8054610c9790613ac9565b606081612b2c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b565780612b4081613b04565b9150612b4f9050600a83613a3c565b9150612b30565b6000816001600160401b03811115612b7057612b70613b75565b6040519080825280601f01601f191660200182016040528015612b9a576020820181803683370190505b5090505b8415612af157612baf600183613a6f565b9150612bbc600a86613b1f565b612bc7906030613a24565b60f81b818381518110612bdc57612bdc613b5f565b60200101906001600160f81b031916908160001a905350612bfe600a86613a3c565b9450612b9e565b6060600080612c1681612710610eb4565b91509150612c5f612c2682612b08565b612c3a846001600160a01b03166014612e74565b604051602001612c4b929190613801565b604051602081830303815290604052613016565b604051602001612c6f9190613887565b6040516020818303038152906040529250505090565b60006001600160e01b031982166380ac58cd60e01b1480612cb657506001600160e01b03198216635b5e139f60e01b145b80610c6c57506301ffc9a760e01b6001600160e01b0319831614610c6c565b6001546001600160a01b038416612cfe57604051622e076360e81b815260040160405180910390fd5b82612d1c5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600590925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15612e32575b60405182906001600160a01b03881690600090600080516020613bf7833981519152908290a4612dfb6000878480600101955087612a01565b612e18576040516368d2bf6b60e11b815260040160405180910390fd5b808210612dc2578260015414612e2d57600080fd5b612e65565b5b6040516001830192906001600160a01b03881690600090600080516020613bf7833981519152908290a4808210612e33575b50600155611d8a600085838684565b60606000612e83836002613a50565b612e8e906002613a24565b6001600160401b03811115612ea557612ea5613b75565b6040519080825280601f01601f191660200182016040528015612ecf576020820181803683370190505b509050600360fc1b81600081518110612eea57612eea613b5f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612f1957612f19613b5f565b60200101906001600160f81b031916908160001a9053506000612f3d846002613a50565b612f48906001613a24565b90505b6001811115612fc0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612f7c57612f7c613b5f565b1a60f81b828281518110612f9257612f92613b5f565b60200101906001600160f81b031916908160001a90535060049490941c93612fb981613ab2565b9050612f4b565b50831561300f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610f83565b9392505050565b606081516000141561303657505060408051602081019091526000815290565b6000604051806060016040528060408152602001613bb760409139905060006003845160026130659190613a24565b61306f9190613a3c565b61307a906004613a50565b6001600160401b0381111561309157613091613b75565b6040519080825280601f01601f1916602001820160405280156130bb576020820181803683370190505b509050600182016020820185865187015b80821015613127576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506130cc565b505060038651066001811461314357600281146131565761315e565b603d6001830353603d600283035361315e565b603d60018303535b509195945050505050565b82805461317590613ac9565b90600052602060002090601f01602090048101928261319757600085556131dd565b82601f106131b057805160ff19168380011785556131dd565b828001600101855582156131dd579182015b828111156131dd5782518255916020019190600101906131c2565b506131e99291506131ed565b5090565b5b808211156131e957600081556001016131ee565b60006001600160401b0383111561321b5761321b613b75565b61322e601f8401601f19166020016139f4565b905082815283838301111561324257600080fd5b828260208301376000602084830101529392505050565b600082601f83011261326a57600080fd5b813560206001600160401b0382111561328557613285613b75565b8160051b6132948282016139f4565b8381528281019086840183880185018910156132af57600080fd5b600093505b858410156132d25780358352600193909301929184019184016132b4565b50979650505050505050565b803580151581146119fd57600080fd5b600082601f8301126132ff57600080fd5b61300f83833560208501613202565b60006020828403121561332057600080fd5b813561300f81613b8b565b60006020828403121561333d57600080fd5b815161300f81613b8b565b6000806040838503121561335b57600080fd5b823561336681613b8b565b9150602083013561337681613b8b565b809150509250929050565b60008060006060848603121561339657600080fd5b83356133a181613b8b565b925060208401356133b181613b8b565b929592945050506040919091013590565b600080600080608085870312156133d857600080fd5b84356133e381613b8b565b935060208501356133f381613b8b565b92506040850135915060608501356001600160401b0381111561341557600080fd5b8501601f8101871361342657600080fd5b61343587823560208401613202565b91505092959194509250565b6000806040838503121561345457600080fd5b823561345f81613b8b565b915060208301356001600160401b0381111561347a57600080fd5b61348685828601613259565b9150509250929050565b600080604083850312156134a357600080fd5b82356134ae81613b8b565b91506134bc602084016132de565b90509250929050565b600080604083850312156134d857600080fd5b82356134e381613b8b565b946020939093013593505050565b60008060006060848603121561350657600080fd5b833561351181613b8b565b92506020840135915060408401356001600160401b0381111561353357600080fd5b61353f86828701613259565b9150509250925092565b6000806040838503121561355c57600080fd5b823561356781613b8b565b915060208301356001600160601b038116811461337657600080fd5b60006020828403121561359557600080fd5b61300f826132de565b6000602082840312156135b057600080fd5b5035919050565b6000602082840312156135c957600080fd5b813561300f81613ba0565b6000602082840312156135e657600080fd5b815161300f81613ba0565b60006020828403121561360357600080fd5b81356001600160401b0381111561361957600080fd5b612af1848285016132ee565b6000806040838503121561363857600080fd5b82359150602083013561337681613b8b565b6000806040838503121561365d57600080fd5b8235915060208301356001600160401b0381111561347a57600080fd5b6000806040838503121561368d57600080fd5b8235915060208301356001600160401b038111156136aa57600080fd5b613486858286016132ee565b600080604083850312156136c957600080fd5b50508035926020909101359150565b6000806000606084860312156136ed57600080fd5b833592506020840135915060408401356001600160401b0381111561353357600080fd5b60008151808452613729816020860160208601613a86565b601f01601f19169290920160200192915050565b6000845160206137508285838a01613a86565b8551918401916137638184848a01613a86565b8554920191600090600181811c908083168061378057607f831692505b85831081141561379e57634e487b7160e01b85526022600452602485fd5b8080156137b257600181146137c3576137f0565b60ff198516885283880195506137f0565b60008b81526020902060005b858110156137e85781548a8201529084019088016137cf565b505083880195505b50939b9a5050505050505050505050565b7f7b2273656c6c65725f6665655f62617369735f706f696e7473223a000000000081526000835161383981601b850160208801613a86565b721610113332b2afb932b1b4b834b2b73a111d1160691b601b91840191820152835161386c81602e840160208801613a86565b61227d60f01b602e9290910191820152603001949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516138bf81601d850160208701613a86565b91909101601d0192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906138ff90830184613711565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561394157835183529284019291840191600101613925565b50909695505050505050565b60208152600061300f6020830184613711565b60208082526018908201527f4554482076616c7565206973206e6f7420636f72726563740000000000000000604082015260600190565b6020808252600c908201526b4e6f206d6f7265204e46547360a01b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715613a1c57613a1c613b75565b604052919050565b60008219821115613a3757613a37613b33565b500190565b600082613a4b57613a4b613b49565b500490565b6000816000190483118215151615613a6a57613a6a613b33565b500290565b600082821015613a8157613a81613b33565b500390565b60005b83811015613aa1578181015183820152602001613a89565b83811115611d8a5750506000910152565b600081613ac157613ac1613b33565b506000190190565b600181811c90821680613add57607f821691505b60208210811415613afe57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1857613b18613b33565b5060010190565b600082613b2e57613b2e613b49565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113a157600080fd5b6001600160e01b0319811681146113a157600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205c0c4ba9e185ce5c3dc2447b8df1ad2311b544190ce4e6f3fd53992ad2151fdd64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000015447265616d696e2044697665727320436865657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000054449564552000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106103e45760003560e01c806378a9238011610208578063b88d4fde11610118578063d2cab056116100ab578063da3ef23f1161007a578063da3ef23f14610bad578063e8a3d48514610bcd578063e985e9c514610be2578063f2fde38b14610c2b578063f9e7dafa14610c4b57600080fd5b8063d2cab05614610b44578063d52c57e014610b57578063d5abeb0114610b77578063d78be71c14610b8d57600080fd5b8063c87b56dd116100e7578063c87b56dd14610ac3578063cb2b66b314610ae3578063ce702ad614610b04578063d13f9c0414610b2457600080fd5b8063b88d4fde14610a4d578063bc976afd14610a6d578063c3faf72414610a8d578063c833e25814610aad57600080fd5b8063942958f41161019b5780639aa289ce1161016a5780639aa289ce146109ad578063a195aabd146109cd578063a22cb465146109ed578063a355fd2914610a0d578063a4c619ff14610a2d57600080fd5b8063942958f41461093257806395d89b411461096857806397554dd31461097d5780639970cc291461099757600080fd5b80638b6d7cf3116101d75780638b6d7cf3146108b55780638da5cb5b146108d45780638dd07d0f146108f25780639373f4321461091257600080fd5b806378a9238014610820578063813779ef14610855578063830b3a64146108755780638ac1e1611461089557600080fd5b806336261ef61161030357806355f804b311610296578063707368f811610265578063707368f81461079857806370a08231146107b8578063715018a6146107d8578063719eaef8146107ed57806371a4b01d1461080d57600080fd5b806355f804b3146107185780635a23dd99146107385780636352211e146107585780636f8b44b01461077857600080fd5b806342842e0e116102d257806342842e0e1461068b57806342966c68146106ab578063438b6300146106cb57806354214f69146106f857600080fd5b806336261ef614610601578063389fcf06146106375780633ccfd60b1461066d57806342454db91461067557600080fd5b80631a09cfe21161037b5780632a55205a1161034a5780632a55205a146105795780632c4e9fc6146105b85780632db11544146105ce57806332b243c7146105e157600080fd5b80631a09cfe21461050e57806323b872dd146105245780632672c902146105445780632a3f300c1461055957600080fd5b8063095ea7b3116103b7578063095ea7b31461049a5780630d9005ae146104ba57806318160ddd146104d9578063189f3de1146104ee57600080fd5b806301ffc9a7146103e957806304634d8d1461041e57806306fdde0314610440578063081812fc14610462575b600080fd5b3480156103f557600080fd5b506104096104043660046135b7565b610c61565b60405190151581526020015b60405180910390f35b34801561042a57600080fd5b5061043e610439366004613549565b610c72565b005b34801561044c57600080fd5b50610455610c88565b604051610415919061394d565b34801561046e57600080fd5b5061048261047d36600461359e565b610d1a565b6040516001600160a01b039091168152602001610415565b3480156104a657600080fd5b5061043e6104b53660046134c5565b610d5e565b3480156104c657600080fd5b506001545b604051908152602001610415565b3480156104e557600080fd5b506104cb610de5565b3480156104fa57600080fd5b50601d546104099062010000900460ff1681565b34801561051a57600080fd5b506104cb60135481565b34801561053057600080fd5b5061043e61053f366004613381565b610df3565b34801561055057600080fd5b50610455610dfe565b34801561056557600080fd5b5061043e610574366004613583565b610e8c565b34801561058557600080fd5b506105996105943660046136b6565b610eb4565b604080516001600160a01b039093168352602083019190915201610415565b3480156105c457600080fd5b506104cb600f5481565b61043e6105dc36600461359e565b610f60565b3480156105ed57600080fd5b506104096105fc3660046134f1565b611143565b34801561060d57600080fd5b506104cb61061c36600461330e565b6001600160a01b03166000908152601f602052604090205490565b34801561064357600080fd5b506104cb61065236600461330e565b6001600160a01b03166000908152601e602052604090205490565b61043e61126f565b34801561068157600080fd5b506104cb60105481565b34801561069757600080fd5b5061043e6106a6366004613381565b61137b565b3480156106b757600080fd5b5061043e6106c636600461359e565b611396565b3480156106d757600080fd5b506106eb6106e636600461330e565b6113a4565b6040516104159190613909565b34801561070457600080fd5b50601d54640100000000900460ff16610409565b34801561072457600080fd5b5061043e6107333660046135f1565b6114d7565b34801561074457600080fd5b50610409610753366004613441565b6114f2565b34801561076457600080fd5b5061048261077336600461359e565b611616565b34801561078457600080fd5b5061043e61079336600461359e565b611628565b3480156107a457600080fd5b5061043e6107b3366004613583565b61168c565b3480156107c457600080fd5b506104cb6107d336600461330e565b6116a7565b3480156107e457600080fd5b5061043e6116f5565b3480156107f957600080fd5b5061043e61080836600461359e565b611709565b61043e61081b3660046136d8565b611716565b34801561082c57600080fd5b506104cb61083b36600461330e565b6001600160a01b0316600090815260208052604090205490565b34801561086157600080fd5b5061043e61087036600461359e565b61197a565b34801561088157600080fd5b5061048261089036600461359e565b611987565b3480156108a157600080fd5b5061043e6108b036600461359e565b611a02565b3480156108c157600080fd5b50601d5461040990610100900460ff1681565b3480156108e057600080fd5b506000546001600160a01b0316610482565b3480156108fe57600080fd5b5061043e61090d36600461359e565b611a13565b34801561091e57600080fd5b5061043e61092d36600461330e565b611a20565b34801561093e57600080fd5b506104cb61094d36600461330e565b6001600160a01b031660009081526021602052604090205490565b34801561097457600080fd5b50610455611a4a565b34801561098957600080fd5b50601d546104099060ff1681565b3480156109a357600080fd5b506104cb60125481565b3480156109b957600080fd5b5061043e6109c83660046136d8565b611a59565b3480156109d957600080fd5b5061043e6109e836600461359e565b611c70565b3480156109f957600080fd5b5061043e610a08366004613490565b611c7d565b348015610a1957600080fd5b5061043e610a28366004613583565b611d13565b348015610a3957600080fd5b5061043e610a4836600461359e565b611d39565b348015610a5957600080fd5b5061043e610a683660046133c2565b611d46565b348015610a7957600080fd5b5061043e610a8836600461359e565b611d90565b348015610a9957600080fd5b5061043e610aa8366004613583565b611da1565b348015610ab957600080fd5b506104cb600e5481565b348015610acf57600080fd5b50610455610ade36600461359e565b611dc5565b348015610aef57600080fd5b50601d54610409906301000000900460ff1681565b348015610b1057600080fd5b5061043e610b1f36600461367a565b611f17565b348015610b3057600080fd5b5061043e610b3f366004613583565b611f87565b61043e610b5236600461364a565b611fa9565b348015610b6357600080fd5b5061043e610b72366004613625565b6121e3565b348015610b8357600080fd5b506104cb60145481565b348015610b9957600080fd5b5061043e610ba836600461359e565b612228565b348015610bb957600080fd5b5061043e610bc83660046135f1565b612235565b348015610bd957600080fd5b50610455612250565b348015610bee57600080fd5b50610409610bfd366004613348565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610c3757600080fd5b5061043e610c4636600461330e565b61225f565b348015610c5757600080fd5b506104cb60115481565b6000610c6c826122d5565b92915050565b610c7a6122fa565b610c848282612354565b5050565b606060038054610c9790613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610cc390613ac9565b8015610d105780601f10610ce557610100808354040283529160200191610d10565b820191906000526020600020905b815481529060010190602001808311610cf357829003601f168201915b5050505050905090565b6000610d2582612451565b610d42576040516333d1c03960e21b815260040160405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610d6982611616565b9050806001600160a01b0316836001600160a01b03161415610d9e5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614610dd557610db88133610bfd565b610dd5576040516367d9dca160e11b815260040160405180910390fd5b610de083838361248a565b505050565b600254600154036000190190565b610de08383836124e6565b601b8054610e0b90613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3790613ac9565b8015610e845780601f10610e5957610100808354040283529160200191610e84565b820191906000526020600020905b815481529060010190602001808311610e6757829003601f168201915b505050505081565b610e946122fa565b601d80549115156401000000000264ff0000000019909216919091179055565b6000828152600d602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046001600160601b0316928201929092528291610f29575060408051808201909152600c546001600160a01b0381168252600160a01b90046001600160601b031660208201525b602081015160009061271090610f48906001600160601b031687613a50565b610f529190613a3c565b915196919550909350505050565b60026009541415610f8c5760405162461bcd60e51b8152600401610f83906139bd565b60405180910390fd5b6002600955601d546301000000900460ff16610fe15760405162461bcd60e51b81526020600482015260146024820152731c1d589b1a58d35a5b9d081a5cc814185d5cd95960621b6044820152606401610f83565b8060135410156110415760405162461bcd60e51b815260206004820152602560248201527f7075626c69634d696e743a204f766572206d6178206d696e7473207065722077604482015264185b1b195d60da1b6064820152608401610f83565b3360009081526021602052604090205461105c908290613a24565b60135410156110ad5760405162461bcd60e51b815260206004820152601b60248201527f596f752068617665206e6f207075626c69634d696e74206c65667400000000006044820152606401610f83565b806010546110bb9190613a50565b34146110d95760405162461bcd60e51b8152600401610f8390613960565b6014546110e4610de5565b6110ee9083613a24565b111561110c5760405162461bcd60e51b8152600401610f8390613997565b336000908152602160205260408120805483929061112b908490613a24565b9091555061113b905033826126c1565b506001600955565b6040516bffffffffffffffffffffffff19606085901b16602082015260348101839052600090819060540160405160208183030381529060405280519060200120905060005b8351811015611262578381815181106111a4576111a4613b5f565b60200260200101518210611202578381815181106111c4576111c4613b5f565b6020026020010151826040516020016111e7929190918252602082015260400190565b6040516020818303038152906040528051906020012061124e565b8184828151811061121557611215613b5f565b6020026020010151604051602001611237929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061125a81613b04565b915050611189565b50600a5414949350505050565b6112776122fa565b6002600954141561129a5760405162461bcd60e51b8152600401610f83906139bd565b60026009556015546000906001600160a01b031615611310576015546040516001600160a01b03909116904790600081818185875af1925050503d8060008114611300576040519150601f19603f3d011682016040523d82523d6000602084013e611305565b606091505b505080915050611371565b6000546001600160a01b03166001600160a01b03164760405160006040518083038185875af1925050503d8060008114611366576040519150601f19603f3d011682016040523d82523d6000602084013e61136b565b606091505b50909150505b8061113b57600080fd5b610de083838360405180602001604052806000815250611d46565b6113a18160016126db565b50565b606060006113b1836116a7565b90506000816001600160401b038111156113cd576113cd613b75565b6040519080825280602002602001820160405280156113f6578160200160208202803683370190505b509050600060015b6001548110156114cd576040516320c2ce9960e21b815260048101829052309063830b3a649060240160206040518083038186803b15801561143f57600080fd5b505afa158015611453573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611477919061332b565b6001600160a01b0316866001600160a01b031614156114bb5780838361149c81613b04565b9450815181106114ae576114ae613b5f565b6020026020010181815250505b806114c581613b04565b9150506113fe565b5090949350505050565b6114df6122fa565b8051610c8490601c906020840190613169565b6040516bffffffffffffffffffffffff19606084901b166020820152600090819060340160405160208183030381529060405280519060200120905060005b835181101561160a5783818151811061154c5761154c613b5f565b602002602001015182106115aa5783818151811061156c5761156c613b5f565b60200260200101518260405160200161158f929190918252602082015260400190565b604051602081830303815290604052805190602001206115f6565b818482815181106115bd576115bd613b5f565b60200260200101516040516020016115df929190918252602082015260400190565b604051602081830303815290604052805190602001205b91508061160281613b04565b915050611531565b50600b54149392505050565b60006116218261288f565b5192915050565b6116306122fa565b80611639610de5565b11156116875760405162461bcd60e51b815260206004820152601960248201527f4c6f776572207468616e205f63757272656e74496e6465782e000000000000006044820152606401610f83565b601455565b6116946122fa565b601d805460ff1916911515919091179055565b60006001600160a01b0382166116d0576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600660205260409020546001600160401b031690565b6116fd6122fa565b61170760006129b1565b565b6117116122fa565b601255565b600260095414156117395760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d54610100900460ff1661178a5760405162461bcd60e51b8152602060048201526012602482015271159a5c0814d85b19481a5cc814185d5cd95960721b6044820152606401610f83565b611795338383611143565b6117d65760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642056697020436f756e742160701b6044820152606401610f83565b600082116118195760405162461bcd60e51b815260206004820152601060248201526f596f752068617665206e6f205649502160801b6044820152606401610f83565b8260115410156118765760405162461bcd60e51b815260206004820152602260248201527f5669704d696e743a204f766572206d6178206d696e7473207065722077616c6c604482015261195d60f21b6064820152608401610f83565b336000908152601f6020526040902054611891908490613a24565b60115410156118e25760405162461bcd60e51b815260206004820152601860248201527f596f752068617665206e6f205669704d696e74206c65667400000000000000006044820152606401610f83565b82600e546118f09190613a50565b341461190e5760405162461bcd60e51b8152600401610f8390613960565b601454611919610de5565b6119239085613a24565b11156119415760405162461bcd60e51b8152600401610f8390613997565b336000908152601f602052604081208054859290611960908490613a24565b90915550611970905033846126c1565b5050600160095550565b6119826122fa565b601355565b6040516331a9108f60e11b8152600481018290526000903090636352211e9060240160206040518083038186803b1580156119c157600080fd5b505afa9250505080156119f1575060408051601f3d908101601f191682019092526119ee9181019061332b565b60015b610c6c57506000919050565b919050565b611a0a6122fa565b6113a181600b55565b611a1b6122fa565b600f55565b611a286122fa565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b606060048054610c9790613ac9565b60026009541415611a7c5760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d5460ff16611ac95760405162461bcd60e51b8152602060048201526013602482015272119c995948135a5b9d081a5cc814185d5cd959606a1b6044820152606401610f83565b611ad4338383611143565b611b155760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642056697020436f756e742160701b6044820152606401610f83565b60008211611b585760405162461bcd60e51b815260206004820152601060248201526f596f752068617665206e6f205649502160801b6044820152606401610f83565b82821015611bb45760405162461bcd60e51b815260206004820152602360248201527f467265654d696e743a204f766572206d6178206d696e7473207065722077616c6044820152621b195d60ea1b6064820152608401610f83565b336000908152601e6020526040902054611bcf908490613a24565b821015611c1e5760405162461bcd60e51b815260206004820152601960248201527f596f752068617665206e6f20467265654d696e74206c656674000000000000006044820152606401610f83565b601454611c29610de5565b611c339085613a24565b1115611c515760405162461bcd60e51b8152600401610f8390613997565b336000908152601e602052604081208054859290611960908490613a24565b611c786122fa565b600e55565b6001600160a01b038216331415611ca75760405163b06307db60e01b815260040160405180910390fd5b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611d1b6122fa565b601d805491151563010000000263ff00000019909216919091179055565b611d416122fa565b601155565b611d518484846124e6565b6001600160a01b0383163b15611d8a57611d6d84848484612a01565b611d8a576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b611d986122fa565b6113a181600a55565b611da96122fa565b601d8054911515620100000262ff000019909216919091179055565b6060611dd082612451565b611e1c5760405162461bcd60e51b815260206004820152601f60248201527f55524920717565727920666f72206e6f6e6578697374656e7420746f6b656e006044820152606401610f83565b601d54640100000000900460ff16611edc576016611e3b600584613b1f565b60058110611e4b57611e4b613b5f565b018054611e5790613ac9565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8390613ac9565b8015611ed05780601f10611ea557610100808354040283529160200191611ed0565b820191906000526020600020905b815481529060010190602001808311611eb357829003601f168201915b50505050509050919050565b611ee4612af9565b611eed83612b08565b601b604051602001611f019392919061373d565b6040516020818303038152906040529050919050565b611f1f6122fa565b60068210611f5f5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c84092dcc8caf609b1b6044820152606401610f83565b8060168360058110611f7357611f73613b5f565b019080519060200190610de0929190613169565b611f8f6122fa565b601d80549115156101000261ff0019909216919091179055565b60026009541415611fcc5760405162461bcd60e51b8152600401610f83906139bd565b6002600955601d5462010000900460ff166120295760405162461bcd60e51b815260206004820152601760248201527f77686974656c6973744d696e74206973205061757365640000000000000000006044820152606401610f83565b61203333826114f2565b61207f5760405162461bcd60e51b815260206004820152601860248201527f596f7520617265206e6f742077686974656c69737465642100000000000000006044820152606401610f83565b8160125410156120e25760405162461bcd60e51b815260206004820152602860248201527f77686974656c6973744d696e743a204f766572206d6178206d696e74732070656044820152671c881dd85b1b195d60c21b6064820152608401610f83565b3360009081526020805260409020546120fc908390613a24565b601254101561214d5760405162461bcd60e51b815260206004820152601e60248201527f596f752068617665206e6f2077686974656c6973744d696e74206c65667400006044820152606401610f83565b81600f5461215b9190613a50565b34146121795760405162461bcd60e51b8152600401610f8390613960565b601454612184610de5565b61218e9084613a24565b11156121ac5760405162461bcd60e51b8152600401610f8390613997565b336000908152602080526040812080548492906121ca908490613a24565b909155506121da905033836126c1565b50506001600955565b6121eb6122fa565b6014546121f6610de5565b6122009084613a24565b111561221e5760405162461bcd60e51b8152600401610f8390613997565b610c8481836126c1565b6122306122fa565b601055565b61223d6122fa565b8051610c8490601b906020840190613169565b606061225a612c05565b905090565b6122676122fa565b6001600160a01b0381166122cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610f83565b6113a1816129b1565b60006001600160e01b0319821663152a902d60e11b1480610c6c5750610c6c82612c85565b6000546001600160a01b031633146117075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f83565b6127106001600160601b03821611156123c25760405162461bcd60e51b815260206004820152602a60248201527f455243323938313a20726f79616c7479206665652077696c6c206578636565646044820152692073616c65507269636560b01b6064820152608401610f83565b6001600160a01b0382166124185760405162461bcd60e51b815260206004820152601960248201527f455243323938313a20696e76616c6964207265636569766572000000000000006044820152606401610f83565b604080518082019091526001600160a01b039092168083526001600160601b039091166020909201829052600160a01b90910217600c55565b600081600111158015612465575060015482105b8015610c6c575050600090815260056020526040902054600160e01b900460ff161590565b60008281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006124f18261288f565b9050836001600160a01b031681600001516001600160a01b0316146125285760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061254657506125468533610bfd565b8061256157503361255684610d1a565b6001600160a01b0316145b90508061258157604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166125a857604051633a954ecd60e21b815260040160405180910390fd5b6125b46000848761248a565b6001600160a01b038581166000908152600660209081526040808320805467ffffffffffffffff198082166001600160401b0392831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600590945282852080546001600160e01b031916909417600160a01b4290921691909102178355870180845292208054919390911661268857600154821461268857805460208601516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b0316600080516020613bf783398151915260405160405180910390a45050505050565b610c84828260405180602001604052806000815250612cd5565b60006126e68361288f565b8051909150821561274c576000336001600160a01b038316148061270f575061270f8233610bfd565b8061272a57503361271f86610d1a565b6001600160a01b0316145b90508061274a57604051632ce44b5f60e11b815260040160405180910390fd5b505b6127586000858361248a565b6001600160a01b0380821660008181526006602090815260408083208054600160801b6000196001600160401b0380841691909101811667ffffffffffffffff198416811783900482166001908101831690930277ffffffffffffffff0000000000000000ffffffffffffffff19909416179290921783558b86526005909452828520805460ff60e01b1942909316600160a01b026001600160e01b03199091169097179690961716600160e01b17855591890180845292208054919490911661285657600154821461285657805460208701516001600160401b0316600160a01b026001600160e01b03199091166001600160a01b038716171781555b5050604051869250600091506001600160a01b03841690600080516020613bf7833981519152908390a450506002805460010190555050565b604080516060810182526000808252602082018190529181019190915281806001116129985760015481101561299857600081815260056020908152604091829020825160608101845290546001600160a01b0381168252600160a01b81046001600160401b031692820192909252600160e01b90910460ff161515918101829052906129965780516001600160a01b03161561292d579392505050565b5060001901600081815260056020908152604091829020825160608101845290546001600160a01b038116808352600160a01b82046001600160401b031693830193909352600160e01b900460ff1615159281019290925215612991579392505050565b61292d565b505b604051636f96cda160e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a0290612a369033908990889088906004016138cc565b602060405180830381600087803b158015612a5057600080fd5b505af1925050508015612a80575060408051601f3d908101601f19168201909252612a7d918101906135d4565b60015b612adb573d808015612aae576040519150601f19603f3d011682016040523d82523d6000602084013e612ab3565b606091505b508051612ad3576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060601c8054610c9790613ac9565b606081612b2c5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612b565780612b4081613b04565b9150612b4f9050600a83613a3c565b9150612b30565b6000816001600160401b03811115612b7057612b70613b75565b6040519080825280601f01601f191660200182016040528015612b9a576020820181803683370190505b5090505b8415612af157612baf600183613a6f565b9150612bbc600a86613b1f565b612bc7906030613a24565b60f81b818381518110612bdc57612bdc613b5f565b60200101906001600160f81b031916908160001a905350612bfe600a86613a3c565b9450612b9e565b6060600080612c1681612710610eb4565b91509150612c5f612c2682612b08565b612c3a846001600160a01b03166014612e74565b604051602001612c4b929190613801565b604051602081830303815290604052613016565b604051602001612c6f9190613887565b6040516020818303038152906040529250505090565b60006001600160e01b031982166380ac58cd60e01b1480612cb657506001600160e01b03198216635b5e139f60e01b145b80610c6c57506301ffc9a760e01b6001600160e01b0319831614610c6c565b6001546001600160a01b038416612cfe57604051622e076360e81b815260040160405180910390fd5b82612d1c5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260066020908152604080832080546fffffffffffffffffffffffffffffffff1981166001600160401b038083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600590925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15612e32575b60405182906001600160a01b03881690600090600080516020613bf7833981519152908290a4612dfb6000878480600101955087612a01565b612e18576040516368d2bf6b60e11b815260040160405180910390fd5b808210612dc2578260015414612e2d57600080fd5b612e65565b5b6040516001830192906001600160a01b03881690600090600080516020613bf7833981519152908290a4808210612e33575b50600155611d8a600085838684565b60606000612e83836002613a50565b612e8e906002613a24565b6001600160401b03811115612ea557612ea5613b75565b6040519080825280601f01601f191660200182016040528015612ecf576020820181803683370190505b509050600360fc1b81600081518110612eea57612eea613b5f565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612f1957612f19613b5f565b60200101906001600160f81b031916908160001a9053506000612f3d846002613a50565b612f48906001613a24565b90505b6001811115612fc0576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612f7c57612f7c613b5f565b1a60f81b828281518110612f9257612f92613b5f565b60200101906001600160f81b031916908160001a90535060049490941c93612fb981613ab2565b9050612f4b565b50831561300f5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610f83565b9392505050565b606081516000141561303657505060408051602081019091526000815290565b6000604051806060016040528060408152602001613bb760409139905060006003845160026130659190613a24565b61306f9190613a3c565b61307a906004613a50565b6001600160401b0381111561309157613091613b75565b6040519080825280601f01601f1916602001820160405280156130bb576020820181803683370190505b509050600182016020820185865187015b80821015613127576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f81168501518453506001830192506130cc565b505060038651066001811461314357600281146131565761315e565b603d6001830353603d600283035361315e565b603d60018303535b509195945050505050565b82805461317590613ac9565b90600052602060002090601f01602090048101928261319757600085556131dd565b82601f106131b057805160ff19168380011785556131dd565b828001600101855582156131dd579182015b828111156131dd5782518255916020019190600101906131c2565b506131e99291506131ed565b5090565b5b808211156131e957600081556001016131ee565b60006001600160401b0383111561321b5761321b613b75565b61322e601f8401601f19166020016139f4565b905082815283838301111561324257600080fd5b828260208301376000602084830101529392505050565b600082601f83011261326a57600080fd5b813560206001600160401b0382111561328557613285613b75565b8160051b6132948282016139f4565b8381528281019086840183880185018910156132af57600080fd5b600093505b858410156132d25780358352600193909301929184019184016132b4565b50979650505050505050565b803580151581146119fd57600080fd5b600082601f8301126132ff57600080fd5b61300f83833560208501613202565b60006020828403121561332057600080fd5b813561300f81613b8b565b60006020828403121561333d57600080fd5b815161300f81613b8b565b6000806040838503121561335b57600080fd5b823561336681613b8b565b9150602083013561337681613b8b565b809150509250929050565b60008060006060848603121561339657600080fd5b83356133a181613b8b565b925060208401356133b181613b8b565b929592945050506040919091013590565b600080600080608085870312156133d857600080fd5b84356133e381613b8b565b935060208501356133f381613b8b565b92506040850135915060608501356001600160401b0381111561341557600080fd5b8501601f8101871361342657600080fd5b61343587823560208401613202565b91505092959194509250565b6000806040838503121561345457600080fd5b823561345f81613b8b565b915060208301356001600160401b0381111561347a57600080fd5b61348685828601613259565b9150509250929050565b600080604083850312156134a357600080fd5b82356134ae81613b8b565b91506134bc602084016132de565b90509250929050565b600080604083850312156134d857600080fd5b82356134e381613b8b565b946020939093013593505050565b60008060006060848603121561350657600080fd5b833561351181613b8b565b92506020840135915060408401356001600160401b0381111561353357600080fd5b61353f86828701613259565b9150509250925092565b6000806040838503121561355c57600080fd5b823561356781613b8b565b915060208301356001600160601b038116811461337657600080fd5b60006020828403121561359557600080fd5b61300f826132de565b6000602082840312156135b057600080fd5b5035919050565b6000602082840312156135c957600080fd5b813561300f81613ba0565b6000602082840312156135e657600080fd5b815161300f81613ba0565b60006020828403121561360357600080fd5b81356001600160401b0381111561361957600080fd5b612af1848285016132ee565b6000806040838503121561363857600080fd5b82359150602083013561337681613b8b565b6000806040838503121561365d57600080fd5b8235915060208301356001600160401b0381111561347a57600080fd5b6000806040838503121561368d57600080fd5b8235915060208301356001600160401b038111156136aa57600080fd5b613486858286016132ee565b600080604083850312156136c957600080fd5b50508035926020909101359150565b6000806000606084860312156136ed57600080fd5b833592506020840135915060408401356001600160401b0381111561353357600080fd5b60008151808452613729816020860160208601613a86565b601f01601f19169290920160200192915050565b6000845160206137508285838a01613a86565b8551918401916137638184848a01613a86565b8554920191600090600181811c908083168061378057607f831692505b85831081141561379e57634e487b7160e01b85526022600452602485fd5b8080156137b257600181146137c3576137f0565b60ff198516885283880195506137f0565b60008b81526020902060005b858110156137e85781548a8201529084019088016137cf565b505083880195505b50939b9a5050505050505050505050565b7f7b2273656c6c65725f6665655f62617369735f706f696e7473223a000000000081526000835161383981601b850160208801613a86565b721610113332b2afb932b1b4b834b2b73a111d1160691b601b91840191820152835161386c81602e840160208801613a86565b61227d60f01b602e9290910191820152603001949350505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c0000008152600082516138bf81601d850160208701613a86565b91909101601d0192915050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906138ff90830184613711565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561394157835183529284019291840191600101613925565b50909695505050505050565b60208152600061300f6020830184613711565b60208082526018908201527f4554482076616c7565206973206e6f7420636f72726563740000000000000000604082015260600190565b6020808252600c908201526b4e6f206d6f7265204e46547360a01b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b604051601f8201601f191681016001600160401b0381118282101715613a1c57613a1c613b75565b604052919050565b60008219821115613a3757613a37613b33565b500190565b600082613a4b57613a4b613b49565b500490565b6000816000190483118215151615613a6a57613a6a613b33565b500290565b600082821015613a8157613a81613b33565b500390565b60005b83811015613aa1578181015183820152602001613a89565b83811115611d8a5750506000910152565b600081613ac157613ac1613b33565b506000190190565b600181811c90821680613add57607f821691505b60208210811415613afe57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613b1857613b18613b33565b5060010190565b600082613b2e57613b2e613b49565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113a157600080fd5b6001600160e01b0319811681146113a157600080fdfe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212205c0c4ba9e185ce5c3dc2447b8df1ad2311b544190ce4e6f3fd53992ad2151fdd64736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000015447265616d696e2044697665727320436865657273000000000000000000000000000000000000000000000000000000000000000000000000000000000000054449564552000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Dreamin Divers Cheers
Arg [1] : _symbol (string): DIVER

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000015
Arg [3] : 447265616d696e20446976657273204368656572730000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4449564552000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

63399:10468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;64780:165;;;;;;;;;;-1:-1:-1;64780:165:0;;;;;:::i;:::-;;:::i;:::-;;;15146:14:1;;15139:22;15121:41;;15109:2;15094:18;64780:165:0;;;;;;;;64605:154;;;;;;;;;;-1:-1:-1;64605:154:0;;;;;:::i;:::-;;:::i;:::-;;44922:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46426:204::-;;;;;;;;;;-1:-1:-1;46426:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;13528:32:1;;;13510:51;;13498:2;13483:18;46426:204:0;13364:203:1;45988:372:0;;;;;;;;;;-1:-1:-1;45988:372:0;;;;;:::i;:::-;;:::i;68446:99::-;;;;;;;;;;-1:-1:-1;68526:13:0;;68446:99;;;25032:25:1;;;25020:2;25005:18;68446:99:0;24886:177:1;41047:312:0;;;;;;;;;;;;;:::i;63975:27::-;;;;;;;;;;-1:-1:-1;63975:27:0;;;;;;;;;;;63667:28;;;;;;;;;;;;;;;;47291:170;;;;;;;;;;-1:-1:-1;47291:170:0;;;;;:::i;:::-;;:::i;63820:38::-;;;;;;;;;;;;;:::i;66441:90::-;;;;;;;;;;-1:-1:-1;66441:90:0;;;;;:::i;:::-;;:::i;32809:442::-;;;;;;;;;;-1:-1:-1;32809:442:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;14257:32:1;;;14239:51;;14321:2;14306:18;;14299:34;;;;14212:18;32809:442:0;14065:274:1;63538:26:0;;;;;;;;;;;;;;;;71633:550;;;;;;:::i;:::-;;:::i;15029:438::-;;;;;;;;;;-1:-1:-1;15029:438:0;;;;;:::i;:::-;;:::i;66801:116::-;;;;;;;;;;-1:-1:-1;66801:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;66891:20:0;66869:7;66891:20;;;:10;:20;;;;;;;66801:116;66679:118;;;;;;;;;;-1:-1:-1;66679:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;66770:21:0;66748:7;66770:21;;;:11;:21;;;;;;;66679:118;72334:661;;;:::i;63569:26::-;;;;;;;;;;;;;;;;47532:185;;;;;;;;;;-1:-1:-1;47532:185:0;;;;;:::i;:::-;;:::i;72199:81::-;;;;;;;;;;-1:-1:-1;72199:81:0;;;;;:::i;:::-;;:::i;73036:475::-;;;;;;;;;;-1:-1:-1;73036:475:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;66560:89::-;;;;;;;;;;-1:-1:-1;66632:11:0;;;;;;;66560:89;;68597:100;;;;;;;;;;-1:-1:-1;68597:100:0;;;;;:::i;:::-;;:::i;15604:407::-;;;;;;;;;;-1:-1:-1;15604:407:0;;;;;:::i;:::-;;:::i;44730:125::-;;;;;;;;;;-1:-1:-1;44730:125:0;;;;;:::i;:::-;;:::i;65897:176::-;;;;;;;;;;-1:-1:-1;65897:176:0;;;;;:::i;:::-;;:::i;67511:104::-;;;;;;;;;;-1:-1:-1;67511:104:0;;;;;:::i;:::-;;:::i;42176:206::-;;;;;;;;;;-1:-1:-1;42176:206:0;;;;;:::i;:::-;;:::i;62504:103::-;;;;;;;;;;;;;:::i;67283:97::-;;;;;;;;;;-1:-1:-1;67283:97:0;;;;;:::i;:::-;;:::i;70224:709::-;;;;;;:::i;:::-;;:::i;66921:114::-;;;;;;;;;;-1:-1:-1;66921:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;67010:19:0;66988:7;67010:19;;;:9;:19;;;;;;;66921:114;67384:97;;;;;;;;;;-1:-1:-1;67384:97:0;;;;;:::i;:::-;;:::i;73621:243::-;;;;;;;;;;-1:-1:-1;73621:243:0;;;;;:::i;:::-;;:::i;68094:115::-;;;;;;;;;;-1:-1:-1;68094:115:0;;;;;:::i;:::-;;:::i;63942:28::-;;;;;;;;;;-1:-1:-1;63942:28:0;;;;;;;;;;;61856:87;;;;;;;;;;-1:-1:-1;61902:7:0;61929:6;-1:-1:-1;;;;;61929:6:0;61856:87;;66203:100;;;;;;;;;;-1:-1:-1;66203:100:0;;;;;:::i;:::-;;:::i;65744:116::-;;;;;;;;;;-1:-1:-1;65744:116:0;;;;;:::i;:::-;;:::i;67039:114::-;;;;;;;;;;-1:-1:-1;67039:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;67128:19:0;67106:7;67128:19;;;:9;:19;;;;;;;67039:114;45091:104;;;;;;;;;;;;;:::i;63908:29::-;;;;;;;;;;-1:-1:-1;63908:29:0;;;;;;;;63634:28;;;;;;;;;;;;;;;;69586:617;;;;;;;;;;-1:-1:-1;69586:617:0;;;;;:::i;:::-;;:::i;66097:102::-;;;;;;;;;;-1:-1:-1;66097:102:0;;;;;:::i;:::-;;:::i;46702:287::-;;;;;;;;;;-1:-1:-1;46702:287:0;;;;;:::i;:::-;;:::i;67836:108::-;;;;;;;;;;-1:-1:-1;67836:108:0;;;;;:::i;:::-;;:::i;67180:99::-;;;;;;;;;;-1:-1:-1;67180:99:0;;;;;:::i;:::-;;:::i;47788:370::-;;;;;;;;;;-1:-1:-1;47788:370:0;;;;;:::i;:::-;;:::i;67973:117::-;;;;;;;;;;-1:-1:-1;67973:117:0;;;;;:::i;:::-;;:::i;67725:107::-;;;;;;;;;;-1:-1:-1;67725:107:0;;;;;:::i;:::-;;:::i;63506:27::-;;;;;;;;;;;;;;;;68970:344;;;;;;;;;;-1:-1:-1;68970:344:0;;;;;:::i;:::-;;:::i;64007:31::-;;;;;;;;;;-1:-1:-1;64007:31:0;;;;;;;;;;;68250:164;;;;;;;;;;-1:-1:-1;68250:164:0;;;;;:::i;:::-;;:::i;67619:102::-;;;;;;;;;;-1:-1:-1;67619:102:0;;;;;:::i;:::-;;:::i;70953:654::-;;;;;;:::i;:::-;;:::i;69369:195::-;;;;;;;;;;-1:-1:-1;69369:195:0;;;;;:::i;:::-;;:::i;63700:24::-;;;;;;;;;;;;;;;;66307:100;;;;;;;;;;-1:-1:-1;66307:100:0;;;;;:::i;:::-;;:::i;68703:128::-;;;;;;;;;;-1:-1:-1;68703:128:0;;;;;:::i;:::-;;:::i;64974:113::-;;;;;;;;;;;;;:::i;47060:164::-;;;;;;;;;;-1:-1:-1;47060:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;47181:25:0;;;47157:4;47181:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;47060:164;62762:201;;;;;;;;;;-1:-1:-1;62762:201:0;;;;;:::i;:::-;;:::i;63600:29::-;;;;;;;;;;;;;;;;64780:165;64883:4;64903:36;64927:11;64903:23;:36::i;:::-;64896:43;64780:165;-1:-1:-1;;64780:165:0:o;64605:154::-;61742:13;:11;:13::i;:::-;64709:44:::1;64728:9;64739:13;64709:18;:44::i;:::-;64605:154:::0;;:::o;44922:100::-;44976:13;45009:5;45002:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44922:100;:::o;46426:204::-;46494:7;46519:16;46527:7;46519;:16::i;:::-;46514:64;;46544:34;;-1:-1:-1;;;46544:34:0;;;;;;;;;;;46514:64;-1:-1:-1;46598:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;46598:24:0;;46426:204::o;45988:372::-;46061:13;46077:24;46093:7;46077:15;:24::i;:::-;46061:40;;46122:5;-1:-1:-1;;;;;46116:11:0;:2;-1:-1:-1;;;;;46116:11:0;;46112:48;;;46136:24;;-1:-1:-1;;;46136:24:0;;;;;;;;;;;46112:48;38824:10;-1:-1:-1;;;;;46177:21:0;;;46173:139;;46204:37;46221:5;38824:10;47060:164;:::i;46204:37::-;46200:112;;46265:35;;-1:-1:-1;;;46265:35:0;;;;;;;;;;;46200:112;46324:28;46333:2;46337:7;46346:5;46324:8;:28::i;:::-;46050:310;45988:372;;:::o;41047:312::-;41310:12;;64538:1;41294:13;:28;-1:-1:-1;;41294:46:0;;41047:312::o;47291:170::-;47425:28;47435:4;47441:2;47445:7;47425:9;:28::i;63820:38::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;66441:90::-;61742:13;:11;:13::i;:::-;66506:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;66506:19:0;;::::1;::::0;;;::::1;::::0;;66441:90::o;32809:442::-;32906:7;32964:27;;;:17;:27;;;;;;;;32935:56;;;;;;;;;-1:-1:-1;;;;;32935:56:0;;;;;-1:-1:-1;;;32935:56:0;;;-1:-1:-1;;;;;32935:56:0;;;;;;;;32906:7;;33004:92;;-1:-1:-1;33055:29:0;;;;;;;;;33065:19;33055:29;-1:-1:-1;;;;;33055:29:0;;;;-1:-1:-1;;;33055:29:0;;-1:-1:-1;;;;;33055:29:0;;;;;33004:92;33146:23;;;;33108:21;;33617:5;;33133:36;;-1:-1:-1;;;;;33133:36:0;:10;:36;:::i;:::-;33132:58;;;;:::i;:::-;33211:16;;;;;-1:-1:-1;32809:442:0;;-1:-1:-1;;;;32809:442:0:o;71633:550::-;37118:1;37716:7;;:19;;37708:63;;;;-1:-1:-1;;;37708:63:0;;;;;;;:::i;:::-;;;;;;;;;37118:1;37849:7;:18;71723:19:::1;::::0;;;::::1;;;71715:52;;;::::0;-1:-1:-1;;;71715:52:0;;16314:2:1;71715:52:0::1;::::0;::::1;16296:21:1::0;16353:2;16333:18;;;16326:30;-1:-1:-1;;;16372:18:1;;;16365:50;16432:18;;71715:52:0::1;16112:344:1::0;71715:52:0::1;71799:7;71782:13;;:24;;71774:74;;;::::0;-1:-1:-1;;;71774:74:0;;20002:2:1;71774:74:0::1;::::0;::::1;19984:21:1::0;20041:2;20021:18;;;20014:30;20080:34;20060:18;;;20053:62;-1:-1:-1;;;20131:18:1;;;20124:35;20176:19;;71774:74:0::1;19800:401:1::0;71774:74:0::1;71890:10;71880:21;::::0;;;:9:::1;:21;::::0;;;;;:31:::1;::::0;71904:7;;71880:31:::1;:::i;:::-;71863:13;;:48;;71855:88;;;::::0;-1:-1:-1;;;71855:88:0;;22568:2:1;71855:88:0::1;::::0;::::1;22550:21:1::0;22607:2;22587:18;;;22580:30;22646:29;22626:18;;;22619:57;22693:18;;71855:88:0::1;22366:351:1::0;71855:88:0::1;71985:7;71971:11;;:21;;;;:::i;:::-;71958:9;:34;71950:71;;;;-1:-1:-1::0;;;71950:71:0::1;;;;;;;:::i;:::-;72066:9;;72047:13;:11;:13::i;:::-;72037:23;::::0;:7;:23:::1;:::i;:::-;72036:40;;72028:65;;;;-1:-1:-1::0;;;72028:65:0::1;;;;;;;:::i;:::-;72118:10;72108:21;::::0;;;:9:::1;:21;::::0;;;;:32;;72133:7;;72108:21;:32:::1;::::0;72133:7;;72108:32:::1;:::i;:::-;::::0;;;-1:-1:-1;72147:30:0::1;::::0;-1:-1:-1;72157:10:0::1;72169:7:::0;72147:9:::1;:30::i;:::-;-1:-1:-1::0;37074:1:0;38028:7;:22;71633:550::o;15029:438::-;15179:36;;-1:-1:-1;;9766:2:1;9762:15;;;9758:53;15179:36:0;;;9746:66:1;9828:12;;;9821:28;;;15136:4:0;;;;9865:12:1;;15179:36:0;;;;;;;;;;;;15169:47;;;;;;15153:63;;15232:9;15227:192;15251:6;:13;15247:1;:17;15227:192;;;15302:6;15309:1;15302:9;;;;;;;;:::i;:::-;;;;;;;15294:5;:17;:113;;15389:6;15396:1;15389:9;;;;;;;;:::i;:::-;;;;;;;15400:5;15372:34;;;;;;;;10045:19:1;;;10089:2;10080:12;;10073:28;10126:2;10117:12;;9888:247;15372:34:0;;;;;;;;;;;;;15362:45;;;;;;15294:113;;;15341:5;15348:6;15355:1;15348:9;;;;;;;;:::i;:::-;;;;;;;15324:34;;;;;;;;10045:19:1;;;10089:2;10080:12;;10073:28;10126:2;10117:12;;9888:247;15324:34:0;;;;;;;;;;;;;15314:45;;;;;;15294:113;15286:121;-1:-1:-1;15266:3:0;;;;:::i;:::-;;;;15227:192;;;-1:-1:-1;15445:14:0;;15436:23;;15029:438;-1:-1:-1;;;;15029:438:0:o;72334:661::-;61742:13;:11;:13::i;:::-;37118:1:::1;37716:7;;:19;;37708:63;;;;-1:-1:-1::0;;;37708:63:0::1;;;;;;;:::i;:::-;37118:1;37849:7;:18:::0;72657:15:::2;::::0;72640:7:::2;::::0;-1:-1:-1;;;;;72657:15:0::2;:29:::0;72654:232:::2;;72738:15;::::0;72730:63:::2;::::0;-1:-1:-1;;;;;72738:15:0;;::::2;::::0;72767:21:::2;::::0;72730:63:::2;::::0;;;72767:21;72738:15;72730:63:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72721:72;;;;;72654:232;;;61902:7:::0;61929:6;-1:-1:-1;;;;;61929:6:0;-1:-1:-1;;;;;72823:21:0::2;72852;72823:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;72814:64:0;;-1:-1:-1;;72654:232:0::2;72900:2;72892:11;;;::::0;::::2;47532:185:::0;47670:39;47687:4;47693:2;47697:7;47670:39;;;;;;;;;;;;:16;:39::i;72199:81::-;72254:20;72260:7;72269:4;72254:5;:20::i;:::-;72199:81;:::o;73036:475::-;73108:16;73133:23;73159:19;73169:8;73159:9;:19::i;:::-;73133:45;;73185:25;73227:15;-1:-1:-1;;;;;73213:30:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73213:30:0;-1:-1:-1;73185:58:0;-1:-1:-1;73319:18:0;64538:1;73348:136;73386:13;;73382:1;:17;73348:136;;;73430:18;;-1:-1:-1;;;73430:18:0;;;;;25032:25:1;;;73430:4:0;;:15;;25005:18:1;;73430::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;73418:30:0;:8;-1:-1:-1;;;;;73418:30:0;;73415:61;;;73475:1;73450:8;73459:12;;;;:::i;:::-;;;73450:22;;;;;;;;:::i;:::-;;;;;;:26;;;;;73415:61;73401:3;;;;:::i;:::-;;;;73348:136;;;-1:-1:-1;73497:8:0;;73036:475;-1:-1:-1;;;;73036:475:0:o;68597:100::-;61742:13;:11;:13::i;:::-;68671:20;;::::1;::::0;:13:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;15604:407::-:0;15734:26;;-1:-1:-1;;9504:2:1;9500:15;;;9496:53;15734:26:0;;;9484:66:1;15691:4:0;;;;9566:12:1;;15734:26:0;;;;;;;;;;;;15724:37;;;;;;15708:53;;15777:9;15772:192;15796:6;:13;15792:1;:17;15772:192;;;15847:6;15854:1;15847:9;;;;;;;;:::i;:::-;;;;;;;15839:5;:17;:113;;15934:6;15941:1;15934:9;;;;;;;;:::i;:::-;;;;;;;15945:5;15917:34;;;;;;;;10045:19:1;;;10089:2;10080:12;;10073:28;10126:2;10117:12;;9888:247;15917:34:0;;;;;;;;;;;;;15907:45;;;;;;15839:113;;;15886:5;15893:6;15900:1;15893:9;;;;;;;;:::i;:::-;;;;;;;15869:34;;;;;;;;10045:19:1;;;10089:2;10080:12;;10073:28;10126:2;10117:12;;9888:247;15869:34:0;;;;;;;;;;;;;15859:45;;;;;;15839:113;15831:121;-1:-1:-1;15811:3:0;;;;:::i;:::-;;;;15772:192;;;-1:-1:-1;15990:13:0;;15981:22;;15604:407;-1:-1:-1;;;15604:407:0:o;44730:125::-;44794:7;44821:21;44834:7;44821:12;:21::i;:::-;:26;;44730:125;-1:-1:-1;;44730:125:0:o;65897:176::-;61742:13;:11;:13::i;:::-;65998:10:::1;65981:13;:11;:13::i;:::-;:27;;65973:65;;;::::0;-1:-1:-1;;;65973:65:0;;15960:2:1;65973:65:0::1;::::0;::::1;15942:21:1::0;15999:2;15979:18;;;15972:30;16038:27;16018:18;;;16011:55;16083:18;;65973:65:0::1;15758:349:1::0;65973:65:0::1;66045:9;:22:::0;65897:176::o;67511:104::-;61742:13;:11;:13::i;:::-;67584:17:::1;:25:::0;;-1:-1:-1;;67584:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;67511:104::o;42176:206::-;42240:7;-1:-1:-1;;;;;42264:19:0;;42260:60;;42292:28;;-1:-1:-1;;;42292:28:0;;;;;;;;;;;42260:60;-1:-1:-1;;;;;;42346:19:0;;;;;:12;:19;;;;;:27;-1:-1:-1;;;;;42346:27:0;;42176:206::o;62504:103::-;61742:13;:11;:13::i;:::-;62569:30:::1;62596:1;62569:18;:30::i;:::-;62504:103::o:0;67283:97::-;61742:13;:11;:13::i;:::-;67354::::1;:20:::0;67283:97::o;70224:709::-;37118:1;37716:7;;:19;;37708:63;;;;-1:-1:-1;;;37708:63:0;;;;;;;:::i;:::-;37118:1;37849:7;:18;70354:16:::1;::::0;::::1;::::0;::::1;;;70346:47;;;::::0;-1:-1:-1;;;70346:47:0;;19655:2:1;70346:47:0::1;::::0;::::1;19637:21:1::0;19694:2;19674:18;;;19667:30;-1:-1:-1;;;19713:18:1;;;19706:48;19771:18;;70346:47:0::1;19453:342:1::0;70346:47:0::1;70408:45;70424:10;70436:8;70446:6;70408:15;:45::i;:::-;70400:76;;;::::0;-1:-1:-1;;;70400:76:0;;20408:2:1;70400:76:0::1;::::0;::::1;20390:21:1::0;20447:2;20427:18;;;20420:30;-1:-1:-1;;;20466:18:1;;;20459:48;20524:18;;70400:76:0::1;20206:342:1::0;70400:76:0::1;70502:1;70491:8;:12;70483:41;;;::::0;-1:-1:-1;;;70483:41:0;;22924:2:1;70483:41:0::1;::::0;::::1;22906:21:1::0;22963:2;22943:18;;;22936:30;-1:-1:-1;;;22982:18:1;;;22975:46;23038:18;;70483:41:0::1;22722:340:1::0;70483:41:0::1;70557:7;70539:14;;:25;;70531:72;;;::::0;-1:-1:-1;;;70531:72:0;;19252:2:1;70531:72:0::1;::::0;::::1;19234:21:1::0;19291:2;19271:18;;;19264:30;19330:34;19310:18;;;19303:62;-1:-1:-1;;;19381:18:1;;;19374:32;19423:19;;70531:72:0::1;19050:398:1::0;70531:72:0::1;70647:10;70636:22;::::0;;;:10:::1;:22;::::0;;;;;:32:::1;::::0;70661:7;;70636:32:::1;:::i;:::-;70618:14;;:50;;70610:87;;;::::0;-1:-1:-1;;;70610:87:0;;21116:2:1;70610:87:0::1;::::0;::::1;21098:21:1::0;21155:2;21135:18;;;21128:30;21194:26;21174:18;;;21167:54;21238:18;;70610:87:0::1;20914:348:1::0;70610:87:0::1;70740:7;70725:12;;:22;;;;:::i;:::-;70712:9;:35;70704:72;;;;-1:-1:-1::0;;;70704:72:0::1;;;;;;;:::i;:::-;70821:9;;70802:13;:11;:13::i;:::-;70792:23;::::0;:7;:23:::1;:::i;:::-;70791:40;;70783:65;;;;-1:-1:-1::0;;;70783:65:0::1;;;;;;;:::i;:::-;70868:10;70857:22;::::0;;;:10:::1;:22;::::0;;;;:33;;70883:7;;70857:22;:33:::1;::::0;70883:7;;70857:33:::1;:::i;:::-;::::0;;;-1:-1:-1;70897:30:0::1;::::0;-1:-1:-1;70907:10:0::1;70919:7:::0;70897:9:::1;:30::i;:::-;-1:-1:-1::0;;37074:1:0;38028:7;:22;-1:-1:-1;70224:709:0:o;67384:97::-;61742:13;:11;:13::i;:::-;67455::::1;:20:::0;67384:97::o;73621:243::-;73710:21;;-1:-1:-1;;;73710:21:0;;;;;25032:25:1;;;73690:7:0;;73710:4;;:12;;25005:18:1;;73710:21:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;73710:21:0;;;;;;;;-1:-1:-1;;73710:21:0;;;;;;;;;;;;:::i;:::-;;;73706:153;;-1:-1:-1;73826:1:0;;73621:243;-1:-1:-1;73621:243:0:o;73706:153::-;73621:243;;;:::o;68094:115::-;61742:13;:11;:13::i;:::-;68174:29:::1;68191:11;15561:13:::0;:27;15486:110;66203:100;61742:13;:11;:13::i;:::-;66275:11:::1;:22:::0;66203:100::o;65744:116::-;61742:13;:11;:13::i;:::-;65821:15:::1;:33:::0;;-1:-1:-1;;;;;;65821:33:0::1;-1:-1:-1::0;;;;;65821:33:0;;;::::1;::::0;;;::::1;::::0;;65744:116::o;45091:104::-;45147:13;45180:7;45173:14;;;;;:::i;69586:617::-;37118:1;37716:7;;:19;;37708:63;;;;-1:-1:-1;;;37708:63:0;;;;;;;:::i;:::-;37118:1;37849:7;:18;69709:17:::1;::::0;::::1;;69701:49;;;::::0;-1:-1:-1;;;69701:49:0;;17789:2:1;69701:49:0::1;::::0;::::1;17771:21:1::0;17828:2;17808:18;;;17801:30;-1:-1:-1;;;17847:18:1;;;17840:49;17906:18;;69701:49:0::1;17587:343:1::0;69701:49:0::1;69765:45;69781:10;69793:8;69803:6;69765:15;:45::i;:::-;69757:76;;;::::0;-1:-1:-1;;;69757:76:0;;20408:2:1;69757:76:0::1;::::0;::::1;20390:21:1::0;20447:2;20427:18;;;20420:30;-1:-1:-1;;;20466:18:1;;;20459:48;20524:18;;69757:76:0::1;20206:342:1::0;69757:76:0::1;69859:1;69848:8;:12;69840:41;;;::::0;-1:-1:-1;;;69840:41:0;;22924:2:1;69840:41:0::1;::::0;::::1;22906:21:1::0;22963:2;22943:18;;;22936:30;-1:-1:-1;;;22982:18:1;;;22975:46;23038:18;;69840:41:0::1;22722:340:1::0;69840:41:0::1;69908:7;69896:8;:19;;69888:67;;;::::0;-1:-1:-1;;;69888:67:0;;22164:2:1;69888:67:0::1;::::0;::::1;22146:21:1::0;22203:2;22183:18;;;22176:30;22242:34;22222:18;;;22215:62;-1:-1:-1;;;22293:18:1;;;22286:33;22336:19;;69888:67:0::1;21962:399:1::0;69888:67:0::1;69994:10;69982:23;::::0;;;:11:::1;:23;::::0;;;;;:33:::1;::::0;70008:7;;69982:33:::1;:::i;:::-;69970:8;:45;;69962:83;;;::::0;-1:-1:-1;;;69962:83:0;;21469:2:1;69962:83:0::1;::::0;::::1;21451:21:1::0;21508:2;21488:18;;;21481:30;21547:27;21527:18;;;21520:55;21592:18;;69962:83:0::1;21267:349:1::0;69962:83:0::1;70090:9;;70071:13;:11;:13::i;:::-;70061:23;::::0;:7;:23:::1;:::i;:::-;70060:40;;70052:65;;;;-1:-1:-1::0;;;70052:65:0::1;;;;;;;:::i;:::-;70138:10;70126:23;::::0;;;:11:::1;:23;::::0;;;;:34;;70153:7;;70126:23;:34:::1;::::0;70153:7;;70126:34:::1;:::i;66097:102::-:0;61742:13;:11;:13::i;:::-;66170:12:::1;:23:::0;66097:102::o;46702:287::-;-1:-1:-1;;;;;46801:24:0;;38824:10;46801:24;46797:54;;;46834:17;;-1:-1:-1;;;46834:17:0;;;;;;;;;;;46797:54;38824:10;46864:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;46864:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;46864:53:0;;;;;;;;;;46933:48;;15121:41:1;;;46864:42:0;;38824:10;46933:48;;15094:18:1;46933:48:0;;;;;;;46702:287;;:::o;67836:108::-;61742:13;:11;:13::i;:::-;67911:19:::1;:27:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;67911:27:0;;::::1;::::0;;;::::1;::::0;;67836:108::o;67180:99::-;61742:13;:11;:13::i;:::-;67252:14:::1;:21:::0;67180:99::o;47788:370::-;47955:28;47965:4;47971:2;47975:7;47955:9;:28::i;:::-;-1:-1:-1;;;;;47998:13:0;;4134:19;:23;47994:157;;48019:56;48050:4;48056:2;48060:7;48069:5;48019:30;:56::i;:::-;48015:136;;48099:40;;-1:-1:-1;;;48099:40:0;;;;;;;;;;;48015:136;47788:370;;;;:::o;67973:117::-;61742:13;:11;:13::i;:::-;68054:30:::1;68072:11;14985:14:::0;:28;14909:112;67725:107;61742:13;:11;:13::i;:::-;67803:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;67803:23:0;;::::1;::::0;;;::::1;::::0;;67725:107::o;68970:344::-;69044:13;69074:17;69082:8;69074:7;:17::i;:::-;69066:61;;;;-1:-1:-1;;;69066:61:0;;17022:2:1;69066:61:0;;;17004:21:1;17061:2;17041:18;;;17034:30;17100:33;17080:18;;;17073:61;17151:18;;69066:61:0;16820:355:1;69066:61:0;69137:11;;;;;;;69134:74;;69175:11;69187:12;69198:1;69187:8;:12;:::i;:::-;69175:25;;;;;;;:::i;:::-;;69168:32;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68970:344;;;:::o;69134:74::-;69245:17;:15;:17::i;:::-;69264:26;69281:8;69264:16;:26::i;:::-;69292:14;69228:79;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69214:94;;68970:344;;;:::o;68250:164::-;61742:13;:11;:13::i;:::-;68357:1:::1;68349:5;:9;68341:35;;;::::0;-1:-1:-1;;;68341:35:0;;24746:2:1;68341:35:0::1;::::0;::::1;24728:21:1::0;24785:2;24765:18;;;24758:30;-1:-1:-1;;;24804:18:1;;;24797:43;24857:18;;68341:35:0::1;24544:337:1::0;68341:35:0::1;68404:4;68383:11;68395:5;68383:18;;;;;;;:::i;:::-;;:25;;;;;;;;;;;;:::i;67619:102::-:0;61742:13;:11;:13::i;:::-;67691:16:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;67691:24:0;;::::1;::::0;;;::::1;::::0;;67619:102::o;70953:654::-;37118:1;37716:7;;:19;;37708:63;;;;-1:-1:-1;;;37708:63:0;;;;;;;:::i;:::-;37118:1;37849:7;:18;71071:15:::1;::::0;;;::::1;;;71063:51;;;::::0;-1:-1:-1;;;71063:51:0;;24040:2:1;71063:51:0::1;::::0;::::1;24022:21:1::0;24079:2;24059:18;;;24052:30;24118:25;24098:18;;;24091:53;24161:18;;71063:51:0::1;23838:347:1::0;71063:51:0::1;71129:33;71143:10;71155:6;71129:13;:33::i;:::-;71121:70;;;::::0;-1:-1:-1;;;71121:70:0;;18546:2:1;71121:70:0::1;::::0;::::1;18528:21:1::0;18585:2;18565:18;;;18558:30;18624:26;18604:18;;;18597:54;18668:18;;71121:70:0::1;18344:348:1::0;71121:70:0::1;71223:7;71206:13;;:24;;71198:77;;;::::0;-1:-1:-1;;;71198:77:0;;18137:2:1;71198:77:0::1;::::0;::::1;18119:21:1::0;18176:2;18156:18;;;18149:30;18215:34;18195:18;;;18188:62;-1:-1:-1;;;18266:18:1;;;18259:38;18314:19;;71198:77:0::1;17935:404:1::0;71198:77:0::1;71317:10;71307:21;::::0;;;:9:::1;:21:::0;;;;;;:31:::1;::::0;71331:7;;71307:31:::1;:::i;:::-;71290:13;;:48;;71282:91;;;::::0;-1:-1:-1;;;71282:91:0;;16663:2:1;71282:91:0::1;::::0;::::1;16645:21:1::0;16702:2;16682:18;;;16675:30;16741:32;16721:18;;;16714:60;16791:18;;71282:91:0::1;16461:354:1::0;71282:91:0::1;71415:7;71401:11;;:21;;;;:::i;:::-;71388:9;:34;71380:71;;;;-1:-1:-1::0;;;71380:71:0::1;;;;;;;:::i;:::-;71496:9;;71477:13;:11;:13::i;:::-;71467:23;::::0;:7;:23:::1;:::i;:::-;71466:40;;71458:65;;;;-1:-1:-1::0;;;71458:65:0::1;;;;;;;:::i;:::-;71542:10;71532:21;::::0;;;:9:::1;:21:::0;;;;;:32;;71557:7;;71532:21;:32:::1;::::0;71557:7;;71532:32:::1;:::i;:::-;::::0;;;-1:-1:-1;71571:30:0::1;::::0;-1:-1:-1;71581:10:0::1;71593:7:::0;71571:9:::1;:30::i;:::-;-1:-1:-1::0;;37074:1:0;38028:7;:22;70953:654::o;69369:195::-;61742:13;:11;:13::i;:::-;69496:9:::1;;69477:13;:11;:13::i;:::-;69467:23;::::0;:7;:23:::1;:::i;:::-;69466:40;;69458:65;;;;-1:-1:-1::0;;;69458:65:0::1;;;;;;;:::i;:::-;69530:28;69540:8;69550:7;69530:9;:28::i;66307:100::-:0;61742:13;:11;:13::i;:::-;66379:11:::1;:22:::0;66307:100::o;68703:128::-;61742:13;:11;:13::i;:::-;68791:34;;::::1;::::0;:14:::1;::::0;:34:::1;::::0;::::1;::::0;::::1;:::i;64974:113::-:0;65028:13;65061:20;:18;:20::i;:::-;65054:27;;64974:113;:::o;62762:201::-;61742:13;:11;:13::i;:::-;-1:-1:-1;;;;;62851:22:0;::::1;62843:73;;;::::0;-1:-1:-1;;;62843:73:0;;17382:2:1;62843:73:0::1;::::0;::::1;17364:21:1::0;17421:2;17401:18;;;17394:30;17460:34;17440:18;;;17433:62;-1:-1:-1;;;17511:18:1;;;17504:36;17557:19;;62843:73:0::1;17180:402:1::0;62843:73:0::1;62927:28;62946:8;62927:18;:28::i;32539:215::-:0;32641:4;-1:-1:-1;;;;;;32665:41:0;;-1:-1:-1;;;32665:41:0;;:81;;;32710:36;32734:11;32710:23;:36::i;62021:132::-;61902:7;61929:6;-1:-1:-1;;;;;61929:6:0;38824:10;62085:23;62077:68;;;;-1:-1:-1;;;62077:68:0;;20755:2:1;62077:68:0;;;20737:21:1;;;20774:18;;;20767:30;20833:34;20813:18;;;20806:62;20885:18;;62077:68:0;20553:356:1;33901:332:0;33617:5;-1:-1:-1;;;;;34004:33:0;;;;33996:88;;;;-1:-1:-1;;;33996:88:0;;23269:2:1;33996:88:0;;;23251:21:1;23308:2;23288:18;;;23281:30;23347:34;23327:18;;;23320:62;-1:-1:-1;;;23398:18:1;;;23391:40;23448:19;;33996:88:0;23067:406:1;33996:88:0;-1:-1:-1;;;;;34103:22:0;;34095:60;;;;-1:-1:-1;;;34095:60:0;;24392:2:1;34095:60:0;;;24374:21:1;24431:2;24411:18;;;24404:30;24470:27;24450:18;;;24443:55;24515:18;;34095:60:0;24190:349:1;34095:60:0;34190:35;;;;;;;;;-1:-1:-1;;;;;34190:35:0;;;;;;-1:-1:-1;;;;;34190:35:0;;;;;;;;;;-1:-1:-1;;;34168:57:0;;;;:19;:57;33901:332::o;48413:174::-;48470:4;48513:7;64538:1;48494:26;;:53;;;;;48534:13;;48524:7;:23;48494:53;:85;;;;-1:-1:-1;;48552:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;48552:27:0;;;;48551:28;;48413:174::o;57635:196::-;57750:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;57750:29:0;-1:-1:-1;;;;;57750:29:0;;;;;;;;;57795:28;;57750:24;;57795:28;;;;;;;57635:196;;;:::o;52583:2130::-;52698:35;52736:21;52749:7;52736:12;:21::i;:::-;52698:59;;52796:4;-1:-1:-1;;;;;52774:26:0;:13;:18;;;-1:-1:-1;;;;;52774:26:0;;52770:67;;52809:28;;-1:-1:-1;;;52809:28:0;;;;;;;;;;;52770:67;52850:22;38824:10;-1:-1:-1;;;;;52876:20:0;;;;:73;;-1:-1:-1;52913:36:0;52930:4;38824:10;47060:164;:::i;52913:36::-;52876:126;;;-1:-1:-1;38824:10:0;52966:20;52978:7;52966:11;:20::i;:::-;-1:-1:-1;;;;;52966:36:0;;52876:126;52850:153;;53021:17;53016:66;;53047:35;;-1:-1:-1;;;53047:35:0;;;;;;;;;;;53016:66;-1:-1:-1;;;;;53097:16:0;;53093:52;;53122:23;;-1:-1:-1;;;53122:23:0;;;;;;;;;;;53093:52;53266:35;53283:1;53287:7;53296:4;53266:8;:35::i;:::-;-1:-1:-1;;;;;53597:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;53597:31:0;;;-1:-1:-1;;;;;53597:31:0;;;-1:-1:-1;;53597:31:0;;;;;;;53643:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;53643:29:0;;;;;;;;;;;53723:20;;;:11;:20;;;;;;53758:18;;-1:-1:-1;;;;;;53791:49:0;;;;-1:-1:-1;;;53824:15:0;53791:49;;;;;;;;;;54114:11;;54174:24;;;;;54217:13;;53723:20;;54174:24;;54217:13;54213:384;;54427:13;;54412:11;:28;54408:174;;54465:20;;54534:28;;;;-1:-1:-1;;;;;54508:54:0;-1:-1:-1;;;54508:54:0;-1:-1:-1;;;;;;54508:54:0;;;-1:-1:-1;;;;;54465:20:0;;54508:54;;;;54408:174;53572:1036;;;54644:7;54640:2;-1:-1:-1;;;;;54625:27:0;54634:4;-1:-1:-1;;;;;54625:27:0;-1:-1:-1;;;;;;;;;;;54625:27:0;;;;;;;;;52687:2026;;52583:2130;;;:::o;48671:104::-;48740:27;48750:2;48754:8;48740:27;;;;;;;;;;;;:9;:27::i;55109:2408::-;55189:35;55227:21;55240:7;55227:12;:21::i;:::-;55276:18;;55189:59;;-1:-1:-1;55307:290:0;;;;55341:22;38824:10;-1:-1:-1;;;;;55367:20:0;;;;:77;;-1:-1:-1;55408:36:0;55425:4;38824:10;47060:164;:::i;55408:36::-;55367:134;;;-1:-1:-1;38824:10:0;55465:20;55477:7;55465:11;:20::i;:::-;-1:-1:-1;;;;;55465:36:0;;55367:134;55341:161;;55524:17;55519:66;;55550:35;;-1:-1:-1;;;55550:35:0;;;;;;;;;;;55519:66;55326:271;55307:290;55725:35;55742:1;55746:7;55755:4;55725:8;:35::i;:::-;-1:-1:-1;;;;;56090:18:0;;;56056:31;56090:18;;;:12;:18;;;;;;;;56123:24;;-1:-1:-1;;;;;;;;;;56123:24:0;;;;;;;;;-1:-1:-1;;56123:24:0;;;;56162:29;;;;;56146:1;56162:29;;;;;;;;-1:-1:-1;;56162:29:0;;;;;;;;;;56324:20;;;:11;:20;;;;;;56359;;-1:-1:-1;;;;56427:15:0;56394:49;;;-1:-1:-1;;;56394:49:0;-1:-1:-1;;;;;;56394:49:0;;;;;;;;;;56458:22;-1:-1:-1;;;56458:22:0;;;56750:11;;;56810:24;;;;;56853:13;;56090:18;;56810:24;;56853:13;56849:384;;57063:13;;57048:11;:28;57044:174;;57101:20;;57170:28;;;;-1:-1:-1;;;;;57144:54:0;-1:-1:-1;;;57144:54:0;-1:-1:-1;;;;;;57144:54:0;;;-1:-1:-1;;;;;57101:20:0;;57144:54;;;;57044:174;-1:-1:-1;;57261:35:0;;57288:7;;-1:-1:-1;57284:1:0;;-1:-1:-1;;;;;;57261:35:0;;;-1:-1:-1;;;;;;;;;;;57261:35:0;57284:1;;57261:35;-1:-1:-1;;57484:12:0;:14;;;;;;-1:-1:-1;;55109:2408:0:o;43557:1111::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;43668:7:0;;64538:1;43717:23;43713:888;;43753:13;;43746:4;:20;43742:859;;;43787:31;43821:17;;;:11;:17;;;;;;;;;43787:51;;;;;;;;;-1:-1:-1;;;;;43787:51:0;;;;-1:-1:-1;;;43787:51:0;;-1:-1:-1;;;;;43787:51:0;;;;;;;;-1:-1:-1;;;43787:51:0;;;;;;;;;;;;;;43857:729;;43907:14;;-1:-1:-1;;;;;43907:28:0;;43903:101;;43971:9;43557:1111;-1:-1:-1;;;43557:1111:0:o;43903:101::-;-1:-1:-1;;;44346:6:0;44391:17;;;;:11;:17;;;;;;;;;44379:29;;;;;;;;;-1:-1:-1;;;;;44379:29:0;;;;;-1:-1:-1;;;44379:29:0;;-1:-1:-1;;;;;44379:29:0;;;;;;;;-1:-1:-1;;;44379:29:0;;;;;;;;;;;;;44439:28;44435:109;;44507:9;43557:1111;-1:-1:-1;;;43557:1111:0:o;44435:109::-;44306:261;;;43768:833;43742:859;44629:31;;-1:-1:-1;;;44629:31:0;;;;;;;;;;;63123:191;63197:16;63216:6;;-1:-1:-1;;;;;63233:17:0;;;-1:-1:-1;;;;;;63233:17:0;;;;;;63266:40;;63216:6;;;;;;;63266:40;;63197:16;63266:40;63186:128;63123:191;:::o;58323:667::-;58507:72;;-1:-1:-1;;;58507:72:0;;58486:4;;-1:-1:-1;;;;;58507:36:0;;;;;:72;;38824:10;;58558:4;;58564:7;;58573:5;;58507:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58507:72:0;;;;;;;;-1:-1:-1;;58507:72:0;;;;;;;;;;;;:::i;:::-;;;58503:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;58741:13:0;;58737:235;;58787:40;;-1:-1:-1;;;58787:40:0;;;;;;;;;;;58737:235;58930:6;58924:13;58915:6;58911:2;58907:15;58900:38;58503:480;-1:-1:-1;;;;;;58626:55:0;-1:-1:-1;;;58626:55:0;;-1:-1:-1;58503:480:0;58323:667;;;;;;:::o;68867:97::-;68917:13;68945;68938:20;;;;;:::i;12643:723::-;12699:13;12920:10;12916:53;;-1:-1:-1;;12947:10:0;;;;;;;;;;;;-1:-1:-1;;;12947:10:0;;;;;12643:723::o;12916:53::-;12994:5;12979:12;13035:78;13042:9;;13035:78;;13068:8;;;;:::i;:::-;;-1:-1:-1;13091:10:0;;-1:-1:-1;13099:2:0;13091:10;;:::i;:::-;;;13035:78;;;13123:19;13155:6;-1:-1:-1;;;;;13145:17:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13145:17:0;;13123:39;;13173:154;13180:10;;13173:154;;13207:11;13217:1;13207:11;;:::i;:::-;;-1:-1:-1;13276:10:0;13284:2;13276:5;:10;:::i;:::-;13263:24;;:2;:24;:::i;:::-;13250:39;;13233:6;13240;13233:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;13233:56:0;;;;;;;;-1:-1:-1;13304:11:0;13313:2;13304:11;;:::i;:::-;;;13173:154;;65113:567;65166:13;65189:16;;65234:32;65189:16;33617:5;65234:11;:32::i;:::-;65188:78;;;;65375:283;65487:33;65504:15;65487:16;:33::i;:::-;65562:51;65598:8;-1:-1:-1;;;;;65582:26:0;65610:2;65562:19;:51::i;:::-;65421:213;;;;;;;;;:::i;:::-;;;;;;;;;;;;;65375:13;:283::i;:::-;65306:361;;;;;;;;:::i;:::-;;;;;;;;;;;;;65284:390;;;;65113:567;:::o;41807:305::-;41909:4;-1:-1:-1;;;;;;41946:40:0;;-1:-1:-1;;;41946:40:0;;:105;;-1:-1:-1;;;;;;;42003:48:0;;-1:-1:-1;;;42003:48:0;41946:105;:158;;;-1:-1:-1;;;;;;;;;;30200:40:0;;;42068:36;30091:157;49148:1749;49294:13;;-1:-1:-1;;;;;49322:16:0;;49318:48;;49347:19;;-1:-1:-1;;;49347:19:0;;;;;;;;;;;49318:48;49381:13;49377:44;;49403:18;;-1:-1:-1;;;49403:18:0;;;;;;;;;;;49377:44;-1:-1:-1;;;;;49772:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;49831:49:0;;-1:-1:-1;;;;;49772:44:0;;;;;;;49831:49;;;;-1:-1:-1;;49772:44:0;;;;;;49831:49;;;;;;;;;;;;;;;;49897:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;49947:66:0;;;-1:-1:-1;;;49997:15:0;49947:66;;;;;;;;;;;;;49897:25;;50094:23;;;;4134:19;:23;50134:631;;50174:313;50205:38;;50230:12;;-1:-1:-1;;;;;50205:38:0;;;50222:1;;-1:-1:-1;;;;;;;;;;;50205:38:0;50222:1;;50205:38;50271:69;50310:1;50314:2;50318:14;;;;;;50334:5;50271:30;:69::i;:::-;50266:174;;50376:40;;-1:-1:-1;;;50376:40:0;;;;;;;;;;;50266:174;50482:3;50467:12;:18;50174:313;;50568:12;50551:13;;:29;50547:43;;50582:8;;;50547:43;50134:631;;;50631:119;50662:40;;50687:14;;;;;-1:-1:-1;;;;;50662:40:0;;;50679:1;;-1:-1:-1;;;;;;;;;;;50662:40:0;50679:1;;50662:40;50745:3;50730:12;:18;50631:119;;50134:631;-1:-1:-1;50779:13:0;:28;50829:60;50858:1;50862:2;50866:12;50880:8;50829:60;:::i;13944:451::-;14019:13;14045:19;14077:10;14081:6;14077:1;:10;:::i;:::-;:14;;14090:1;14077:14;:::i;:::-;-1:-1:-1;;;;;14067:25:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14067:25:0;;14045:47;;-1:-1:-1;;;14103:6:0;14110:1;14103:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;14103:15:0;;;;;;;;;-1:-1:-1;;;14129:6:0;14136:1;14129:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;14129:15:0;;;;;;;;-1:-1:-1;14160:9:0;14172:10;14176:6;14172:1;:10;:::i;:::-;:14;;14185:1;14172:14;:::i;:::-;14160:26;;14155:135;14192:1;14188;:5;14155:135;;;-1:-1:-1;;;14240:5:0;14248:3;14240:11;14227:25;;;;;;;:::i;:::-;;;;14215:6;14222:1;14215:9;;;;;;;;:::i;:::-;;;;:37;-1:-1:-1;;;;;14215:37:0;;;;;;;;-1:-1:-1;14277:1:0;14267:11;;;;;14195:3;;;:::i;:::-;;;14155:135;;;-1:-1:-1;14308:10:0;;14300:55;;;;-1:-1:-1;;;14300:55:0;;15599:2:1;14300:55:0;;;15581:21:1;;;15618:18;;;15611:30;15677:34;15657:18;;;15650:62;15729:18;;14300:55:0;15397:356:1;14300:55:0;14380:6;13944:451;-1:-1:-1;;;13944:451:0:o;16562:3097::-;16620:13;16857:4;:11;16872:1;16857:16;16853:31;;;-1:-1:-1;;16875:9:0;;;;;;;;;-1:-1:-1;16875:9:0;;;16562:3097::o;16853:31::-;16937:19;16959:6;;;;;;;;;;;;;;;;;16937:28;;17376:20;17435:1;17416:4;:11;17430:1;17416:15;;;;:::i;:::-;17415:21;;;;:::i;:::-;17410:27;;:1;:27;:::i;:::-;-1:-1:-1;;;;;17399:39:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17399:39:0;;17376:62;;17618:1;17611:5;17607:13;17722:2;17714:6;17710:15;17833:4;17885;17879:11;17873:4;17869:22;17795:1432;17919:6;17910:7;17907:19;17795:1432;;;18025:1;18016:7;18012:15;18001:26;;18064:7;18058:14;18717:4;18709:5;18705:2;18701:14;18697:25;18687:8;18683:40;18677:47;18666:9;18658:67;18771:1;18760:9;18756:17;18743:30;;18863:4;18855:5;18851:2;18847:14;18843:25;18833:8;18829:40;18823:47;18812:9;18804:67;18917:1;18906:9;18902:17;18889:30;;19008:4;19000:5;18997:1;18993:13;18989:24;18979:8;18975:39;18969:46;18958:9;18950:66;19062:1;19051:9;19047:17;19034:30;;19145:4;19138:5;19134:16;19124:8;19120:31;19114:38;19103:9;19095:58;;19199:1;19188:9;19184:17;19171:30;;17795:1432;;;17799:107;;19389:1;19382:4;19376:11;19372:19;19410:1;19405:123;;;;19547:1;19542:73;;;;19365:250;;19405:123;19458:4;19454:1;19443:9;19439:17;19431:32;19508:4;19504:1;19493:9;19489:17;19481:32;19405:123;;19542:73;19595:4;19591:1;19580:9;19576:17;19568:32;19365:250;-1:-1:-1;19645:6:0;;16562:3097;-1:-1:-1;;;;;16562:3097:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;-1:-1:-1;;;;;104:6:1;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:723::-;479:5;532:3;525:4;517:6;513:17;509:27;499:55;;550:1;547;540:12;499:55;586:6;573:20;612:4;-1:-1:-1;;;;;631:2:1;628:26;625:52;;;657:18;;:::i;:::-;703:2;700:1;696:10;726:28;750:2;746;742:11;726:28;:::i;:::-;788:15;;;819:12;;;;851:15;;;885;;;881:24;;878:33;-1:-1:-1;875:53:1;;;924:1;921;914:12;875:53;946:1;937:10;;956:163;970:2;967:1;964:9;956:163;;;1027:17;;1015:30;;988:1;981:9;;;;;1065:12;;;;1097;;956:163;;;-1:-1:-1;1137:5:1;425:723;-1:-1:-1;;;;;;;425:723:1:o;1153:160::-;1218:20;;1274:13;;1267:21;1257:32;;1247:60;;1303:1;1300;1293:12;1318:221;1361:5;1414:3;1407:4;1399:6;1395:17;1391:27;1381:55;;1432:1;1429;1422:12;1381:55;1454:79;1529:3;1520:6;1507:20;1500:4;1492:6;1488:17;1454:79;:::i;1544:247::-;1603:6;1656:2;1644:9;1635:7;1631:23;1627:32;1624:52;;;1672:1;1669;1662:12;1624:52;1711:9;1698:23;1730:31;1755:5;1730:31;:::i;1796:251::-;1866:6;1919:2;1907:9;1898:7;1894:23;1890:32;1887:52;;;1935:1;1932;1925:12;1887:52;1967:9;1961:16;1986:31;2011:5;1986:31;:::i;2052:388::-;2120:6;2128;2181:2;2169:9;2160:7;2156:23;2152:32;2149:52;;;2197:1;2194;2187:12;2149:52;2236:9;2223:23;2255:31;2280:5;2255:31;:::i;:::-;2305:5;-1:-1:-1;2362:2:1;2347:18;;2334:32;2375:33;2334:32;2375:33;:::i;:::-;2427:7;2417:17;;;2052:388;;;;;:::o;2445:456::-;2522:6;2530;2538;2591:2;2579:9;2570:7;2566:23;2562:32;2559:52;;;2607:1;2604;2597:12;2559:52;2646:9;2633:23;2665:31;2690:5;2665:31;:::i;:::-;2715:5;-1:-1:-1;2772:2:1;2757:18;;2744:32;2785:33;2744:32;2785:33;:::i;:::-;2445:456;;2837:7;;-1:-1:-1;;;2891:2:1;2876:18;;;;2863:32;;2445:456::o;2906:794::-;3001:6;3009;3017;3025;3078:3;3066:9;3057:7;3053:23;3049:33;3046:53;;;3095:1;3092;3085:12;3046:53;3134:9;3121:23;3153:31;3178:5;3153:31;:::i;:::-;3203:5;-1:-1:-1;3260:2:1;3245:18;;3232:32;3273:33;3232:32;3273:33;:::i;:::-;3325:7;-1:-1:-1;3379:2:1;3364:18;;3351:32;;-1:-1:-1;3434:2:1;3419:18;;3406:32;-1:-1:-1;;;;;3450:30:1;;3447:50;;;3493:1;3490;3483:12;3447:50;3516:22;;3569:4;3561:13;;3557:27;-1:-1:-1;3547:55:1;;3598:1;3595;3588:12;3547:55;3621:73;3686:7;3681:2;3668:16;3663:2;3659;3655:11;3621:73;:::i;:::-;3611:83;;;2906:794;;;;;;;:::o;3705:483::-;3798:6;3806;3859:2;3847:9;3838:7;3834:23;3830:32;3827:52;;;3875:1;3872;3865:12;3827:52;3914:9;3901:23;3933:31;3958:5;3933:31;:::i;:::-;3983:5;-1:-1:-1;4039:2:1;4024:18;;4011:32;-1:-1:-1;;;;;4055:30:1;;4052:50;;;4098:1;4095;4088:12;4052:50;4121:61;4174:7;4165:6;4154:9;4150:22;4121:61;:::i;:::-;4111:71;;;3705:483;;;;;:::o;4193:315::-;4258:6;4266;4319:2;4307:9;4298:7;4294:23;4290:32;4287:52;;;4335:1;4332;4325:12;4287:52;4374:9;4361:23;4393:31;4418:5;4393:31;:::i;:::-;4443:5;-1:-1:-1;4467:35:1;4498:2;4483:18;;4467:35;:::i;:::-;4457:45;;4193:315;;;;;:::o;4513:::-;4581:6;4589;4642:2;4630:9;4621:7;4617:23;4613:32;4610:52;;;4658:1;4655;4648:12;4610:52;4697:9;4684:23;4716:31;4741:5;4716:31;:::i;:::-;4766:5;4818:2;4803:18;;;;4790:32;;-1:-1:-1;;;4513:315:1:o;4833:551::-;4935:6;4943;4951;5004:2;4992:9;4983:7;4979:23;4975:32;4972:52;;;5020:1;5017;5010:12;4972:52;5059:9;5046:23;5078:31;5103:5;5078:31;:::i;:::-;5128:5;-1:-1:-1;5180:2:1;5165:18;;5152:32;;-1:-1:-1;5235:2:1;5220:18;;5207:32;-1:-1:-1;;;;;5251:30:1;;5248:50;;;5294:1;5291;5284:12;5248:50;5317:61;5370:7;5361:6;5350:9;5346:22;5317:61;:::i;:::-;5307:71;;;4833:551;;;;;:::o;5389:435::-;5456:6;5464;5517:2;5505:9;5496:7;5492:23;5488:32;5485:52;;;5533:1;5530;5523:12;5485:52;5572:9;5559:23;5591:31;5616:5;5591:31;:::i;:::-;5641:5;-1:-1:-1;5698:2:1;5683:18;;5670:32;-1:-1:-1;;;;;5733:40:1;;5721:53;;5711:81;;5788:1;5785;5778:12;5829:180;5885:6;5938:2;5926:9;5917:7;5913:23;5909:32;5906:52;;;5954:1;5951;5944:12;5906:52;5977:26;5993:9;5977:26;:::i;6014:180::-;6073:6;6126:2;6114:9;6105:7;6101:23;6097:32;6094:52;;;6142:1;6139;6132:12;6094:52;-1:-1:-1;6165:23:1;;6014:180;-1:-1:-1;6014:180:1:o;6199:245::-;6257:6;6310:2;6298:9;6289:7;6285:23;6281:32;6278:52;;;6326:1;6323;6316:12;6278:52;6365:9;6352:23;6384:30;6408:5;6384:30;:::i;6449:249::-;6518:6;6571:2;6559:9;6550:7;6546:23;6542:32;6539:52;;;6587:1;6584;6577:12;6539:52;6619:9;6613:16;6638:30;6662:5;6638:30;:::i;6703:322::-;6772:6;6825:2;6813:9;6804:7;6800:23;6796:32;6793:52;;;6841:1;6838;6831:12;6793:52;6881:9;6868:23;-1:-1:-1;;;;;6906:6:1;6903:30;6900:50;;;6946:1;6943;6936:12;6900:50;6969;7011:7;7002:6;6991:9;6987:22;6969:50;:::i;7215:315::-;7283:6;7291;7344:2;7332:9;7323:7;7319:23;7315:32;7312:52;;;7360:1;7357;7350:12;7312:52;7396:9;7383:23;7373:33;;7456:2;7445:9;7441:18;7428:32;7469:31;7494:5;7469:31;:::i;7535:416::-;7628:6;7636;7689:2;7677:9;7668:7;7664:23;7660:32;7657:52;;;7705:1;7702;7695:12;7657:52;7741:9;7728:23;7718:33;;7802:2;7791:9;7787:18;7774:32;-1:-1:-1;;;;;7821:6:1;7818:30;7815:50;;;7861:1;7858;7851:12;7956:390;8034:6;8042;8095:2;8083:9;8074:7;8070:23;8066:32;8063:52;;;8111:1;8108;8101:12;8063:52;8147:9;8134:23;8124:33;;8208:2;8197:9;8193:18;8180:32;-1:-1:-1;;;;;8227:6:1;8224:30;8221:50;;;8267:1;8264;8257:12;8221:50;8290;8332:7;8323:6;8312:9;8308:22;8290:50;:::i;8351:248::-;8419:6;8427;8480:2;8468:9;8459:7;8455:23;8451:32;8448:52;;;8496:1;8493;8486:12;8448:52;-1:-1:-1;;8519:23:1;;;8589:2;8574:18;;;8561:32;;-1:-1:-1;8351:248:1:o;8604:484::-;8706:6;8714;8722;8775:2;8763:9;8754:7;8750:23;8746:32;8743:52;;;8791:1;8788;8781:12;8743:52;8827:9;8814:23;8804:33;;8884:2;8873:9;8869:18;8856:32;8846:42;;8939:2;8928:9;8924:18;8911:32;-1:-1:-1;;;;;8958:6:1;8955:30;8952:50;;;8998:1;8995;8988:12;9093:257;9134:3;9172:5;9166:12;9199:6;9194:3;9187:19;9215:63;9271:6;9264:4;9259:3;9255:14;9248:4;9241:5;9237:16;9215:63;:::i;:::-;9332:2;9311:15;-1:-1:-1;;9307:29:1;9298:39;;;;9339:4;9294:50;;9093:257;-1:-1:-1;;9093:257:1:o;10140:1527::-;10364:3;10402:6;10396:13;10428:4;10441:51;10485:6;10480:3;10475:2;10467:6;10463:15;10441:51;:::i;:::-;10555:13;;10514:16;;;;10577:55;10555:13;10514:16;10599:15;;;10577:55;:::i;:::-;10721:13;;10654:20;;;10694:1;;10781;10803:18;;;;10856;;;;10883:93;;10961:4;10951:8;10947:19;10935:31;;10883:93;11024:2;11014:8;11011:16;10991:18;10988:40;10985:167;;;-1:-1:-1;;;11051:33:1;;11107:4;11104:1;11097:15;11137:4;11058:3;11125:17;10985:167;11168:18;11195:110;;;;11319:1;11314:328;;;;11161:481;;11195:110;-1:-1:-1;;11230:24:1;;11216:39;;11275:20;;;;-1:-1:-1;11195:110:1;;11314:328;25421:1;25414:14;;;25458:4;25445:18;;11409:1;11423:169;11437:8;11434:1;11431:15;11423:169;;;11519:14;;11504:13;;;11497:37;11562:16;;;;11454:10;;11423:169;;;11427:3;;11623:8;11616:5;11612:20;11605:27;;11161:481;-1:-1:-1;11658:3:1;;10140:1527;-1:-1:-1;;;;;;;;;;;10140:1527:1:o;11672:1024::-;12184:66;12179:3;12172:79;12154:3;12280:6;12274:13;12296:62;12351:6;12346:2;12341:3;12337:12;12330:4;12322:6;12318:17;12296:62;:::i;:::-;-1:-1:-1;;;12417:2:1;12377:16;;;12409:11;;;12402:71;12498:13;;12520:63;12498:13;12569:2;12561:11;;12554:4;12542:17;;12520:63;:::i;:::-;-1:-1:-1;;;12643:2:1;12602:17;;;;12635:11;;;12628:35;12687:2;12679:11;;11672:1024;-1:-1:-1;;;;11672:1024:1:o;12701:448::-;12963:31;12958:3;12951:44;12933:3;13024:6;13018:13;13040:62;13095:6;13090:2;13085:3;13081:12;13074:4;13066:6;13062:17;13040:62;:::i;:::-;13122:16;;;;13140:2;13118:25;;12701:448;-1:-1:-1;;12701:448:1:o;13572:488::-;-1:-1:-1;;;;;13841:15:1;;;13823:34;;13893:15;;13888:2;13873:18;;13866:43;13940:2;13925:18;;13918:34;;;13988:3;13983:2;13968:18;;13961:31;;;13766:4;;14009:45;;14034:19;;14026:6;14009:45;:::i;:::-;14001:53;13572:488;-1:-1:-1;;;;;;13572:488:1:o;14344:632::-;14515:2;14567:21;;;14637:13;;14540:18;;;14659:22;;;14486:4;;14515:2;14738:15;;;;14712:2;14697:18;;;14486:4;14781:169;14795:6;14792:1;14789:13;14781:169;;;14856:13;;14844:26;;14925:15;;;;14890:12;;;;14817:1;14810:9;14781:169;;;-1:-1:-1;14967:3:1;;14344:632;-1:-1:-1;;;;;;14344:632:1:o;15173:219::-;15322:2;15311:9;15304:21;15285:4;15342:44;15382:2;15371:9;15367:18;15359:6;15342:44;:::i;18697:348::-;18899:2;18881:21;;;18938:2;18918:18;;;18911:30;18977:26;18972:2;18957:18;;18950:54;19036:2;19021:18;;18697:348::o;21621:336::-;21823:2;21805:21;;;21862:2;21842:18;;;21835:30;-1:-1:-1;;;21896:2:1;21881:18;;21874:42;21948:2;21933:18;;21621:336::o;23478:355::-;23680:2;23662:21;;;23719:2;23699:18;;;23692:30;23758:33;23753:2;23738:18;;23731:61;23824:2;23809:18;;23478:355::o;25068:275::-;25139:2;25133:9;25204:2;25185:13;;-1:-1:-1;;25181:27:1;25169:40;;-1:-1:-1;;;;;25224:34:1;;25260:22;;;25221:62;25218:88;;;25286:18;;:::i;:::-;25322:2;25315:22;25068:275;;-1:-1:-1;25068:275:1:o;25474:128::-;25514:3;25545:1;25541:6;25538:1;25535:13;25532:39;;;25551:18;;:::i;:::-;-1:-1:-1;25587:9:1;;25474:128::o;25607:120::-;25647:1;25673;25663:35;;25678:18;;:::i;:::-;-1:-1:-1;25712:9:1;;25607:120::o;25732:168::-;25772:7;25838:1;25834;25830:6;25826:14;25823:1;25820:21;25815:1;25808:9;25801:17;25797:45;25794:71;;;25845:18;;:::i;:::-;-1:-1:-1;25885:9:1;;25732:168::o;25905:125::-;25945:4;25973:1;25970;25967:8;25964:34;;;25978:18;;:::i;:::-;-1:-1:-1;26015:9:1;;25905:125::o;26035:258::-;26107:1;26117:113;26131:6;26128:1;26125:13;26117:113;;;26207:11;;;26201:18;26188:11;;;26181:39;26153:2;26146:10;26117:113;;;26248:6;26245:1;26242:13;26239:48;;;-1:-1:-1;;26283:1:1;26265:16;;26258:27;26035:258::o;26298:136::-;26337:3;26365:5;26355:39;;26374:18;;:::i;:::-;-1:-1:-1;;;26410:18:1;;26298:136::o;26439:380::-;26518:1;26514:12;;;;26561;;;26582:61;;26636:4;26628:6;26624:17;26614:27;;26582:61;26689:2;26681:6;26678:14;26658:18;26655:38;26652:161;;;26735:10;26730:3;26726:20;26723:1;26716:31;26770:4;26767:1;26760:15;26798:4;26795:1;26788:15;26652:161;;26439:380;;;:::o;26824:135::-;26863:3;-1:-1:-1;;26884:17:1;;26881:43;;;26904:18;;:::i;:::-;-1:-1:-1;26951:1:1;26940:13;;26824:135::o;26964:112::-;26996:1;27022;27012:35;;27027:18;;:::i;:::-;-1:-1:-1;27061:9:1;;26964:112::o;27081:127::-;27142:10;27137:3;27133:20;27130:1;27123:31;27173:4;27170:1;27163:15;27197:4;27194:1;27187:15;27213:127;27274:10;27269:3;27265:20;27262:1;27255:31;27305:4;27302:1;27295:15;27329:4;27326:1;27319:15;27345:127;27406:10;27401:3;27397:20;27394:1;27387:31;27437:4;27434:1;27427:15;27461:4;27458:1;27451:15;27477:127;27538:10;27533:3;27529:20;27526:1;27519:31;27569:4;27566:1;27559:15;27593:4;27590:1;27583:15;27609:131;-1:-1:-1;;;;;27684:31:1;;27674:42;;27664:70;;27730:1;27727;27720:12;27745:131;-1:-1:-1;;;;;;27819:32:1;;27809:43;;27799:71;;27866:1;27863;27856:12

Swarm Source

ipfs://5c0c4ba9e185ce5c3dc2447b8df1ad2311b544190ce4e6f3fd53992ad2151fdd
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.