ETH Price: $3,633.84 (+8.05%)

Token

Superlative Apes (SLAPE)
 

Overview

Max Total Supply

0 SLAPE

Holders

2,220

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SLAPE
0x537229bc8d4905a6695310b080fb9171a059d15b
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

The Superlative Apes is a collection of 4,444 derivative Superlative Apes NFTs— unique digital and colorful collectibles living on the Ethereum blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SUPERLATIVEAPES

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-13
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Counters.sol


// OpenZeppelin Contracts v4.4.0 (utils/Counters.sol)

pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.0 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Address.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.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 `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.0 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.0 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/IERC721.sol


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

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

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

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

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

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

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

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.0 (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: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

// File: contracts/slape.sol

pragma solidity ^0.8.0;



/// SPDX-License-Identifier: UNLICENSED


/*
  ______                                 __          _    _                       _                             
.' ____ \                               [  |        / |_ (_)                     / \                            
| (___ \_|__   _  _ .--.   .---.  _ .--. | |  ,--. `| |-'__  _   __  .---.      / _ \    _ .--.   .---.  .--.   
 _.____`.[  | | |[ '/'`\ \/ /__\\[ `/'`\]| | `'_\ : | | [  |[ \ [  ]/ /__\\    / ___ \  [ '/'`\ \/ /__\\( (`\]  
| \____) || \_/ |,| \__/ || \__., | |    | | // | |,| |, | | \ \/ / | \__.,  _/ /   \ \_ | \__/ || \__., `'.'.  
 \______.''.__.'_/| ;.__/  '.__.'[___]  [___]\'-;__/\__/[___] \__/   '.__.' |____| |____|| ;.__/  '.__.'[\__) ) 
                 [__|                                                                   [__|                        
*/


contract SUPERLATIVEAPES is ERC721, Ownable {
   
    using Strings for uint256;
    using Counters for Counters.Counter;

    string public baseURI;
    string public baseExtension = ".json";


    uint256 public maxTx = 5;
    uint256 public maxPreTx = 2;
    uint256 public maxSupply = 4444;
    uint256 public presaleSupply = 2400;
    uint256 public price = 0.069 ether;
   
   
    //December 16th 3AM GMT
    uint256 public presaleTime = 1639623600;
    //December 16th 11PM GMT 
    uint256 public presaleClose = 1639695600;

    //December 17th 3AM GMT
    uint256 public mainsaleTime = 1639710000;
   
    Counters.Counter private _tokenIdTracker;

    mapping (address => bool) public presaleWallets;
    mapping (address => uint256) public presaleWalletLimits;
    mapping (address => uint256) public mainsaleWalletLimits;


    modifier isMainsaleOpen
    {
         require(block.timestamp >= mainsaleTime);
         _;
    }
    modifier isPresaleOpen
    {
         require(block.timestamp >= presaleTime && block.timestamp <= presaleClose, "Presale closed!");
         _;
    }
   
    constructor(string memory _initBaseURI) ERC721("Superlative Apes", "SLAPE")
    {
        setBaseURI(_initBaseURI);
        for(uint256 i=0; i<80; i++)
        {
            _tokenIdTracker.increment();
            _safeMint(msg.sender, totalToken());
        }
        
    }
   
    function setPrice(uint256 newPrice) external onlyOwner  {
        price = newPrice;
    }
   
    function setMaxTx(uint newMax) external onlyOwner {
        maxTx = newMax;
    }

    function totalToken() public view returns (uint256) {
            return _tokenIdTracker.current();
    }

    function mainSale(uint8 mintTotal) public payable isMainsaleOpen
    {
        uint256 totalMinted = mintTotal + mainsaleWalletLimits[msg.sender];
        
        require(mintTotal >= 1 && mintTotal <= maxTx, "Mint Amount Incorrect");
        require(msg.value >= price * mintTotal, "Minting a SLAPE APE Costs 0.069 Ether Each!");
        require(totalToken() <= maxSupply, "SOLD OUT!");
        require(totalMinted <= maxTx, "You'll pass mint limit!");
       
        for(uint i=0;i<mintTotal;i++)
        {
            mainsaleWalletLimits[msg.sender]++;
            _tokenIdTracker.increment();
            require(totalToken() <= maxSupply, "SOLD OUT!");
            _safeMint(msg.sender, totalToken());
        }
    }
   
    function preSale(uint8 mintTotal) public payable isPresaleOpen
    {
        uint256 totalMinted = mintTotal + presaleWalletLimits[msg.sender];

        require(presaleWallets[msg.sender] == true, "You aren't whitelisted!");
        require(mintTotal >= 1 && mintTotal <= maxTx, "Mint Amount Incorrect");
        require(msg.value >= price * mintTotal, "Minting a SLAPE APE Costs 0.069 Ether Each!");
        require(totalToken() <= presaleSupply, "SOLD OUT!");
        require(totalMinted <= maxPreTx, "You'll pass mint limit!");
       
        for(uint i=0; i<mintTotal; i++)
        {
            presaleWalletLimits[msg.sender]++;
            _tokenIdTracker.increment();
            require(totalToken() <= presaleSupply, "SOLD OUT!");
            _safeMint(msg.sender, totalToken());
        }
       
    }
   
    function airdrop(address airdropPatricipent, uint8 tokenID) public payable onlyOwner
    {
        _transfer(address(this), airdropPatricipent, tokenID);
    }
   
    function addWhiteList(address[] memory whiteListedAddresses) public onlyOwner
    {
        for(uint256 i=0; i<whiteListedAddresses.length;i++)
        {
            presaleWallets[whiteListedAddresses[i]] = true;
        }
    }
    function isAddressWhitelisted(address whitelist) public view returns(bool)
    {
        return presaleWallets[whitelist];
    }
       
    function withdrawContractEther(address payable recipient) external onlyOwner
    {
        recipient.transfer(getBalance());
    }
   
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
   
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }
   
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory)
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
    }
    function getBalance() public view returns(uint)
    {
        return address(this).balance;
    }
   

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":[{"internalType":"address[]","name":"whiteListedAddresses","type":"address[]"}],"name":"addWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"airdropPatricipent","type":"address"},{"internalType":"uint8","name":"tokenID","type":"uint8"}],"name":"airdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"whitelist","type":"address"}],"name":"isAddressWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintTotal","type":"uint8"}],"name":"mainSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mainsaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mainsaleWalletLimits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPreTx","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":"maxTx","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":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"mintTotal","type":"uint8"}],"name":"preSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleClose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWalletLimits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"presaleWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMax","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"totalToken","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":"address payable","name":"recipient","type":"address"}],"name":"withdrawContractEther","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040526005608081905264173539b7b760d91b60a0908152620000289160089190620005c6565b5060056009556002600a5561115c600b55610960600c5566f5232269808000600d556361baabb0600e556361bbc4f0600f556361bbfd306010553480156200006f57600080fd5b5060405162002cdf38038062002cdf83398101604081905262000092916200069f565b604080518082018252601081526f53757065726c6174697665204170657360801b602080830191825283518085019094526005845264534c41504560d81b908401528151919291620000e791600091620005c6565b508051620000fd906001906020840190620005c6565b5050506200011a620001146200017b60201b60201c565b6200017f565b6200012581620001d1565b60005b605081101562000173576200014960116200024a60201b620013921760201c565b6200015e336200015862000253565b62000271565b806200016a8162000838565b91505062000128565b505062000882565b3390565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6006546001600160a01b03163314620002315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b805162000246906007906020840190620005c6565b5050565b80546001019055565b60006200026c60116200029360201b6200139b1760201c565b905090565b620002468282604051806020016040528060008152506200029760201b60201c565b5490565b620002a383836200030f565b620002b2600084848462000457565b6200030a5760405162461bcd60e51b8152602060048201526032602482015260008051602062002cbf83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000228565b505050565b6001600160a01b038216620003675760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000228565b6000818152600260205260409020546001600160a01b031615620003ce5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000228565b6001600160a01b0382166000908152600360205260408120805460019290620003f9908490620007ad565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600062000478846001600160a01b0316620005c060201b6200139f1760201c565b15620005b457604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290620004b290339089908890889060040162000757565b602060405180830381600087803b158015620004cd57600080fd5b505af192505050801562000500575060408051601f3d908101601f19168201909252620004fd918101906200066c565b60015b62000599573d80801562000531576040519150601f19603f3d011682016040523d82523d6000602084013e62000536565b606091505b508051620005915760405162461bcd60e51b8152602060048201526032602482015260008051602062002cbf83398151915260448201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606482015260840162000228565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050620005b8565b5060015b949350505050565b3b151590565b828054620005d490620007fb565b90600052602060002090601f016020900481019282620005f8576000855562000643565b82601f106200061357805160ff191683800117855562000643565b8280016001018555821562000643579182015b828111156200064357825182559160200191906001019062000626565b506200065192915062000655565b5090565b5b8082111562000651576000815560010162000656565b6000602082840312156200067f57600080fd5b81516001600160e01b0319811681146200069857600080fd5b9392505050565b600060208284031215620006b257600080fd5b81516001600160401b0380821115620006ca57600080fd5b818401915084601f830112620006df57600080fd5b815181811115620006f457620006f46200086c565b604051601f8201601f19908116603f011681019083821181831017156200071f576200071f6200086c565b816040528281528760208487010111156200073957600080fd5b6200074c836020830160208801620007c8565b979650505050505050565b600060018060a01b038087168352808616602084015250836040830152608060608301528251806080840152620007968160a0850160208701620007c8565b601f01601f19169190910160a00195945050505050565b60008219821115620007c357620007c362000856565b500190565b60005b83811015620007e5578181015183820152602001620007cb565b83811115620007f5576000848401525b50505050565b600181811c908216806200081057607f821691505b602082108114156200083257634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156200084f576200084f62000856565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b61242d80620008926000396000f3fe60806040526004361061023a5760003560e01c80637437681e1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb011461066e578063dbe59b1514610684578063e341afdf146106b1578063e985e9c5146106c4578063f2fde38b1461070d57600080fd5b8063b88d4fde146105e3578063bc33718214610603578063c668286214610623578063c6e62e0b14610638578063c87b56dd1461064e57600080fd5b8063a035b1fe116100f2578063a035b1fe14610561578063a16d605a14610577578063a22cb46514610597578063b3a196e9146105b7578063b79f0f0b146105cd57600080fd5b80637437681e146104e25780638da5cb5b146104f857806391b7f5ed1461051657806395d89b41146105365780639694229b1461054b57600080fd5b806342842e0e116101bc578063626be56711610180578063626be567146104635780636352211e146104785780636c0360eb1461049857806370a08231146104ad578063715018a6146104cd57600080fd5b806342842e0e146103dd57806348caf7ef146103fd5780634d61097f1461041057806355f804b3146104235780635e1045ec1461044357600080fd5b806312065fe01161020357806312065fe01461032b57806313f44d101461033e57806323b872dd1461037757806330b2264e146103975780633dce49c8146103c757600080fd5b8062d5b4471461023f57806301ffc9a71461027f57806306fdde03146102af578063081812fc146102d1578063095ea7b314610309575b600080fd5b34801561024b57600080fd5b5061026c61025a366004611caa565b60146020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061029f61029a366004611f0e565b61072d565b6040519015158152602001610276565b3480156102bb57600080fd5b506102c461077f565b60405161027691906120f2565b3480156102dd57600080fd5b506102f16102ec366004611f91565b610811565b6040516001600160a01b039091168152602001610276565b34801561031557600080fd5b50610329610324366004611df4565b6108ab565b005b34801561033757600080fd5b504761026c565b34801561034a57600080fd5b5061029f610359366004611caa565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561038357600080fd5b50610329610392366004611d00565b6109c1565b3480156103a357600080fd5b5061029f6103b2366004611caa565b60126020526000908152604090205460ff1681565b3480156103d357600080fd5b5061026c60105481565b3480156103e957600080fd5b506103296103f8366004611d00565b6109f2565b61032961040b366004611faa565b610a0d565b61032961041e366004611e20565b610c6d565b34801561042f57600080fd5b5061032961043e366004611f48565b610ca9565b34801561044f57600080fd5b5061032961045e366004611e55565b610ce6565b34801561046f57600080fd5b5061026c610d78565b34801561048457600080fd5b506102f1610493366004611f91565b610d88565b3480156104a457600080fd5b506102c4610dff565b3480156104b957600080fd5b5061026c6104c8366004611caa565b610e8d565b3480156104d957600080fd5b50610329610f14565b3480156104ee57600080fd5b5061026c60095481565b34801561050457600080fd5b506006546001600160a01b03166102f1565b34801561052257600080fd5b50610329610531366004611f91565b610f4a565b34801561054257600080fd5b506102c4610f79565b34801561055757600080fd5b5061026c600f5481565b34801561056d57600080fd5b5061026c600d5481565b34801561058357600080fd5b50610329610592366004611caa565b610f88565b3480156105a357600080fd5b506103296105b2366004611dc1565b610fe7565b3480156105c357600080fd5b5061026c600c5481565b3480156105d957600080fd5b5061026c600a5481565b3480156105ef57600080fd5b506103296105fe366004611d41565b610ff2565b34801561060f57600080fd5b5061032961061e366004611f91565b61102a565b34801561062f57600080fd5b506102c4611059565b34801561064457600080fd5b5061026c600e5481565b34801561065a57600080fd5b506102c4610669366004611f91565b611066565b34801561067a57600080fd5b5061026c600b5481565b34801561069057600080fd5b5061026c61069f366004611caa565b60136020526000908152604090205481565b6103296106bf366004611faa565b611144565b3480156106d057600080fd5b5061029f6106df366004611cc7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b50610329610728366004611caa565b6112f7565b60006001600160e01b031982166380ac58cd60e01b148061075e57506001600160e01b03198216635b5e139f60e01b145b8061077957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461078e9061230a565b80601f01602080910402602001604051908101604052809291908181526020018280546107ba9061230a565b80156108075780601f106107dc57610100808354040283529160200191610807565b820191906000526020600020905b8154815290600101906020018083116107ea57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108b682610d88565b9050806001600160a01b0316836001600160a01b031614156109245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610886565b336001600160a01b0382161480610940575061094081336106df565b6109b25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610886565b6109bc83836113a5565b505050565b6109cb3382611413565b6109e75760405162461bcd60e51b8152600401610886906121af565b6109bc83838361150a565b6109bc83838360405180602001604052806000815250610ff2565b600e544210158015610a215750600f544211155b610a5f5760405162461bcd60e51b815260206004820152600f60248201526e50726573616c6520636c6f7365642160881b6044820152606401610886565b33600090815260136020526040812054610a7c9060ff841661227c565b3360009081526012602052604090205490915060ff161515600114610ae35760405162461bcd60e51b815260206004820152601760248201527f596f75206172656e27742077686974656c6973746564210000000000000000006044820152606401610886565b60018260ff1610158015610afc57506009548260ff1611155b610b405760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610886565b8160ff16600d54610b5191906122a8565b341015610b705760405162461bcd60e51b815260040161088690612200565b600c54610b7b610d78565b1115610b995760405162461bcd60e51b815260040161088690612157565b600a54811115610be55760405162461bcd60e51b8152602060048201526017602482015276596f75276c6c2070617373206d696e74206c696d69742160481b6044820152606401610886565b60005b8260ff168110156109bc57336000908152601360205260408120805491610c0e83612345565b9190505550610c21601180546001019055565b600c54610c2c610d78565b1115610c4a5760405162461bcd60e51b815260040161088690612157565b610c5b33610c56610d78565b6116a6565b80610c6581612345565b915050610be8565b6006546001600160a01b03163314610c975760405162461bcd60e51b81526004016108869061217a565b610ca530838360ff1661150a565b5050565b6006546001600160a01b03163314610cd35760405162461bcd60e51b81526004016108869061217a565b8051610ca5906007906020840190611ba3565b6006546001600160a01b03163314610d105760405162461bcd60e51b81526004016108869061217a565b60005b8151811015610ca557600160126000848481518110610d3457610d346123a0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7081612345565b915050610d13565b6000610d8360115490565b905090565b6000818152600260205260408120546001600160a01b0316806107795760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610886565b60078054610e0c9061230a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e389061230a565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b505050505081565b60006001600160a01b038216610ef85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610886565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f3e5760405162461bcd60e51b81526004016108869061217a565b610f4860006116c0565b565b6006546001600160a01b03163314610f745760405162461bcd60e51b81526004016108869061217a565b600d55565b60606001805461078e9061230a565b6006546001600160a01b03163314610fb25760405162461bcd60e51b81526004016108869061217a565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ca5573d6000803e3d6000fd5b610ca5338383611712565b610ffc3383611413565b6110185760405162461bcd60e51b8152600401610886906121af565b611024848484846117e1565b50505050565b6006546001600160a01b031633146110545760405162461bcd60e51b81526004016108869061217a565b600955565b60088054610e0c9061230a565b6000818152600260205260409020546060906001600160a01b03166110e55760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610886565b60006110ef611814565b9050600081511161110f576040518060200160405280600081525061113d565b8061111984611823565b600860405160200161112d93929190611ff1565b6040516020818303038152906040525b9392505050565b60105442101561115357600080fd5b336000908152601460205260408120546111709060ff841661227c565b905060018260ff161015801561118b57506009548260ff1611155b6111cf5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610886565b8160ff16600d546111e091906122a8565b3410156111ff5760405162461bcd60e51b815260040161088690612200565b600b5461120a610d78565b11156112285760405162461bcd60e51b815260040161088690612157565b6009548111156112745760405162461bcd60e51b8152602060048201526017602482015276596f75276c6c2070617373206d696e74206c696d69742160481b6044820152606401610886565b60005b8260ff168110156109bc5733600090815260146020526040812080549161129d83612345565b91905055506112b0601180546001019055565b600b546112bb610d78565b11156112d95760405162461bcd60e51b815260040161088690612157565b6112e533610c56610d78565b806112ef81612345565b915050611277565b6006546001600160a01b031633146113215760405162461bcd60e51b81526004016108869061217a565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610886565b61138f816116c0565b50565b80546001019055565b5490565b3b151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113da82610d88565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661148c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610886565b600061149783610d88565b9050806001600160a01b0316846001600160a01b031614806114d25750836001600160a01b03166114c784610811565b6001600160a01b0316145b8061150257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661151d82610d88565b6001600160a01b0316146115815760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610886565b6001600160a01b0382166115e35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610886565b6115ee6000826113a5565b6001600160a01b03831660009081526003602052604081208054600192906116179084906122c7565b90915550506001600160a01b038216600090815260036020526040812080546001929061164590849061227c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ca5828260405180602001604052806000815250611921565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610886565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117ec84848461150a565b6117f884848484611954565b6110245760405162461bcd60e51b815260040161088690612105565b60606007805461078e9061230a565b6060816118475750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611871578061185b81612345565b915061186a9050600a83612294565b915061184b565b60008167ffffffffffffffff81111561188c5761188c6123b6565b6040519080825280601f01601f1916602001820160405280156118b6576020820181803683370190505b5090505b8415611502576118cb6001836122c7565b91506118d8600a86612360565b6118e390603061227c565b60f81b8183815181106118f8576118f86123a0565b60200101906001600160f81b031916908160001a90535061191a600a86612294565b94506118ba565b61192b8383611a61565b6119386000848484611954565b6109bc5760405162461bcd60e51b815260040161088690612105565b60006001600160a01b0384163b15611a5657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119989033908990889088906004016120b5565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e2575060408051601f3d908101601f191682019092526119df91810190611f2b565b60015b611a3c573d808015611a10576040519150601f19603f3d011682016040523d82523d6000602084013e611a15565b606091505b508051611a345760405162461bcd60e51b815260040161088690612105565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611502565b506001949350505050565b6001600160a01b038216611ab75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610886565b6000818152600260205260409020546001600160a01b031615611b1c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610886565b6001600160a01b0382166000908152600360205260408120805460019290611b4590849061227c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611baf9061230a565b90600052602060002090601f016020900481019282611bd15760008555611c17565b82601f10611bea57805160ff1916838001178555611c17565b82800160010185558215611c17579182015b82811115611c17578251825591602001919060010190611bfc565b50611c23929150611c27565b5090565b5b80821115611c235760008155600101611c28565b600067ffffffffffffffff831115611c5657611c566123b6565b611c69601f8401601f191660200161224b565b9050828152838383011115611c7d57600080fd5b828260208301376000602084830101529392505050565b803560ff81168114611ca557600080fd5b919050565b600060208284031215611cbc57600080fd5b813561113d816123cc565b60008060408385031215611cda57600080fd5b8235611ce5816123cc565b91506020830135611cf5816123cc565b809150509250929050565b600080600060608486031215611d1557600080fd5b8335611d20816123cc565b92506020840135611d30816123cc565b929592945050506040919091013590565b60008060008060808587031215611d5757600080fd5b8435611d62816123cc565b93506020850135611d72816123cc565b925060408501359150606085013567ffffffffffffffff811115611d9557600080fd5b8501601f81018713611da657600080fd5b611db587823560208401611c3c565b91505092959194509250565b60008060408385031215611dd457600080fd5b8235611ddf816123cc565b915060208301358015158114611cf557600080fd5b60008060408385031215611e0757600080fd5b8235611e12816123cc565b946020939093013593505050565b60008060408385031215611e3357600080fd5b8235611e3e816123cc565b9150611e4c60208401611c94565b90509250929050565b60006020808385031215611e6857600080fd5b823567ffffffffffffffff80821115611e8057600080fd5b818501915085601f830112611e9457600080fd5b813581811115611ea657611ea66123b6565b8060051b9150611eb784830161224b565b8181528481019084860184860187018a1015611ed257600080fd5b600095505b83861015611f015780359450611eec856123cc565b84835260019590950194918601918601611ed7565b5098975050505050505050565b600060208284031215611f2057600080fd5b813561113d816123e1565b600060208284031215611f3d57600080fd5b815161113d816123e1565b600060208284031215611f5a57600080fd5b813567ffffffffffffffff811115611f7157600080fd5b8201601f81018413611f8257600080fd5b61150284823560208401611c3c565b600060208284031215611fa357600080fd5b5035919050565b600060208284031215611fbc57600080fd5b61113d82611c94565b60008151808452611fdd8160208601602086016122de565b601f01601f19169290920160200192915050565b6000845160206120048285838a016122de565b8551918401916120178184848a016122de565b8554920191600090600181811c908083168061203457607f831692505b85831081141561205257634e487b7160e01b85526022600452602485fd5b8080156120665760018114612077576120a4565b60ff198516885283880195506120a4565b60008b81526020902060005b8581101561209c5781548a820152908401908801612083565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120e890830184611fc5565b9695505050505050565b60208152600061113d6020830184611fc5565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260099082015268534f4c44204f55542160b81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602b908201527f4d696e74696e67206120534c4150452041504520436f73747320302e3036392060408201526a457468657220456163682160a81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612274576122746123b6565b604052919050565b6000821982111561228f5761228f612374565b500190565b6000826122a3576122a361238a565b500490565b60008160001904831182151516156122c2576122c2612374565b500290565b6000828210156122d9576122d9612374565b500390565b60005b838110156122f95781810151838201526020016122e1565b838111156110245750506000910152565b600181811c9082168061231e57607f821691505b6020821081141561233f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561235957612359612374565b5060010190565b60008261236f5761236f61238a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461138f57600080fd5b6001600160e01b03198116811461138f57600080fdfea2646970667358221220a4a4ae2138850487f6503f2e630692d420110bcac6d61d17ce4461672d937e3c64736f6c634300080700334552433732313a207472616e7366657220746f206e6f6e2045524337323152650000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d574d374546543573475666715a6962346b794e45365542394b456e4d4862436835716472434d416b3931335a2f000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061023a5760003560e01c80637437681e1161012e578063b88d4fde116100ab578063d5abeb011161006f578063d5abeb011461066e578063dbe59b1514610684578063e341afdf146106b1578063e985e9c5146106c4578063f2fde38b1461070d57600080fd5b8063b88d4fde146105e3578063bc33718214610603578063c668286214610623578063c6e62e0b14610638578063c87b56dd1461064e57600080fd5b8063a035b1fe116100f2578063a035b1fe14610561578063a16d605a14610577578063a22cb46514610597578063b3a196e9146105b7578063b79f0f0b146105cd57600080fd5b80637437681e146104e25780638da5cb5b146104f857806391b7f5ed1461051657806395d89b41146105365780639694229b1461054b57600080fd5b806342842e0e116101bc578063626be56711610180578063626be567146104635780636352211e146104785780636c0360eb1461049857806370a08231146104ad578063715018a6146104cd57600080fd5b806342842e0e146103dd57806348caf7ef146103fd5780634d61097f1461041057806355f804b3146104235780635e1045ec1461044357600080fd5b806312065fe01161020357806312065fe01461032b57806313f44d101461033e57806323b872dd1461037757806330b2264e146103975780633dce49c8146103c757600080fd5b8062d5b4471461023f57806301ffc9a71461027f57806306fdde03146102af578063081812fc146102d1578063095ea7b314610309575b600080fd5b34801561024b57600080fd5b5061026c61025a366004611caa565b60146020526000908152604090205481565b6040519081526020015b60405180910390f35b34801561028b57600080fd5b5061029f61029a366004611f0e565b61072d565b6040519015158152602001610276565b3480156102bb57600080fd5b506102c461077f565b60405161027691906120f2565b3480156102dd57600080fd5b506102f16102ec366004611f91565b610811565b6040516001600160a01b039091168152602001610276565b34801561031557600080fd5b50610329610324366004611df4565b6108ab565b005b34801561033757600080fd5b504761026c565b34801561034a57600080fd5b5061029f610359366004611caa565b6001600160a01b031660009081526012602052604090205460ff1690565b34801561038357600080fd5b50610329610392366004611d00565b6109c1565b3480156103a357600080fd5b5061029f6103b2366004611caa565b60126020526000908152604090205460ff1681565b3480156103d357600080fd5b5061026c60105481565b3480156103e957600080fd5b506103296103f8366004611d00565b6109f2565b61032961040b366004611faa565b610a0d565b61032961041e366004611e20565b610c6d565b34801561042f57600080fd5b5061032961043e366004611f48565b610ca9565b34801561044f57600080fd5b5061032961045e366004611e55565b610ce6565b34801561046f57600080fd5b5061026c610d78565b34801561048457600080fd5b506102f1610493366004611f91565b610d88565b3480156104a457600080fd5b506102c4610dff565b3480156104b957600080fd5b5061026c6104c8366004611caa565b610e8d565b3480156104d957600080fd5b50610329610f14565b3480156104ee57600080fd5b5061026c60095481565b34801561050457600080fd5b506006546001600160a01b03166102f1565b34801561052257600080fd5b50610329610531366004611f91565b610f4a565b34801561054257600080fd5b506102c4610f79565b34801561055757600080fd5b5061026c600f5481565b34801561056d57600080fd5b5061026c600d5481565b34801561058357600080fd5b50610329610592366004611caa565b610f88565b3480156105a357600080fd5b506103296105b2366004611dc1565b610fe7565b3480156105c357600080fd5b5061026c600c5481565b3480156105d957600080fd5b5061026c600a5481565b3480156105ef57600080fd5b506103296105fe366004611d41565b610ff2565b34801561060f57600080fd5b5061032961061e366004611f91565b61102a565b34801561062f57600080fd5b506102c4611059565b34801561064457600080fd5b5061026c600e5481565b34801561065a57600080fd5b506102c4610669366004611f91565b611066565b34801561067a57600080fd5b5061026c600b5481565b34801561069057600080fd5b5061026c61069f366004611caa565b60136020526000908152604090205481565b6103296106bf366004611faa565b611144565b3480156106d057600080fd5b5061029f6106df366004611cc7565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561071957600080fd5b50610329610728366004611caa565b6112f7565b60006001600160e01b031982166380ac58cd60e01b148061075e57506001600160e01b03198216635b5e139f60e01b145b8061077957506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606000805461078e9061230a565b80601f01602080910402602001604051908101604052809291908181526020018280546107ba9061230a565b80156108075780601f106107dc57610100808354040283529160200191610807565b820191906000526020600020905b8154815290600101906020018083116107ea57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b031661088f5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006108b682610d88565b9050806001600160a01b0316836001600160a01b031614156109245760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610886565b336001600160a01b0382161480610940575061094081336106df565b6109b25760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610886565b6109bc83836113a5565b505050565b6109cb3382611413565b6109e75760405162461bcd60e51b8152600401610886906121af565b6109bc83838361150a565b6109bc83838360405180602001604052806000815250610ff2565b600e544210158015610a215750600f544211155b610a5f5760405162461bcd60e51b815260206004820152600f60248201526e50726573616c6520636c6f7365642160881b6044820152606401610886565b33600090815260136020526040812054610a7c9060ff841661227c565b3360009081526012602052604090205490915060ff161515600114610ae35760405162461bcd60e51b815260206004820152601760248201527f596f75206172656e27742077686974656c6973746564210000000000000000006044820152606401610886565b60018260ff1610158015610afc57506009548260ff1611155b610b405760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610886565b8160ff16600d54610b5191906122a8565b341015610b705760405162461bcd60e51b815260040161088690612200565b600c54610b7b610d78565b1115610b995760405162461bcd60e51b815260040161088690612157565b600a54811115610be55760405162461bcd60e51b8152602060048201526017602482015276596f75276c6c2070617373206d696e74206c696d69742160481b6044820152606401610886565b60005b8260ff168110156109bc57336000908152601360205260408120805491610c0e83612345565b9190505550610c21601180546001019055565b600c54610c2c610d78565b1115610c4a5760405162461bcd60e51b815260040161088690612157565b610c5b33610c56610d78565b6116a6565b80610c6581612345565b915050610be8565b6006546001600160a01b03163314610c975760405162461bcd60e51b81526004016108869061217a565b610ca530838360ff1661150a565b5050565b6006546001600160a01b03163314610cd35760405162461bcd60e51b81526004016108869061217a565b8051610ca5906007906020840190611ba3565b6006546001600160a01b03163314610d105760405162461bcd60e51b81526004016108869061217a565b60005b8151811015610ca557600160126000848481518110610d3457610d346123a0565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7081612345565b915050610d13565b6000610d8360115490565b905090565b6000818152600260205260408120546001600160a01b0316806107795760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610886565b60078054610e0c9061230a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e389061230a565b8015610e855780601f10610e5a57610100808354040283529160200191610e85565b820191906000526020600020905b815481529060010190602001808311610e6857829003601f168201915b505050505081565b60006001600160a01b038216610ef85760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610886565b506001600160a01b031660009081526003602052604090205490565b6006546001600160a01b03163314610f3e5760405162461bcd60e51b81526004016108869061217a565b610f4860006116c0565b565b6006546001600160a01b03163314610f745760405162461bcd60e51b81526004016108869061217a565b600d55565b60606001805461078e9061230a565b6006546001600160a01b03163314610fb25760405162461bcd60e51b81526004016108869061217a565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610ca5573d6000803e3d6000fd5b610ca5338383611712565b610ffc3383611413565b6110185760405162461bcd60e51b8152600401610886906121af565b611024848484846117e1565b50505050565b6006546001600160a01b031633146110545760405162461bcd60e51b81526004016108869061217a565b600955565b60088054610e0c9061230a565b6000818152600260205260409020546060906001600160a01b03166110e55760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610886565b60006110ef611814565b9050600081511161110f576040518060200160405280600081525061113d565b8061111984611823565b600860405160200161112d93929190611ff1565b6040516020818303038152906040525b9392505050565b60105442101561115357600080fd5b336000908152601460205260408120546111709060ff841661227c565b905060018260ff161015801561118b57506009548260ff1611155b6111cf5760405162461bcd60e51b8152602060048201526015602482015274135a5b9d08105b5bdd5b9d08125b98dbdc9c9958dd605a1b6044820152606401610886565b8160ff16600d546111e091906122a8565b3410156111ff5760405162461bcd60e51b815260040161088690612200565b600b5461120a610d78565b11156112285760405162461bcd60e51b815260040161088690612157565b6009548111156112745760405162461bcd60e51b8152602060048201526017602482015276596f75276c6c2070617373206d696e74206c696d69742160481b6044820152606401610886565b60005b8260ff168110156109bc5733600090815260146020526040812080549161129d83612345565b91905055506112b0601180546001019055565b600b546112bb610d78565b11156112d95760405162461bcd60e51b815260040161088690612157565b6112e533610c56610d78565b806112ef81612345565b915050611277565b6006546001600160a01b031633146113215760405162461bcd60e51b81526004016108869061217a565b6001600160a01b0381166113865760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610886565b61138f816116c0565b50565b80546001019055565b5490565b3b151590565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906113da82610d88565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b031661148c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610886565b600061149783610d88565b9050806001600160a01b0316846001600160a01b031614806114d25750836001600160a01b03166114c784610811565b6001600160a01b0316145b8061150257506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661151d82610d88565b6001600160a01b0316146115815760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b6064820152608401610886565b6001600160a01b0382166115e35760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610886565b6115ee6000826113a5565b6001600160a01b03831660009081526003602052604081208054600192906116179084906122c7565b90915550506001600160a01b038216600090815260036020526040812080546001929061164590849061227c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ca5828260405180602001604052806000815250611921565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031614156117745760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610886565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117ec84848461150a565b6117f884848484611954565b6110245760405162461bcd60e51b815260040161088690612105565b60606007805461078e9061230a565b6060816118475750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611871578061185b81612345565b915061186a9050600a83612294565b915061184b565b60008167ffffffffffffffff81111561188c5761188c6123b6565b6040519080825280601f01601f1916602001820160405280156118b6576020820181803683370190505b5090505b8415611502576118cb6001836122c7565b91506118d8600a86612360565b6118e390603061227c565b60f81b8183815181106118f8576118f86123a0565b60200101906001600160f81b031916908160001a90535061191a600a86612294565b94506118ba565b61192b8383611a61565b6119386000848484611954565b6109bc5760405162461bcd60e51b815260040161088690612105565b60006001600160a01b0384163b15611a5657604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906119989033908990889088906004016120b5565b602060405180830381600087803b1580156119b257600080fd5b505af19250505080156119e2575060408051601f3d908101601f191682019092526119df91810190611f2b565b60015b611a3c573d808015611a10576040519150601f19603f3d011682016040523d82523d6000602084013e611a15565b606091505b508051611a345760405162461bcd60e51b815260040161088690612105565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611502565b506001949350505050565b6001600160a01b038216611ab75760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610886565b6000818152600260205260409020546001600160a01b031615611b1c5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610886565b6001600160a01b0382166000908152600360205260408120805460019290611b4590849061227c565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b828054611baf9061230a565b90600052602060002090601f016020900481019282611bd15760008555611c17565b82601f10611bea57805160ff1916838001178555611c17565b82800160010185558215611c17579182015b82811115611c17578251825591602001919060010190611bfc565b50611c23929150611c27565b5090565b5b80821115611c235760008155600101611c28565b600067ffffffffffffffff831115611c5657611c566123b6565b611c69601f8401601f191660200161224b565b9050828152838383011115611c7d57600080fd5b828260208301376000602084830101529392505050565b803560ff81168114611ca557600080fd5b919050565b600060208284031215611cbc57600080fd5b813561113d816123cc565b60008060408385031215611cda57600080fd5b8235611ce5816123cc565b91506020830135611cf5816123cc565b809150509250929050565b600080600060608486031215611d1557600080fd5b8335611d20816123cc565b92506020840135611d30816123cc565b929592945050506040919091013590565b60008060008060808587031215611d5757600080fd5b8435611d62816123cc565b93506020850135611d72816123cc565b925060408501359150606085013567ffffffffffffffff811115611d9557600080fd5b8501601f81018713611da657600080fd5b611db587823560208401611c3c565b91505092959194509250565b60008060408385031215611dd457600080fd5b8235611ddf816123cc565b915060208301358015158114611cf557600080fd5b60008060408385031215611e0757600080fd5b8235611e12816123cc565b946020939093013593505050565b60008060408385031215611e3357600080fd5b8235611e3e816123cc565b9150611e4c60208401611c94565b90509250929050565b60006020808385031215611e6857600080fd5b823567ffffffffffffffff80821115611e8057600080fd5b818501915085601f830112611e9457600080fd5b813581811115611ea657611ea66123b6565b8060051b9150611eb784830161224b565b8181528481019084860184860187018a1015611ed257600080fd5b600095505b83861015611f015780359450611eec856123cc565b84835260019590950194918601918601611ed7565b5098975050505050505050565b600060208284031215611f2057600080fd5b813561113d816123e1565b600060208284031215611f3d57600080fd5b815161113d816123e1565b600060208284031215611f5a57600080fd5b813567ffffffffffffffff811115611f7157600080fd5b8201601f81018413611f8257600080fd5b61150284823560208401611c3c565b600060208284031215611fa357600080fd5b5035919050565b600060208284031215611fbc57600080fd5b61113d82611c94565b60008151808452611fdd8160208601602086016122de565b601f01601f19169290920160200192915050565b6000845160206120048285838a016122de565b8551918401916120178184848a016122de565b8554920191600090600181811c908083168061203457607f831692505b85831081141561205257634e487b7160e01b85526022600452602485fd5b8080156120665760018114612077576120a4565b60ff198516885283880195506120a4565b60008b81526020902060005b8581101561209c5781548a820152908401908801612083565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906120e890830184611fc5565b9695505050505050565b60208152600061113d6020830184611fc5565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b602080825260099082015268534f4c44204f55542160b81b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602b908201527f4d696e74696e67206120534c4150452041504520436f73747320302e3036392060408201526a457468657220456163682160a81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff81118282101715612274576122746123b6565b604052919050565b6000821982111561228f5761228f612374565b500190565b6000826122a3576122a361238a565b500490565b60008160001904831182151516156122c2576122c2612374565b500290565b6000828210156122d9576122d9612374565b500390565b60005b838110156122f95781810151838201526020016122e1565b838111156110245750506000910152565b600181811c9082168061231e57607f821691505b6020821081141561233f57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561235957612359612374565b5060010190565b60008261236f5761236f61238a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461138f57600080fd5b6001600160e01b03198116811461138f57600080fdfea2646970667358221220a4a4ae2138850487f6503f2e630692d420110bcac6d61d17ce4461672d937e3c64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d574d374546543573475666715a6962346b794e45365542394b456e4d4862436835716472434d416b3931335a2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _initBaseURI (string): https://gateway.pinata.cloud/ipfs/QmWM7EFT5sGVfqZib4kyNE6UB9KEnMHbCh5qdrCMAk913Z/

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f516d574d374546543573475666715a6962346b794e45365542394b456e4d
Arg [4] : 4862436835716472434d416b3931335a2f000000000000000000000000000000


Deployed Bytecode Sourcemap

39546:4773:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40351:56;;;;;;;;;;-1:-1:-1;40351:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;17764:25:1;;;17752:2;17737:18;40351:56:0;;;;;;;;26188:305;;;;;;;;;;-1:-1:-1;26188:305:0;;;;;:::i;:::-;;:::i;:::-;;;8842:14:1;;8835:22;8817:41;;8805:2;8790:18;26188:305:0;8677:187:1;27133:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;28692:221::-;;;;;;;;;;-1:-1:-1;28692:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;8140:32:1;;;8122:51;;8110:2;8095:18;28692:221:0;7976:203:1;28215:411:0;;;;;;;;;;-1:-1:-1;28215:411:0;;;;;:::i;:::-;;:::i;:::-;;44209:100;;;;;;;;;;-1:-1:-1;44280:21:0;44209:100;;43304:131;;;;;;;;;;-1:-1:-1;43304:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;43402:25:0;43373:4;43402:25;;;:14;:25;;;;;;;;;43304:131;29442:339;;;;;;;;;;-1:-1:-1;29442:339:0;;;;;:::i;:::-;;:::i;40235:47::-;;;;;;;;;;-1:-1:-1;40235:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;40134:40;;;;;;;;;;;;;;;;29852:185;;;;;;;;;;-1:-1:-1;29852:185:0;;;;;:::i;:::-;;:::i;42047:832::-;;;;;;:::i;:::-;;:::i;42890:162::-;;;;;;:::i;:::-;;:::i;43713:104::-;;;;;;;;;;-1:-1:-1;43713:104:0;;;;;:::i;:::-;;:::i;43063:235::-;;;;;;;;;;-1:-1:-1;43063:235:0;;;;;:::i;:::-;;:::i;41180:107::-;;;;;;;;;;;;;:::i;26827:239::-;;;;;;;;;;-1:-1:-1;26827:239:0;;;;;:::i;:::-;;:::i;39678:21::-;;;;;;;;;;;;;:::i;26557:208::-;;;;;;;;;;-1:-1:-1;26557:208:0;;;;;:::i;:::-;;:::i;6407:103::-;;;;;;;;;;;;;:::i;39754:24::-;;;;;;;;;;;;;;;;5756:87;;;;;;;;;;-1:-1:-1;5829:6:0;;-1:-1:-1;;;;;5829:6:0;5756:87;;40987:91;;;;;;;;;;-1:-1:-1;40987:91:0;;;;;:::i;:::-;;:::i;27302:104::-;;;;;;;;;;;;;:::i;40056:40::-;;;;;;;;;;;;;;;;39899:34;;;;;;;;;;;;;;;;43450:133;;;;;;;;;;-1:-1:-1;43450:133:0;;;;;:::i;:::-;;:::i;28985:155::-;;;;;;;;;;-1:-1:-1;28985:155:0;;;;;:::i;:::-;;:::i;39857:35::-;;;;;;;;;;;;;;;;39785:27;;;;;;;;;;;;;;;;30108:328;;;;;;;;;;-1:-1:-1;30108:328:0;;;;;:::i;:::-;;:::i;41089:83::-;;;;;;;;;;-1:-1:-1;41089:83:0;;;;;:::i;:::-;;:::i;39706:37::-;;;;;;;;;;;;;:::i;39979:39::-;;;;;;;;;;;;;;;;43828:375;;;;;;;;;;-1:-1:-1;43828:375:0;;;;;:::i;:::-;;:::i;39819:31::-;;;;;;;;;;;;;;;;40289:55;;;;;;;;;;-1:-1:-1;40289:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;41295:741;;;;;;:::i;:::-;;:::i;29211:164::-;;;;;;;;;;-1:-1:-1;29211:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;29332:25:0;;;29308:4;29332:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;29211:164;6665:201;;;;;;;;;;-1:-1:-1;6665:201:0;;;;;:::i;:::-;;:::i;26188:305::-;26290:4;-1:-1:-1;;;;;;26327:40:0;;-1:-1:-1;;;26327:40:0;;:105;;-1:-1:-1;;;;;;;26384:48:0;;-1:-1:-1;;;26384:48:0;26327:105;:158;;;-1:-1:-1;;;;;;;;;;18907:40:0;;;26449:36;26307:178;26188:305;-1:-1:-1;;26188:305:0:o;27133:100::-;27187:13;27220:5;27213:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27133:100;:::o;28692:221::-;28768:7;32035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32035:16:0;28788:73;;;;-1:-1:-1;;;28788:73:0;;14007:2:1;28788:73:0;;;13989:21:1;14046:2;14026:18;;;14019:30;14085:34;14065:18;;;14058:62;-1:-1:-1;;;14136:18:1;;;14129:42;14188:19;;28788:73:0;;;;;;;;;-1:-1:-1;28881:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;28881:24:0;;28692:221::o;28215:411::-;28296:13;28312:23;28327:7;28312:14;:23::i;:::-;28296:39;;28360:5;-1:-1:-1;;;;;28354:11:0;:2;-1:-1:-1;;;;;28354:11:0;;;28346:57;;;;-1:-1:-1;;;28346:57:0;;16236:2:1;28346:57:0;;;16218:21:1;16275:2;16255:18;;;16248:30;16314:34;16294:18;;;16287:62;-1:-1:-1;;;16365:18:1;;;16358:31;16406:19;;28346:57:0;16034:397:1;28346:57:0;4507:10;-1:-1:-1;;;;;28438:21:0;;;;:62;;-1:-1:-1;28463:37:0;28480:5;4507:10;29211:164;:::i;28463:37::-;28416:168;;;;-1:-1:-1;;;28416:168:0;;12400:2:1;28416:168:0;;;12382:21:1;12439:2;12419:18;;;12412:30;12478:34;12458:18;;;12451:62;12549:26;12529:18;;;12522:54;12593:19;;28416:168:0;12198:420:1;28416:168:0;28597:21;28606:2;28610:7;28597:8;:21::i;:::-;28285:341;28215:411;;:::o;29442:339::-;29637:41;4507:10;29670:7;29637:18;:41::i;:::-;29629:103;;;;-1:-1:-1;;;29629:103:0;;;;;;;:::i;:::-;29745:28;29755:4;29761:2;29765:7;29745:9;:28::i;29852:185::-;29990:39;30007:4;30013:2;30017:7;29990:39;;;;;;;;;;;;:16;:39::i;42047:832::-;40593:11;;40574:15;:30;;:65;;;;;40627:12;;40608:15;:31;;40574:65;40566:93;;;;-1:-1:-1;;;40566:93:0;;11643:2:1;40566:93:0;;;11625:21:1;11682:2;11662:18;;;11655:30;-1:-1:-1;;;11701:18:1;;;11694:45;11756:18;;40566:93:0;11441:339:1;40566:93:0;42180:10:::1;42126:19;42160:31:::0;;;:19:::1;:31;::::0;;;;;42148:43:::1;::::0;::::1;::::0;::::1;;:::i;:::-;42227:10;42212:26;::::0;;;:14:::1;:26;::::0;;;;;42126:65;;-1:-1:-1;42212:26:0::1;;:34;;:26:::0;:34:::1;42204:70;;;::::0;-1:-1:-1;;;42204:70:0;;17056:2:1;42204:70:0::1;::::0;::::1;17038:21:1::0;17095:2;17075:18;;;17068:30;17134:25;17114:18;;;17107:53;17177:18;;42204:70:0::1;16854:347:1::0;42204:70:0::1;42306:1;42293:9;:14;;;;:36;;;;;42324:5;;42311:9;:18;;;;42293:36;42285:70;;;::::0;-1:-1:-1;;;42285:70:0;;14757:2:1;42285:70:0::1;::::0;::::1;14739:21:1::0;14796:2;14776:18;;;14769:30;-1:-1:-1;;;14815:18:1;;;14808:51;14876:18;;42285:70:0::1;14555:345:1::0;42285:70:0::1;42395:9;42387:17;;:5;;:17;;;;:::i;:::-;42374:9;:30;;42366:86;;;;-1:-1:-1::0;;;42366:86:0::1;;;;;;;:::i;:::-;42487:13;;42471:12;:10;:12::i;:::-;:29;;42463:51;;;;-1:-1:-1::0;;;42463:51:0::1;;;;;;;:::i;:::-;42548:8;;42533:11;:23;;42525:59;;;::::0;-1:-1:-1;;;42525:59:0;;15884:2:1;42525:59:0::1;::::0;::::1;15866:21:1::0;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:53;16005:18;;42525:59:0::1;15682:347:1::0;42525:59:0::1;42608:6;42604:259;42620:9;42618:11;;:1;:11;42604:259;;;42680:10;42660:31;::::0;;;:19:::1;:31;::::0;;;;:33;;;::::1;::::0;::::1;:::i;:::-;;;;;;42708:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;42708:27:::1;42774:13;;42758:12;:10;:12::i;:::-;:29;;42750:51;;;;-1:-1:-1::0;;;42750:51:0::1;;;;;;;:::i;:::-;42816:35;42826:10;42838:12;:10;:12::i;:::-;42816:9;:35::i;:::-;42631:3:::0;::::1;::::0;::::1;:::i;:::-;;;;42604:259;;42890:162:::0;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;42991:53:::1;43009:4;43016:18;43036:7;42991:53;;:9;:53::i;:::-;42890:162:::0;;:::o;43713:104::-;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;43788:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;43063:235::-:0;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;43161:9:::1;43157:134;43176:20;:27;43174:1;:29;43157:134;;;43275:4;43233:14;:39;43248:20;43269:1;43248:23;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43233:39:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43233:39:0;:46;;-1:-1:-1;;43233:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43204:3;::::1;::::0;::::1;:::i;:::-;;;;43157:134;;41180:107:::0;41223:7;41254:25;:15;1017:14;;925:114;41254:25;41247:32;;41180:107;:::o;26827:239::-;26899:7;26935:16;;;:7;:16;;;;;;-1:-1:-1;;;;;26935:16:0;26970:19;26962:73;;;;-1:-1:-1;;;26962:73:0;;13236:2:1;26962:73:0;;;13218:21:1;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:1;;;13358:39;13414:19;;26962:73:0;13034:405:1;39678:21:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26557:208::-;26629:7;-1:-1:-1;;;;;26657:19:0;;26649:74;;;;-1:-1:-1;;;26649:74:0;;12825:2:1;26649:74:0;;;12807:21:1;12864:2;12844:18;;;12837:30;12903:34;12883:18;;;12876:62;-1:-1:-1;;;12954:18:1;;;12947:40;13004:19;;26649:74:0;12623:406:1;26649:74:0;-1:-1:-1;;;;;;26741:16:0;;;;;:9;:16;;;;;;;26557:208::o;6407:103::-;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;6472:30:::1;6499:1;6472:18;:30::i;:::-;6407:103::o:0;40987:91::-;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;41054:5:::1;:16:::0;40987:91::o;27302:104::-;27358:13;27391:7;27384:14;;;;;:::i;43450:133::-;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;43543:32:::1;::::0;-1:-1:-1;;;;;43543:18:0;::::1;::::0;44280:21;43543:32;::::1;;;::::0;::::1;::::0;;;44280:21;43543:18;:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;28985:155:::0;29080:52;4507:10;29113:8;29123;29080:18;:52::i;30108:328::-;30283:41;4507:10;30316:7;30283:18;:41::i;:::-;30275:103;;;;-1:-1:-1;;;30275:103:0;;;;;;;:::i;:::-;30389:39;30403:4;30409:2;30413:7;30422:5;30389:13;:39::i;:::-;30108:328;;;;:::o;41089:83::-;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;41150:5:::1;:14:::0;41089:83::o;39706:37::-;;;;;;;:::i;43828:375::-;32011:4;32035:16;;;:7;:16;;;;;;43901:13;;-1:-1:-1;;;;;32035:16:0;43932:76;;;;-1:-1:-1;;;43932:76:0;;15468:2:1;43932:76:0;;;15450:21:1;15507:2;15487:18;;;15480:30;15546:34;15526:18;;;15519:62;-1:-1:-1;;;15597:18:1;;;15590:45;15652:19;;43932:76:0;15266:411:1;43932:76:0;44021:28;44052:10;:8;:10::i;:::-;44021:41;;44111:1;44086:14;44080:28;:32;:115;;;;;;;;;;;;;;;;;44139:14;44155:18;:7;:16;:18::i;:::-;44175:13;44122:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44080:115;44073:122;43828:375;-1:-1:-1;;;43828:375:0:o;41295:741::-;40486:12;;40467:15;:31;;40459:40;;;;;;41431:10:::1;41376:19;41410:32:::0;;;:20:::1;:32;::::0;;;;;41398:44:::1;::::0;::::1;::::0;::::1;;:::i;:::-;41376:66;;41484:1;41471:9;:14;;;;:36;;;;;41502:5;;41489:9;:18;;;;41471:36;41463:70;;;::::0;-1:-1:-1;;;41463:70:0;;14757:2:1;41463:70:0::1;::::0;::::1;14739:21:1::0;14796:2;14776:18;;;14769:30;-1:-1:-1;;;14815:18:1;;;14808:51;14876:18;;41463:70:0::1;14555:345:1::0;41463:70:0::1;41573:9;41565:17;;:5;;:17;;;;:::i;:::-;41552:9;:30;;41544:86;;;;-1:-1:-1::0;;;41544:86:0::1;;;;;;;:::i;:::-;41665:9;;41649:12;:10;:12::i;:::-;:25;;41641:47;;;;-1:-1:-1::0;;;41641:47:0::1;;;;;;;:::i;:::-;41722:5;;41707:11;:20;;41699:56;;;::::0;-1:-1:-1;;;41699:56:0;;15884:2:1;41699:56:0::1;::::0;::::1;15866:21:1::0;15923:2;15903:18;;;15896:30;-1:-1:-1;;;15942:18:1;;;15935:53;16005:18;;41699:56:0::1;15682:347:1::0;41699:56:0::1;41779:6;41775:254;41790:9;41788:11;;:1;:11;41775:254;;;41850:10;41829:32;::::0;;;:20:::1;:32;::::0;;;;:34;;;::::1;::::0;::::1;:::i;:::-;;;;;;41878:27;:15;1136:19:::0;;1154:1;1136:19;;;1047:127;41878:27:::1;41944:9;;41928:12;:10;:12::i;:::-;:25;;41920:47;;;;-1:-1:-1::0;;;41920:47:0::1;;;;;;;:::i;:::-;41982:35;41992:10;42004:12;:10;:12::i;41982:35::-;41800:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41775:254;;6665:201:::0;5829:6;;-1:-1:-1;;;;;5829:6:0;4507:10;5976:23;5968:68;;;;-1:-1:-1;;;5968:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6754:22:0;::::1;6746:73;;;::::0;-1:-1:-1;;;6746:73:0;;9714:2:1;6746:73:0::1;::::0;::::1;9696:21:1::0;9753:2;9733:18;;;9726:30;9792:34;9772:18;;;9765:62;-1:-1:-1;;;9843:18:1;;;9836:36;9889:19;;6746:73:0::1;9512:402:1::0;6746:73:0::1;6830:28;6849:8;6830:18;:28::i;:::-;6665:201:::0;:::o;1047:127::-;1136:19;;1154:1;1136:19;;;1047:127::o;925:114::-;1017:14;;925:114::o;8495:387::-;8818:20;8866:8;;;8495:387::o;35924:174::-;35999:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;35999:29:0;-1:-1:-1;;;;;35999:29:0;;;;;;;;:24;;36053:23;35999:24;36053:14;:23::i;:::-;-1:-1:-1;;;;;36044:46:0;;;;;;;;;;;35924:174;;:::o;32240:348::-;32333:4;32035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32035:16:0;32350:73;;;;-1:-1:-1;;;32350:73:0;;11987:2:1;32350:73:0;;;11969:21:1;12026:2;12006:18;;;11999:30;12065:34;12045:18;;;12038:62;-1:-1:-1;;;12116:18:1;;;12109:42;12168:19;;32350:73:0;11785:408:1;32350:73:0;32434:13;32450:23;32465:7;32450:14;:23::i;:::-;32434:39;;32503:5;-1:-1:-1;;;;;32492:16:0;:7;-1:-1:-1;;;;;32492:16:0;;:51;;;;32536:7;-1:-1:-1;;;;;32512:31:0;:20;32524:7;32512:11;:20::i;:::-;-1:-1:-1;;;;;32512:31:0;;32492:51;:87;;;-1:-1:-1;;;;;;29332:25:0;;;29308:4;29332:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;32547:32;32484:96;32240:348;-1:-1:-1;;;;32240:348:0:o;35232:574::-;35391:4;-1:-1:-1;;;;;35364:31:0;:23;35379:7;35364:14;:23::i;:::-;-1:-1:-1;;;;;35364:31:0;;35356:81;;;;-1:-1:-1;;;35356:81:0;;10121:2:1;35356:81:0;;;10103:21:1;10160:2;10140:18;;;10133:30;10199:34;10179:18;;;10172:62;-1:-1:-1;;;10250:18:1;;;10243:35;10295:19;;35356:81:0;9919:401:1;35356:81:0;-1:-1:-1;;;;;35456:16:0;;35448:65;;;;-1:-1:-1;;;35448:65:0;;10884:2:1;35448:65:0;;;10866:21:1;10923:2;10903:18;;;10896:30;10962:34;10942:18;;;10935:62;-1:-1:-1;;;11013:18:1;;;11006:34;11057:19;;35448:65:0;10682:400:1;35448:65:0;35630:29;35647:1;35651:7;35630:8;:29::i;:::-;-1:-1:-1;;;;;35672:15:0;;;;;;:9;:15;;;;;:20;;35691:1;;35672:15;:20;;35691:1;;35672:20;:::i;:::-;;;;-1:-1:-1;;;;;;;35703:13:0;;;;;;:9;:13;;;;;:18;;35720:1;;35703:13;:18;;35720:1;;35703:18;:::i;:::-;;;;-1:-1:-1;;35732:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35732:21:0;-1:-1:-1;;;;;35732:21:0;;;;;;;;;35771:27;;35732:16;;35771:27;;;;;;;35232:574;;;:::o;32930:110::-;33006:26;33016:2;33020:7;33006:26;;;;;;;;;;;;:9;:26::i;7026:191::-;7119:6;;;-1:-1:-1;;;;;7136:17:0;;;-1:-1:-1;;;;;;7136:17:0;;;;;;;7169:40;;7119:6;;;7136:17;7119:6;;7169:40;;7100:16;;7169:40;7089:128;7026:191;:::o;36240:315::-;36395:8;-1:-1:-1;;;;;36386:17:0;:5;-1:-1:-1;;;;;36386:17:0;;;36378:55;;;;-1:-1:-1;;;36378:55:0;;11289:2:1;36378:55:0;;;11271:21:1;11328:2;11308:18;;;11301:30;11367:27;11347:18;;;11340:55;11412:18;;36378:55:0;11087:349:1;36378:55:0;-1:-1:-1;;;;;36444:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;36444:46:0;;;;;;;;;;36506:41;;8817::1;;;36506::0;;8790:18:1;36506:41:0;;;;;;;36240:315;;;:::o;31318:::-;31475:28;31485:4;31491:2;31495:7;31475:9;:28::i;:::-;31522:48;31545:4;31551:2;31555:7;31564:5;31522:22;:48::i;:::-;31514:111;;;;-1:-1:-1;;;31514:111:0;;;;;;;:::i;43594:108::-;43654:13;43687:7;43680:14;;;;;:::i;1936:723::-;1992:13;2213:10;2209:53;;-1:-1:-1;;2240:10:0;;;;;;;;;;;;-1:-1:-1;;;2240:10:0;;;;;1936:723::o;2209:53::-;2287:5;2272:12;2328:78;2335:9;;2328:78;;2361:8;;;;:::i;:::-;;-1:-1:-1;2384:10:0;;-1:-1:-1;2392:2:0;2384:10;;:::i;:::-;;;2328:78;;;2416:19;2448:6;2438:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2438:17:0;;2416:39;;2466:154;2473:10;;2466:154;;2500:11;2510:1;2500:11;;:::i;:::-;;-1:-1:-1;2569:10:0;2577:2;2569:5;:10;:::i;:::-;2556:24;;:2;:24;:::i;:::-;2543:39;;2526:6;2533;2526:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2526:56:0;;;;;;;;-1:-1:-1;2597:11:0;2606:2;2597:11;;:::i;:::-;;;2466:154;;33267:321;33397:18;33403:2;33407:7;33397:5;:18::i;:::-;33448:54;33479:1;33483:2;33487:7;33496:5;33448:22;:54::i;:::-;33426:154;;;;-1:-1:-1;;;33426:154:0;;;;;;;:::i;37120:799::-;37275:4;-1:-1:-1;;;;;37296:13:0;;8818:20;8866:8;37292:620;;37332:72;;-1:-1:-1;;;37332:72:0;;-1:-1:-1;;;;;37332:36:0;;;;;:72;;4507:10;;37383:4;;37389:7;;37398:5;;37332:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37332:72:0;;;;;;;;-1:-1:-1;;37332:72:0;;;;;;;;;;;;:::i;:::-;;;37328:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37574:13:0;;37570:272;;37617:60;;-1:-1:-1;;;37617:60:0;;;;;;;:::i;37570:272::-;37792:6;37786:13;37777:6;37773:2;37769:15;37762:38;37328:529;-1:-1:-1;;;;;;37455:51:0;-1:-1:-1;;;37455:51:0;;-1:-1:-1;37448:58:0;;37292:620;-1:-1:-1;37896:4:0;37120:799;;;;;;:::o;33924:382::-;-1:-1:-1;;;;;34004:16:0;;33996:61;;;;-1:-1:-1;;;33996:61:0;;13646:2:1;33996:61:0;;;13628:21:1;;;13665:18;;;13658:30;13724:34;13704:18;;;13697:62;13776:18;;33996:61:0;13444:356:1;33996:61:0;32011:4;32035:16;;;:7;:16;;;;;;-1:-1:-1;;;;;32035:16:0;:30;34068:58;;;;-1:-1:-1;;;34068:58:0;;10527:2:1;34068:58:0;;;10509:21:1;10566:2;10546:18;;;10539:30;10605;10585:18;;;10578:58;10653:18;;34068:58:0;10325:352:1;34068:58:0;-1:-1:-1;;;;;34197:13:0;;;;;;:9;:13;;;;;:18;;34214:1;;34197:13;:18;;34214:1;;34197:18;:::i;:::-;;;;-1:-1:-1;;34226:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;34226:21:0;-1:-1:-1;;;;;34226:21:0;;;;;;;;34265:33;;34226:16;;;34265:33;;34226:16;;34265:33;33924:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;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:156::-;491:20;;551:4;540:16;;530:27;;520:55;;571:1;568;561:12;520:55;425:156;;;:::o;586:247::-;645:6;698:2;686:9;677:7;673:23;669:32;666:52;;;714:1;711;704:12;666:52;753:9;740:23;772:31;797:5;772:31;:::i;1098:388::-;1166:6;1174;1227:2;1215:9;1206:7;1202:23;1198:32;1195:52;;;1243:1;1240;1233:12;1195:52;1282:9;1269:23;1301:31;1326:5;1301:31;:::i;:::-;1351:5;-1:-1:-1;1408:2:1;1393:18;;1380:32;1421:33;1380:32;1421:33;:::i;:::-;1473:7;1463:17;;;1098:388;;;;;:::o;1491:456::-;1568:6;1576;1584;1637:2;1625:9;1616:7;1612:23;1608:32;1605:52;;;1653:1;1650;1643:12;1605:52;1692:9;1679:23;1711:31;1736:5;1711:31;:::i;:::-;1761:5;-1:-1:-1;1818:2:1;1803:18;;1790:32;1831:33;1790:32;1831:33;:::i;:::-;1491:456;;1883:7;;-1:-1:-1;;;1937:2:1;1922:18;;;;1909:32;;1491:456::o;1952:794::-;2047:6;2055;2063;2071;2124:3;2112:9;2103:7;2099:23;2095:33;2092:53;;;2141:1;2138;2131:12;2092:53;2180:9;2167:23;2199:31;2224:5;2199:31;:::i;:::-;2249:5;-1:-1:-1;2306:2:1;2291:18;;2278:32;2319:33;2278:32;2319:33;:::i;:::-;2371:7;-1:-1:-1;2425:2:1;2410:18;;2397:32;;-1:-1:-1;2480:2:1;2465:18;;2452:32;2507:18;2496:30;;2493:50;;;2539:1;2536;2529:12;2493:50;2562:22;;2615:4;2607:13;;2603:27;-1:-1:-1;2593:55:1;;2644:1;2641;2634:12;2593:55;2667:73;2732:7;2727:2;2714:16;2709:2;2705;2701:11;2667:73;:::i;:::-;2657:83;;;1952:794;;;;;;;:::o;2751:416::-;2816:6;2824;2877:2;2865:9;2856:7;2852:23;2848:32;2845:52;;;2893:1;2890;2883:12;2845:52;2932:9;2919:23;2951:31;2976:5;2951:31;:::i;:::-;3001:5;-1:-1:-1;3058:2:1;3043:18;;3030:32;3100:15;;3093:23;3081:36;;3071:64;;3131:1;3128;3121:12;3172:315;3240:6;3248;3301:2;3289:9;3280:7;3276:23;3272:32;3269:52;;;3317:1;3314;3307:12;3269:52;3356:9;3343:23;3375:31;3400:5;3375:31;:::i;:::-;3425:5;3477:2;3462:18;;;;3449:32;;-1:-1:-1;;;3172:315:1:o;3492:317::-;3558:6;3566;3619:2;3607:9;3598:7;3594:23;3590:32;3587:52;;;3635:1;3632;3625:12;3587:52;3674:9;3661:23;3693:31;3718:5;3693:31;:::i;:::-;3743:5;-1:-1:-1;3767:36:1;3799:2;3784:18;;3767:36;:::i;:::-;3757:46;;3492:317;;;;;:::o;3814:1032::-;3898:6;3929:2;3972;3960:9;3951:7;3947:23;3943:32;3940:52;;;3988:1;3985;3978:12;3940:52;4028:9;4015:23;4057:18;4098:2;4090:6;4087:14;4084:34;;;4114:1;4111;4104:12;4084:34;4152:6;4141:9;4137:22;4127:32;;4197:7;4190:4;4186:2;4182:13;4178:27;4168:55;;4219:1;4216;4209:12;4168:55;4255:2;4242:16;4277:2;4273;4270:10;4267:36;;;4283:18;;:::i;:::-;4329:2;4326:1;4322:10;4312:20;;4352:28;4376:2;4372;4368:11;4352:28;:::i;:::-;4414:15;;;4445:12;;;;4477:11;;;4507;;;4503:20;;4500:33;-1:-1:-1;4497:53:1;;;4546:1;4543;4536:12;4497:53;4568:1;4559:10;;4578:238;4592:2;4589:1;4586:9;4578:238;;;4663:3;4650:17;4637:30;;4680:31;4705:5;4680:31;:::i;:::-;4724:18;;;4610:1;4603:9;;;;;4762:12;;;;4794;;4578:238;;;-1:-1:-1;4835:5:1;3814:1032;-1:-1:-1;;;;;;;;3814:1032:1:o;4851:245::-;4909:6;4962:2;4950:9;4941:7;4937:23;4933:32;4930:52;;;4978:1;4975;4968:12;4930:52;5017:9;5004:23;5036:30;5060:5;5036:30;:::i;5101:249::-;5170:6;5223:2;5211:9;5202:7;5198:23;5194:32;5191:52;;;5239:1;5236;5229:12;5191:52;5271:9;5265:16;5290:30;5314:5;5290:30;:::i;5355:450::-;5424:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:52;;;5493:1;5490;5483:12;5445:52;5533:9;5520:23;5566:18;5558:6;5555:30;5552:50;;;5598:1;5595;5588:12;5552:50;5621:22;;5674:4;5666:13;;5662:27;-1:-1:-1;5652:55:1;;5703:1;5700;5693:12;5652:55;5726:73;5791:7;5786:2;5773:16;5768:2;5764;5760:11;5726:73;:::i;5810:180::-;5869:6;5922:2;5910:9;5901:7;5897:23;5893:32;5890:52;;;5938:1;5935;5928:12;5890:52;-1:-1:-1;5961:23:1;;5810:180;-1:-1:-1;5810:180:1:o;5995:182::-;6052:6;6105:2;6093:9;6084:7;6080:23;6076:32;6073:52;;;6121:1;6118;6111:12;6073:52;6144:27;6161:9;6144:27;:::i;6182:257::-;6223:3;6261:5;6255:12;6288:6;6283:3;6276:19;6304:63;6360:6;6353:4;6348:3;6344:14;6337:4;6330:5;6326:16;6304:63;:::i;:::-;6421:2;6400:15;-1:-1:-1;;6396:29:1;6387:39;;;;6428:4;6383:50;;6182:257;-1:-1:-1;;6182:257:1:o;6444:1527::-;6668:3;6706:6;6700:13;6732:4;6745:51;6789:6;6784:3;6779:2;6771:6;6767:15;6745:51;:::i;:::-;6859:13;;6818:16;;;;6881:55;6859:13;6818:16;6903:15;;;6881:55;:::i;:::-;7025:13;;6958:20;;;6998:1;;7085;7107:18;;;;7160;;;;7187:93;;7265:4;7255:8;7251:19;7239:31;;7187:93;7328:2;7318:8;7315:16;7295:18;7292:40;7289:167;;;-1:-1:-1;;;7355:33:1;;7411:4;7408:1;7401:15;7441:4;7362:3;7429:17;7289:167;7472:18;7499:110;;;;7623:1;7618:328;;;;7465:481;;7499:110;-1:-1:-1;;7534:24:1;;7520:39;;7579:20;;;;-1:-1:-1;7499:110:1;;7618:328;18153:1;18146:14;;;18190:4;18177:18;;7713:1;7727:169;7741:8;7738:1;7735:15;7727:169;;;7823:14;;7808:13;;;7801:37;7866:16;;;;7758:10;;7727:169;;;7731:3;;7927:8;7920:5;7916:20;7909:27;;7465:481;-1:-1:-1;7962:3:1;;6444:1527;-1:-1:-1;;;;;;;;;;;6444:1527:1:o;8184:488::-;-1:-1:-1;;;;;8453:15:1;;;8435:34;;8505:15;;8500:2;8485:18;;8478:43;8552:2;8537:18;;8530:34;;;8600:3;8595:2;8580:18;;8573:31;;;8378:4;;8621:45;;8646:19;;8638:6;8621:45;:::i;:::-;8613:53;8184:488;-1:-1:-1;;;;;;8184:488:1:o;8869:219::-;9018:2;9007:9;9000:21;8981:4;9038:44;9078:2;9067:9;9063:18;9055:6;9038:44;:::i;9093:414::-;9295:2;9277:21;;;9334:2;9314:18;;;9307:30;9373:34;9368:2;9353:18;;9346:62;-1:-1:-1;;;9439:2:1;9424:18;;9417:48;9497:3;9482:19;;9093:414::o;14218:332::-;14420:2;14402:21;;;14459:1;14439:18;;;14432:29;-1:-1:-1;;;14492:2:1;14477:18;;14470:39;14541:2;14526:18;;14218:332::o;14905:356::-;15107:2;15089:21;;;15126:18;;;15119:30;15185:34;15180:2;15165:18;;15158:62;15252:2;15237:18;;14905:356::o;16436:413::-;16638:2;16620:21;;;16677:2;16657:18;;;16650:30;16716:34;16711:2;16696:18;;16689:62;-1:-1:-1;;;16782:2:1;16767:18;;16760:47;16839:3;16824:19;;16436:413::o;17206:407::-;17408:2;17390:21;;;17447:2;17427:18;;;17420:30;17486:34;17481:2;17466:18;;17459:62;-1:-1:-1;;;17552:2:1;17537:18;;17530:41;17603:3;17588:19;;17206:407::o;17800:275::-;17871:2;17865:9;17936:2;17917:13;;-1:-1:-1;;17913:27:1;17901:40;;17971:18;17956:34;;17992:22;;;17953:62;17950:88;;;18018:18;;:::i;:::-;18054:2;18047:22;17800:275;;-1:-1:-1;17800:275:1:o;18206:128::-;18246:3;18277:1;18273:6;18270:1;18267:13;18264:39;;;18283:18;;:::i;:::-;-1:-1:-1;18319:9:1;;18206:128::o;18339:120::-;18379:1;18405;18395:35;;18410:18;;:::i;:::-;-1:-1:-1;18444:9:1;;18339:120::o;18464:168::-;18504:7;18570:1;18566;18562:6;18558:14;18555:1;18552:21;18547:1;18540:9;18533:17;18529:45;18526:71;;;18577:18;;:::i;:::-;-1:-1:-1;18617:9:1;;18464:168::o;18637:125::-;18677:4;18705:1;18702;18699:8;18696:34;;;18710:18;;:::i;:::-;-1:-1:-1;18747:9:1;;18637:125::o;18767:258::-;18839:1;18849:113;18863:6;18860:1;18857:13;18849:113;;;18939:11;;;18933:18;18920:11;;;18913:39;18885:2;18878:10;18849:113;;;18980:6;18977:1;18974:13;18971:48;;;-1:-1:-1;;19015:1:1;18997:16;;18990:27;18767:258::o;19030:380::-;19109:1;19105:12;;;;19152;;;19173:61;;19227:4;19219:6;19215:17;19205:27;;19173:61;19280:2;19272:6;19269:14;19249:18;19246:38;19243:161;;;19326:10;19321:3;19317:20;19314:1;19307:31;19361:4;19358:1;19351:15;19389:4;19386:1;19379:15;19243:161;;19030:380;;;:::o;19415:135::-;19454:3;-1:-1:-1;;19475:17:1;;19472:43;;;19495:18;;:::i;:::-;-1:-1:-1;19542:1:1;19531:13;;19415:135::o;19555:112::-;19587:1;19613;19603:35;;19618:18;;:::i;:::-;-1:-1:-1;19652:9:1;;19555:112::o;19672:127::-;19733:10;19728:3;19724:20;19721:1;19714:31;19764:4;19761:1;19754:15;19788:4;19785:1;19778:15;19804:127;19865:10;19860:3;19856:20;19853:1;19846:31;19896:4;19893:1;19886:15;19920:4;19917:1;19910:15;19936:127;19997:10;19992:3;19988:20;19985:1;19978:31;20028:4;20025:1;20018:15;20052:4;20049:1;20042:15;20068:127;20129:10;20124:3;20120:20;20117:1;20110:31;20160:4;20157:1;20150:15;20184:4;20181:1;20174:15;20200:131;-1:-1:-1;;;;;20275:31:1;;20265:42;;20255:70;;20321:1;20318;20311:12;20336:131;-1:-1:-1;;;;;;20410:32:1;;20400:43;;20390:71;;20457:1;20454;20447:12

Swarm Source

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