Token CryptoChillouts

 

Overview ERC-721

Total Supply:
4,836 C-OUT

Holders:
143 addresses

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoChillouts

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-09-07
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC721/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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //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 of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev 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: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: @openzeppelin/contracts/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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: contracts/CryptoChillout.sol



pragma solidity ^0.8.4;



contract CryptoChillouts is ERC721Enumerable, Ownable {  
    using Address for address;
    
    using Strings for uint256;
    
    // Starting and stopping sale
    bool public saleActive = true;

    // Reserved for the team and giveaways, this won't change
    uint256 public reserved = 300;

    // Price of each token
    uint256 public price = 0.5 ether;

    // Maximum limit of tokens supply, this won't change
    uint256 constant MAX_SUPPLY = 100000;

    // The Base token URI for the metadata
    string public baseTokenURI;

    bool private reentrancyLock = false;
    
    // Storing the tokenURI with respect to tokenId
    mapping(uint256 => string) public tokenIdToTokenURI;

    // to indicate opensea that out metadata and image is stored in ipfs and non editable
    event PermanentURI(string _value, uint256 indexed _id);

    /**
     * Event emitted when ETH is deposited into the contract.
     */
    event Deposit(address indexed account, uint amount);

    constructor (string memory newBaseURI) ERC721("CryptoChillouts", "C-OUT") {
        setBaseURI(newBaseURI);
    }

    /* Prevent a contract function from being reentrant-called. */
    modifier reentrancyGuard {
        if (reentrancyLock) {
            revert();
        }
        reentrancyLock = true;
        _;
        reentrancyLock = false;
    }

    // Overriding the openzeppelin tokenURI() method which will use this method to create the full tokenURI
    function _baseURI() internal view virtual override returns (string memory) {
        return baseTokenURI;
    }
    
    // Overriding the openzeppelin, which will take our ipfs hashed tokenURI
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory currentBaseURI = _baseURI();
        string memory currentTokenURI = tokenIdToTokenURI[tokenId];
        return (bytes(currentBaseURI).length > 0 && bytes(currentTokenURI).length > 0) ? 
            string(abi.encodePacked(currentBaseURI, currentTokenURI)) : "";
    }

    // See which address owns which tokens
    function tokensOfOwner(address _addr) public view returns(uint256[] memory) {
        require(_addr != address(0), "Invalid address to reserve.");
        uint256 tokenCount = balanceOf(_addr);
        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint256 i; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_addr, i);
        }
        return tokensId;
    }


    // Standard mint function
    function mintToken(uint256 _amount, string[] memory _tokenURIs) public payable onlyOwner reentrancyGuard {
        uint256 supply = totalSupply();
        require( saleActive, "Sale isn't active" );
        require( _amount > 0 && _amount <= 20,    "Can only mint between 1 and 20 tokens at once" );
        require( _tokenURIs.length > 0 && _tokenURIs.length <= 20, "Can only mint between 1 and 20 tokens at once" );
        require( _tokenURIs.length == _amount, "tokenURI and number of mintable tokens are not same" );
        require( supply + _amount <= MAX_SUPPLY, "Can't mint more than max supply" );

        if (msg.sender != owner()) {
            require( msg.value == price * _amount, "Wrong amount of ETH sent" );
        }

        for(uint256 i = 1; i <= _amount; i++){
            tokenIdToTokenURI[supply + i] = _tokenURIs[i - 1];
            _safeMint(msg.sender, supply + i );
            emit PermanentURI(_tokenURIs[i - 1], supply + i );
        }
    }

    // Admin minting function to reserve tokens for the team and giveaways
    function mintReserved(uint256 _amount, string[] memory _tokenURIs) public onlyOwner {
        // Limited to a publicly set amount
        require( _amount <= reserved, "Can't reserve more than set amount" );
        require( _tokenURIs.length <= reserved, "Can't reserve more than set amount" );
        require( _tokenURIs.length == _amount, "tokenURI and number of mintable tokens are not same" );
        reserved -= _amount;
        uint256 supply = totalSupply();
        for(uint256 i = 1; i <= _amount; i++){
            tokenIdToTokenURI[supply + i] = _tokenURIs[i - 1];
            _safeMint(msg.sender, supply + i );
            emit PermanentURI(_tokenURIs[i - 1], supply + i );
        }
    }

    // Start and stop sale
    function setSaleActive(bool val) public onlyOwner {
        saleActive = val;
    }

    // Set new baseURI
    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
    }

    // Set a different price in case ETH changes drastically
    function setPrice(uint256 newPrice) public onlyOwner {
        price = newPrice;
    }

    // Get a contract stored price for withdraw
    function contractBalance() public onlyOwner view returns (uint256 balance) {
        return address(this).balance;
    }

    // withdraw the ether for the owner
    function withdraw() public payable reentrancyGuard onlyOwner {
        require(payable(msg.sender).send(address(this).balance));
    }

    // To deposit required ETH or getting donation from community
    function deposit() external payable {
        emit Deposit(msg.sender, msg.value);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"newBaseURI","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":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_value","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"PermanentURI","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":"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string[]","name":"_tokenURIs","type":"string[]"}],"name":"mintReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"string[]","name":"_tokenURIs","type":"string[]"}],"name":"mintToken","outputs":[],"stateMutability":"payable","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":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserved","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":"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":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setSaleActive","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526001600a60146101000a81548160ff02191690831515021790555061012c600b556706f05b59d3b20000600c556000600e60006101000a81548160ff0219169083151502179055503480156200005957600080fd5b50604051620050953803806200509583398181016040528101906200007f91906200041c565b6040518060400160405280600f81526020017f43727970746f4368696c6c6f75747300000000000000000000000000000000008152506040518060400160405280600581526020017f432d4f5554000000000000000000000000000000000000000000000000000000815250816000908051906020019062000103929190620002fa565b5080600190805190602001906200011c929190620002fa565b5050506200013f620001336200015760201b60201c565b6200015f60201b60201c565b62000150816200022560201b60201c565b5062000654565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002356200015760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025b620002d060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ab9062000488565b60405180910390fd5b80600d9080519060200190620002cc929190620002fa565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003089062000550565b90600052602060002090601f0160209004810192826200032c576000855562000378565b82601f106200034757805160ff191683800117855562000378565b8280016001018555821562000378579182015b82811115620003775782518255916020019190600101906200035a565b5b5090506200038791906200038b565b5090565b5b80821115620003a65760008160009055506001016200038c565b5090565b6000620003c1620003bb84620004d3565b620004aa565b905082815260208101848484011115620003da57600080fd5b620003e78482856200051a565b509392505050565b600082601f8301126200040157600080fd5b815162000413848260208601620003aa565b91505092915050565b6000602082840312156200042f57600080fd5b600082015167ffffffffffffffff8111156200044a57600080fd5b6200045884828501620003ef565b91505092915050565b60006200047060208362000509565b91506200047d826200062b565b602082019050919050565b60006020820190508181036000830152620004a38162000461565b9050919050565b6000620004b6620004c9565b9050620004c4828262000586565b919050565b6000604051905090565b600067ffffffffffffffff821115620004f157620004f0620005eb565b5b620004fc826200061a565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200053a5780820151818401526020810190506200051d565b838111156200054a576000848401525b50505050565b600060028204905060018216806200056957607f821691505b6020821081141562000580576200057f620005bc565b5b50919050565b62000591826200061a565b810181811067ffffffffffffffff82111715620005b357620005b2620005eb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614a3180620006646000396000f3fe6080604052600436106101ee5760003560e01c8063819cb2f51161010d578063a22cb465116100a0578063d547cfb71161006f578063d547cfb7146106d4578063d9d65e46146106ff578063e985e9c514610728578063f2fde38b14610765578063fe60d12c1461078e576101ee565b8063a22cb4651461063b578063b88d4fde14610664578063c87b56dd1461068d578063d0e30db0146106ca576101ee565b80638da5cb5b116100dc5780638da5cb5b1461059157806391b7f5ed146105bc57806395d89b41146105e5578063a035b1fe14610610576101ee565b8063819cb2f5146104e4578063841718a6146105005780638462151c146105295780638b7afe2e14610566576101ee565b806342842e0e116101855780636352211e116101545780636352211e1461042857806368428a1b1461046557806370a0823114610490578063715018a6146104cd576101ee565b806342842e0e1461035c5780634f6ccce71461038557806355f804b3146103c25780635ebfebce146103eb576101ee565b806318160ddd116101c157806318160ddd146102c157806323b872dd146102ec5780632f745c59146103155780633ccfd60b14610352576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190613510565b6107b9565b6040516102279190613b8d565b60405180910390f35b34801561023c57600080fd5b50610245610833565b6040516102529190613ba8565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d91906135a3565b6108c5565b60405161028f9190613b04565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906134ab565b61094a565b005b3480156102cd57600080fd5b506102d6610a62565b6040516102e39190613eea565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e91906133a5565b610a6f565b005b34801561032157600080fd5b5061033c600480360381019061033791906134ab565b610acf565b6040516103499190613eea565b60405180910390f35b61035a610b74565b005b34801561036857600080fd5b50610383600480360381019061037e91906133a5565b610c80565b005b34801561039157600080fd5b506103ac60048036038101906103a791906135a3565b610ca0565b6040516103b99190613eea565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190613562565b610d37565b005b3480156103f757600080fd5b50610412600480360381019061040d91906135a3565b610dcd565b60405161041f9190613ba8565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906135a3565b610e6d565b60405161045c9190613b04565b60405180910390f35b34801561047157600080fd5b5061047a610f1f565b6040516104879190613b8d565b60405180910390f35b34801561049c57600080fd5b506104b760048036038101906104b29190613340565b610f32565b6040516104c49190613eea565b60405180910390f35b3480156104d957600080fd5b506104e2610fea565b005b6104fe60048036038101906104f991906135cc565b611072565b005b34801561050c57600080fd5b50610527600480360381019061052291906134e7565b6114a3565b005b34801561053557600080fd5b50610550600480360381019061054b9190613340565b61153c565b60405161055d9190613b6b565b60405180910390f35b34801561057257600080fd5b5061057b6116a6565b6040516105889190613eea565b60405180910390f35b34801561059d57600080fd5b506105a661172a565b6040516105b39190613b04565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de91906135a3565b611754565b005b3480156105f157600080fd5b506105fa6117da565b6040516106079190613ba8565b60405180910390f35b34801561061c57600080fd5b5061062561186c565b6040516106329190613eea565b60405180910390f35b34801561064757600080fd5b50610662600480360381019061065d919061346f565b611872565b005b34801561067057600080fd5b5061068b600480360381019061068691906133f4565b6119f3565b005b34801561069957600080fd5b506106b460048036038101906106af91906135a3565b611a55565b6040516106c19190613ba8565b60405180910390f35b6106d2611ba2565b005b3480156106e057600080fd5b506106e9611bf2565b6040516106f69190613ba8565b60405180910390f35b34801561070b57600080fd5b50610726600480360381019061072191906135cc565b611c80565b005b34801561073457600080fd5b5061074f600480360381019061074a9190613369565b611f39565b60405161075c9190613b8d565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613340565b611fcd565b005b34801561079a57600080fd5b506107a36120c5565b6040516107b09190613eea565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061082c575061082b826120cb565b5b9050919050565b606060008054610842906141ce565b80601f016020809104026020016040519081016040528092919081815260200182805461086e906141ce565b80156108bb5780601f10610890576101008083540402835291602001916108bb565b820191906000526020600020905b81548152906001019060200180831161089e57829003601f168201915b5050505050905090565b60006108d0826121ad565b61090f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090690613daa565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061095582610e6d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bd90613e4a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109e5612219565b73ffffffffffffffffffffffffffffffffffffffff161480610a145750610a1381610a0e612219565b611f39565b5b610a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4a90613d0a565b60405180910390fd5b610a5d8383612221565b505050565b6000600880549050905090565b610a80610a7a612219565b826122da565b610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab690613e8a565b60405180910390fd5b610aca8383836123b8565b505050565b6000610ada83610f32565b8210610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290613bea565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600e60009054906101000a900460ff1615610b8e57600080fd5b6001600e60006101000a81548160ff021916908315150217905550610bb1612219565b73ffffffffffffffffffffffffffffffffffffffff16610bcf61172a565b73ffffffffffffffffffffffffffffffffffffffff1614610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90613dca565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610c6357600080fd5b6000600e60006101000a81548160ff021916908315150217905550565b610c9b838383604051806020016040528060008152506119f3565b505050565b6000610caa610a62565b8210610ceb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce290613eaa565b60405180910390fd5b60088281548110610d25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d3f612219565b73ffffffffffffffffffffffffffffffffffffffff16610d5d61172a565b73ffffffffffffffffffffffffffffffffffffffff1614610db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daa90613dca565b60405180910390fd5b80600d9080519060200190610dc99291906130b4565b5050565b600f6020528060005260406000206000915090508054610dec906141ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610e18906141ce565b8015610e655780601f10610e3a57610100808354040283529160200191610e65565b820191906000526020600020905b815481529060010190602001808311610e4857829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0d90613d4a565b60405180910390fd5b80915050919050565b600a60149054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90613d2a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ff2612219565b73ffffffffffffffffffffffffffffffffffffffff1661101061172a565b73ffffffffffffffffffffffffffffffffffffffff1614611066576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105d90613dca565b60405180910390fd5b6110706000612614565b565b61107a612219565b73ffffffffffffffffffffffffffffffffffffffff1661109861172a565b73ffffffffffffffffffffffffffffffffffffffff16146110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e590613dca565b60405180910390fd5b600e60009054906101000a900460ff161561110857600080fd5b6001600e60006101000a81548160ff021916908315150217905550600061112d610a62565b9050600a60149054906101000a900460ff1661117e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117590613e2a565b60405180910390fd5b60008311801561118f575060148311155b6111ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c590613bca565b60405180910390fd5b600082511180156111e157506014825111155b611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613bca565b60405180910390fd5b82825114611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a90613cca565b60405180910390fd5b620186a083826112739190614034565b11156112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613c6a565b60405180910390fd5b6112bc61172a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133e5782600c546112fc919061408a565b341461133d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133490613eca565b60405180910390fd5b5b6000600190505b838111611482578260018261135a91906140e4565b81518110611391577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600f600083856113a99190614034565b815260200190815260200160002090805190602001906113ca9291906130b4565b506113e03382846113db9190614034565b6126da565b80826113ec9190614034565b7fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b556572078460018461141b91906140e4565b81518110611452577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040516114679190613ba8565b60405180910390a2808061147a90614231565b915050611345565b50506000600e60006101000a81548160ff0219169083151502179055505050565b6114ab612219565b73ffffffffffffffffffffffffffffffffffffffff166114c961172a565b73ffffffffffffffffffffffffffffffffffffffff161461151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613dca565b60405180910390fd5b80600a60146101000a81548160ff02191690831515021790555050565b6060600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590613e6a565b60405180910390fd5b60006115b983610f32565b905060008167ffffffffffffffff8111156115fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561162b5781602001602082028036833780820191505090505b50905060005b8281101561169b576116438582610acf565b82828151811061167c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050808061169390614231565b915050611631565b508092505050919050565b60006116b0612219565b73ffffffffffffffffffffffffffffffffffffffff166116ce61172a565b73ffffffffffffffffffffffffffffffffffffffff1614611724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171b90613dca565b60405180910390fd5b47905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61175c612219565b73ffffffffffffffffffffffffffffffffffffffff1661177a61172a565b73ffffffffffffffffffffffffffffffffffffffff16146117d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c790613dca565b60405180910390fd5b80600c8190555050565b6060600180546117e9906141ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611815906141ce565b80156118625780601f1061183757610100808354040283529160200191611862565b820191906000526020600020905b81548152906001019060200180831161184557829003601f168201915b5050505050905090565b600c5481565b61187a612219565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613caa565b60405180910390fd5b80600560006118f5612219565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166119a2612219565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516119e79190613b8d565b60405180910390a35050565b611a046119fe612219565b836122da565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a90613e8a565b60405180910390fd5b611a4f848484846126f8565b50505050565b6060611a60826121ad565b611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613e0a565b60405180910390fd5b6000611aa9612754565b90506000600f60008581526020019081526020016000208054611acb906141ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611af7906141ce565b8015611b445780601f10611b1957610100808354040283529160200191611b44565b820191906000526020600020905b815481529060010190602001808311611b2757829003601f168201915b5050505050905060008251118015611b5d575060008151115b611b765760405180602001604052806000815250611b99565b8181604051602001611b89929190613ae0565b6040516020818303038152906040525b92505050919050565b3373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c34604051611be89190613eea565b60405180910390a2565b600d8054611bff906141ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2b906141ce565b8015611c785780601f10611c4d57610100808354040283529160200191611c78565b820191906000526020600020905b815481529060010190602001808311611c5b57829003601f168201915b505050505081565b611c88612219565b73ffffffffffffffffffffffffffffffffffffffff16611ca661172a565b73ffffffffffffffffffffffffffffffffffffffff1614611cfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf390613dca565b60405180910390fd5b600b54821115611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890613d8a565b60405180910390fd5b600b5481511115611d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7e90613d8a565b60405180910390fd5b81815114611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc190613cca565b60405180910390fd5b81600b6000828254611ddc91906140e4565b925050819055506000611ded610a62565b90506000600190505b838111611f335782600182611e0b91906140e4565b81518110611e42577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600f60008385611e5a9190614034565b81526020019081526020016000209080519060200190611e7b9291906130b4565b50611e91338284611e8c9190614034565b6126da565b8082611e9d9190614034565b7fa109ba539900bf1b633f956d63c96fc89b814c7287f7aa50a9216d0b5565720784600184611ecc91906140e4565b81518110611f03577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151604051611f189190613ba8565b60405180910390a28080611f2b90614231565b915050611df6565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fd5612219565b73ffffffffffffffffffffffffffffffffffffffff16611ff361172a565b73ffffffffffffffffffffffffffffffffffffffff1614612049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204090613dca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613c2a565b60405180910390fd5b6120c281612614565b50565b600b5481565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061219657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806121a657506121a5826127e6565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661229483610e6d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006122e5826121ad565b612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613cea565b60405180910390fd5b600061232f83610e6d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061239e57508373ffffffffffffffffffffffffffffffffffffffff16612386846108c5565b73ffffffffffffffffffffffffffffffffffffffff16145b806123af57506123ae8185611f39565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166123d882610e6d565b73ffffffffffffffffffffffffffffffffffffffff161461242e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242590613dea565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561249e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249590613c8a565b60405180910390fd5b6124a9838383612850565b6124b4600082612221565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461250491906140e4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255b9190614034565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126f4828260405180602001604052806000815250612964565b5050565b6127038484846123b8565b61270f848484846129bf565b61274e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274590613c0a565b60405180910390fd5b50505050565b6060600d8054612763906141ce565b80601f016020809104026020016040519081016040528092919081815260200182805461278f906141ce565b80156127dc5780601f106127b1576101008083540402835291602001916127dc565b820191906000526020600020905b8154815290600101906020018083116127bf57829003601f168201915b5050505050905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61285b838383612b56565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289e5761289981612b5b565b6128dd565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128dc576128db8382612ba4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129205761291b81612d11565b61295f565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461295e5761295d8282612e54565b5b5b505050565b61296e8383612ed3565b61297b60008484846129bf565b6129ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b190613c0a565b60405180910390fd5b505050565b60006129e08473ffffffffffffffffffffffffffffffffffffffff166130a1565b15612b49578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a09612219565b8786866040518563ffffffff1660e01b8152600401612a2b9493929190613b1f565b602060405180830381600087803b158015612a4557600080fd5b505af1925050508015612a7657506040513d601f19601f82011682018060405250810190612a739190613539565b60015b612af9573d8060008114612aa6576040519150601f19603f3d011682016040523d82523d6000602084013e612aab565b606091505b50600081511415612af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae890613c0a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b4e565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612bb184610f32565b612bbb91906140e4565b9050600060076000848152602001908152602001600020549050818114612ca0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d2591906140e4565b9050600060096000848152602001908152602001600020549050600060088381548110612d7b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612dc3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e38577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612e5f83610f32565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3a90613d6a565b60405180910390fd5b612f4c816121ad565b15612f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8390613c4a565b60405180910390fd5b612f9860008383612850565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612fe89190614034565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546130c0906141ce565b90600052602060002090601f0160209004810192826130e25760008555613129565b82601f106130fb57805160ff1916838001178555613129565b82800160010185558215613129579182015b8281111561312857825182559160200191906001019061310d565b5b509050613136919061313a565b5090565b5b8082111561315357600081600090555060010161313b565b5090565b600061316a61316584613f2a565b613f05565b9050808382526020820190508285602086028201111561318957600080fd5b60005b858110156131d357813567ffffffffffffffff8111156131ab57600080fd5b8086016131b88982613301565b8552602085019450602084019350505060018101905061318c565b5050509392505050565b60006131f06131eb84613f56565b613f05565b90508281526020810184848401111561320857600080fd5b61321384828561418c565b509392505050565b600061322e61322984613f87565b613f05565b90508281526020810184848401111561324657600080fd5b61325184828561418c565b509392505050565b6000813590506132688161499f565b92915050565b600082601f83011261327f57600080fd5b813561328f848260208601613157565b91505092915050565b6000813590506132a7816149b6565b92915050565b6000813590506132bc816149cd565b92915050565b6000815190506132d1816149cd565b92915050565b600082601f8301126132e857600080fd5b81356132f88482602086016131dd565b91505092915050565b600082601f83011261331257600080fd5b813561332284826020860161321b565b91505092915050565b60008135905061333a816149e4565b92915050565b60006020828403121561335257600080fd5b600061336084828501613259565b91505092915050565b6000806040838503121561337c57600080fd5b600061338a85828601613259565b925050602061339b85828601613259565b9150509250929050565b6000806000606084860312156133ba57600080fd5b60006133c886828701613259565b93505060206133d986828701613259565b92505060406133ea8682870161332b565b9150509250925092565b6000806000806080858703121561340a57600080fd5b600061341887828801613259565b945050602061342987828801613259565b935050604061343a8782880161332b565b925050606085013567ffffffffffffffff81111561345757600080fd5b613463878288016132d7565b91505092959194509250565b6000806040838503121561348257600080fd5b600061349085828601613259565b92505060206134a185828601613298565b9150509250929050565b600080604083850312156134be57600080fd5b60006134cc85828601613259565b92505060206134dd8582860161332b565b9150509250929050565b6000602082840312156134f957600080fd5b600061350784828501613298565b91505092915050565b60006020828403121561352257600080fd5b6000613530848285016132ad565b91505092915050565b60006020828403121561354b57600080fd5b6000613559848285016132c2565b91505092915050565b60006020828403121561357457600080fd5b600082013567ffffffffffffffff81111561358e57600080fd5b61359a84828501613301565b91505092915050565b6000602082840312156135b557600080fd5b60006135c38482850161332b565b91505092915050565b600080604083850312156135df57600080fd5b60006135ed8582860161332b565b925050602083013567ffffffffffffffff81111561360a57600080fd5b6136168582860161326e565b9150509250929050565b600061362c8383613ac2565b60208301905092915050565b61364181614118565b82525050565b600061365282613fc8565b61365c8185613ff6565b935061366783613fb8565b8060005b8381101561369857815161367f8882613620565b975061368a83613fe9565b92505060018101905061366b565b5085935050505092915050565b6136ae8161412a565b82525050565b60006136bf82613fd3565b6136c98185614007565b93506136d981856020860161419b565b6136e281614307565b840191505092915050565b60006136f882613fde565b6137028185614018565b935061371281856020860161419b565b61371b81614307565b840191505092915050565b600061373182613fde565b61373b8185614029565b935061374b81856020860161419b565b80840191505092915050565b6000613764602d83614018565b915061376f82614318565b604082019050919050565b6000613787602b83614018565b915061379282614367565b604082019050919050565b60006137aa603283614018565b91506137b5826143b6565b604082019050919050565b60006137cd602683614018565b91506137d882614405565b604082019050919050565b60006137f0601c83614018565b91506137fb82614454565b602082019050919050565b6000613813601f83614018565b915061381e8261447d565b602082019050919050565b6000613836602483614018565b9150613841826144a6565b604082019050919050565b6000613859601983614018565b9150613864826144f5565b602082019050919050565b600061387c603383614018565b91506138878261451e565b604082019050919050565b600061389f602c83614018565b91506138aa8261456d565b604082019050919050565b60006138c2603883614018565b91506138cd826145bc565b604082019050919050565b60006138e5602a83614018565b91506138f08261460b565b604082019050919050565b6000613908602983614018565b91506139138261465a565b604082019050919050565b600061392b602083614018565b9150613936826146a9565b602082019050919050565b600061394e602283614018565b9150613959826146d2565b604082019050919050565b6000613971602c83614018565b915061397c82614721565b604082019050919050565b6000613994602083614018565b915061399f82614770565b602082019050919050565b60006139b7602983614018565b91506139c282614799565b604082019050919050565b60006139da602f83614018565b91506139e5826147e8565b604082019050919050565b60006139fd601183614018565b9150613a0882614837565b602082019050919050565b6000613a20602183614018565b9150613a2b82614860565b604082019050919050565b6000613a43601b83614018565b9150613a4e826148af565b602082019050919050565b6000613a66603183614018565b9150613a71826148d8565b604082019050919050565b6000613a89602c83614018565b9150613a9482614927565b604082019050919050565b6000613aac601883614018565b9150613ab782614976565b602082019050919050565b613acb81614182565b82525050565b613ada81614182565b82525050565b6000613aec8285613726565b9150613af88284613726565b91508190509392505050565b6000602082019050613b196000830184613638565b92915050565b6000608082019050613b346000830187613638565b613b416020830186613638565b613b4e6040830185613ad1565b8181036060830152613b6081846136b4565b905095945050505050565b60006020820190508181036000830152613b858184613647565b905092915050565b6000602082019050613ba260008301846136a5565b92915050565b60006020820190508181036000830152613bc281846136ed565b905092915050565b60006020820190508181036000830152613be381613757565b9050919050565b60006020820190508181036000830152613c038161377a565b9050919050565b60006020820190508181036000830152613c238161379d565b9050919050565b60006020820190508181036000830152613c43816137c0565b9050919050565b60006020820190508181036000830152613c63816137e3565b9050919050565b60006020820190508181036000830152613c8381613806565b9050919050565b60006020820190508181036000830152613ca381613829565b9050919050565b60006020820190508181036000830152613cc38161384c565b9050919050565b60006020820190508181036000830152613ce38161386f565b9050919050565b60006020820190508181036000830152613d0381613892565b9050919050565b60006020820190508181036000830152613d23816138b5565b9050919050565b60006020820190508181036000830152613d43816138d8565b9050919050565b60006020820190508181036000830152613d63816138fb565b9050919050565b60006020820190508181036000830152613d838161391e565b9050919050565b60006020820190508181036000830152613da381613941565b9050919050565b60006020820190508181036000830152613dc381613964565b9050919050565b60006020820190508181036000830152613de381613987565b9050919050565b60006020820190508181036000830152613e03816139aa565b9050919050565b60006020820190508181036000830152613e23816139cd565b9050919050565b60006020820190508181036000830152613e43816139f0565b9050919050565b60006020820190508181036000830152613e6381613a13565b9050919050565b60006020820190508181036000830152613e8381613a36565b9050919050565b60006020820190508181036000830152613ea381613a59565b9050919050565b60006020820190508181036000830152613ec381613a7c565b9050919050565b60006020820190508181036000830152613ee381613a9f565b9050919050565b6000602082019050613eff6000830184613ad1565b92915050565b6000613f0f613f20565b9050613f1b8282614200565b919050565b6000604051905090565b600067ffffffffffffffff821115613f4557613f446142d8565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f7157613f706142d8565b5b613f7a82614307565b9050602081019050919050565b600067ffffffffffffffff821115613fa257613fa16142d8565b5b613fab82614307565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061403f82614182565b915061404a83614182565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561407f5761407e61427a565b5b828201905092915050565b600061409582614182565b91506140a083614182565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156140d9576140d861427a565b5b828202905092915050565b60006140ef82614182565b91506140fa83614182565b92508282101561410d5761410c61427a565b5b828203905092915050565b600061412382614162565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156141b957808201518184015260208101905061419e565b838111156141c8576000848401525b50505050565b600060028204905060018216806141e657607f821691505b602082108114156141fa576141f96142a9565b5b50919050565b61420982614307565b810181811067ffffffffffffffff82111715614228576142276142d8565b5b80604052505050565b600061423c82614182565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561426f5761426e61427a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f43616e206f6e6c79206d696e74206265747765656e203120616e64203230207460008201527f6f6b656e73206174206f6e636500000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f43616e2774206d696e74206d6f7265207468616e206d617820737570706c7900600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f746f6b656e55524920616e64206e756d626572206f66206d696e7461626c652060008201527f746f6b656e7320617265206e6f742073616d6500000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e27742072657365727665206d6f7265207468616e2073657420616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f53616c652069736e277420616374697665000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964206164647265737320746f20726573657276652e0000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f57726f6e6720616d6f756e74206f66204554482073656e740000000000000000600082015250565b6149a881614118565b81146149b357600080fd5b50565b6149bf8161412a565b81146149ca57600080fd5b50565b6149d681614136565b81146149e157600080fd5b50565b6149ed81614182565b81146149f857600080fd5b5056fea26469706673582212200b5e5a7102fa4d10f9146af1020ab2b006d6117ccc7ade34d447dc34b000d7c364736f6c634300080400330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f000000000000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [2] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [3] : 732f000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

43224:5416:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34722:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21623:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23182:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22705:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35362:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24072:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35030:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48336:136;;;:::i;:::-;;24482:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35552:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47849:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43889:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21317:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43398:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21047:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42519:94;;;;;;;;;;;;;:::i;:::-;;45904:991;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47732:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45456:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48165:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41868:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48020:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21792:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43565:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23475:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24738:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44930:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48547:90;;;:::i;:::-;;43753:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46979:717;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23841:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42768:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43499:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34722:224;34824:4;34863:35;34848:50;;;:11;:50;;;;:90;;;;34902:36;34926:11;34902:23;:36::i;:::-;34848:90;34841:97;;34722:224;;;:::o;21623:100::-;21677:13;21710:5;21703:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21623:100;:::o;23182:221::-;23258:7;23286:16;23294:7;23286;:16::i;:::-;23278:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23371:15;:24;23387:7;23371:24;;;;;;;;;;;;;;;;;;;;;23364:31;;23182:221;;;:::o;22705:411::-;22786:13;22802:23;22817:7;22802:14;:23::i;:::-;22786:39;;22850:5;22844:11;;:2;:11;;;;22836:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22944:5;22928:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22953:37;22970:5;22977:12;:10;:12::i;:::-;22953:16;:37::i;:::-;22928:62;22906:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23087:21;23096:2;23100:7;23087:8;:21::i;:::-;22705:411;;;:::o;35362:113::-;35423:7;35450:10;:17;;;;35443:24;;35362:113;:::o;24072:339::-;24267:41;24286:12;:10;:12::i;:::-;24300:7;24267:18;:41::i;:::-;24259:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24375:28;24385:4;24391:2;24395:7;24375:9;:28::i;:::-;24072:339;;;:::o;35030:256::-;35127:7;35163:23;35180:5;35163:16;:23::i;:::-;35155:5;:31;35147:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35252:12;:19;35265:5;35252:19;;;;;;;;;;;;;;;:26;35272:5;35252:26;;;;;;;;;;;;35245:33;;35030:256;;;;:::o;48336:136::-;44475:14;;;;;;;;;;;44471:55;;;44506:8;;;44471:55;44553:4;44536:14;;:21;;;;;;;;;;;;;;;;;;42099:12:::1;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48424:10:::2;48416:24;;:47;48441:21;48416:47;;;;;;;;;;;;;;;;;;;;;;;48408:56;;;::::0;::::2;;44597:5:::0;44580:14;;:22;;;;;;;;;;;;;;;;;;48336:136::o;24482:185::-;24620:39;24637:4;24643:2;24647:7;24620:39;;;;;;;;;;;;:16;:39::i;:::-;24482:185;;;:::o;35552:233::-;35627:7;35663:30;:28;:30::i;:::-;35655:5;:38;35647:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35760:10;35771:5;35760:17;;;;;;;;;;;;;;;;;;;;;;;;35753:24;;35552:233;;;:::o;47849:101::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47935:7:::1;47920:12;:22;;;;;;;;;;;;:::i;:::-;;47849:101:::0;:::o;43889:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21317:239::-;21389:7;21409:13;21425:7;:16;21433:7;21425:16;;;;;;;;;;;;;;;;;;;;;21409:32;;21477:1;21460:19;;:5;:19;;;;21452:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:5;21536:12;;;21317:239;;;:::o;43398:29::-;;;;;;;;;;;;;:::o;21047:208::-;21119:7;21164:1;21147:19;;:5;:19;;;;21139:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21231:9;:16;21241:5;21231:16;;;;;;;;;;;;;;;;21224:23;;21047:208;;;:::o;42519:94::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42584:21:::1;42602:1;42584:9;:21::i;:::-;42519:94::o:0;45904:991::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44475:14:::1;;;;;;;;;;;44471:55;;;44506:8;::::0;::::1;44471:55;44553:4;44536:14;;:21;;;;;;;;;;;;;;;;;;46020:14:::2;46037:13;:11;:13::i;:::-;46020:30;;46070:10;;;;;;;;;;;46061:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;46133:1;46123:7;:11;:28;;;;;46149:2;46138:7;:13;;46123:28;46114:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;46245:1;46225:10;:17;:21;:48;;;;;46271:2;46250:10;:17;:23;;46225:48;46216:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;46365:7;46344:10;:17;:28;46335:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;43694:6;46458:7;46449:6;:16;;;;:::i;:::-;:30;;46440:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46547:7;:5;:7::i;:::-;46533:21;;:10;:21;;;46529:121;;46601:7;46593:5;;:15;;;;:::i;:::-;46580:9;:28;46571:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46529:121;46666:9;46678:1;46666:13;;46662:226;46686:7;46681:1;:12;46662:226;;46746:10;46761:1;46757;:5;;;;:::i;:::-;46746:17;;;;;;;;;;;;;;;;;;;;;;46714;:29;46741:1;46732:6;:10;;;;:::i;:::-;46714:29;;;;;;;;;;;:49;;;;;;;;;;;;:::i;:::-;;46778:34;46788:10;46809:1;46800:6;:10;;;;:::i;:::-;46778:9;:34::i;:::-;46873:1;46864:6;:10;;;;:::i;:::-;46832:44;46845:10;46860:1;46856;:5;;;;:::i;:::-;46845:17;;;;;;;;;;;;;;;;;;;;;;46832:44;;;;;;:::i;:::-;;;;;;;;46695:3;;;;;:::i;:::-;;;;46662:226;;;;44568:1;44597:5:::1;44580:14;;:22;;;;;;;;;;;;;;;;;;45904:991:::0;;:::o;47732:85::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47806:3:::1;47793:10;;:16;;;;;;;;;;;;;;;;;;47732:85:::0;:::o;45456:407::-;45514:16;45568:1;45551:19;;:5;:19;;;;45543:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;45613:18;45634:16;45644:5;45634:9;:16::i;:::-;45613:37;;45661:25;45703:10;45689:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45661:53;;45729:9;45725:105;45744:10;45740:1;:14;45725:105;;;45789:29;45809:5;45816:1;45789:19;:29::i;:::-;45775:8;45784:1;45775:11;;;;;;;;;;;;;;;;;;;;;:43;;;;;45756:3;;;;;:::i;:::-;;;;45725:105;;;;45847:8;45840:15;;;;45456:407;;;:::o;48165:122::-;48223:15;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48258:21:::1;48251:28;;48165:122:::0;:::o;41868:87::-;41914:7;41941:6;;;;;;;;;;;41934:13;;41868:87;:::o;48020:88::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48092:8:::1;48084:5;:16;;;;48020:88:::0;:::o;21792:104::-;21848:13;21881:7;21874:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21792:104;:::o;43565:32::-;;;;:::o;23475:295::-;23590:12;:10;:12::i;:::-;23578:24;;:8;:24;;;;23570:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23690:8;23645:18;:32;23664:12;:10;:12::i;:::-;23645:32;;;;;;;;;;;;;;;:42;23678:8;23645:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23743:8;23714:48;;23729:12;:10;:12::i;:::-;23714:48;;;23753:8;23714:48;;;;;;:::i;:::-;;;;;;;;23475:295;;:::o;24738:328::-;24913:41;24932:12;:10;:12::i;:::-;24946:7;24913:18;:41::i;:::-;24905:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25019:39;25033:4;25039:2;25043:7;25052:5;25019:13;:39::i;:::-;24738:328;;;;:::o;44930:474::-;45003:13;45037:16;45045:7;45037;:16::i;:::-;45029:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;45118:28;45149:10;:8;:10::i;:::-;45118:41;;45170:29;45202:17;:26;45220:7;45202:26;;;;;;;;;;;45170:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45278:1;45253:14;45247:28;:32;:69;;;;;45315:1;45289:15;45283:29;:33;45247:69;45246:150;;;;;;;;;;;;;;;;;45358:14;45374:15;45341:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45246:150;45239:157;;;;44930:474;;;:::o;48547:90::-;48607:10;48599:30;;;48619:9;48599:30;;;;;;:::i;:::-;;;;;;;;48547:90::o;43753:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46979:717::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47139:8:::1;;47128:7;:19;;47119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47228:8;;47207:10;:17;:29;;47198:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;47317:7;47296:10;:17;:28;47287:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;47404:7;47392:8;;:19;;;;;;;:::i;:::-;;;;;;;;47422:14;47439:13;:11;:13::i;:::-;47422:30;;47467:9;47479:1;47467:13;;47463:226;47487:7;47482:1;:12;47463:226;;47547:10;47562:1;47558;:5;;;;:::i;:::-;47547:17;;;;;;;;;;;;;;;;;;;;;;47515;:29;47542:1;47533:6;:10;;;;:::i;:::-;47515:29;;;;;;;;;;;:49;;;;;;;;;;;;:::i;:::-;;47579:34;47589:10;47610:1;47601:6;:10;;;;:::i;:::-;47579:9;:34::i;:::-;47674:1;47665:6;:10;;;;:::i;:::-;47633:44;47646:10;47661:1;47657;:5;;;;:::i;:::-;47646:17;;;;;;;;;;;;;;;;;;;;;;47633:44;;;;;;:::i;:::-;;;;;;;;47496:3;;;;;:::i;:::-;;;;47463:226;;;;42159:1;46979:717:::0;;:::o;23841:164::-;23938:4;23962:18;:25;23981:5;23962:25;;;;;;;;;;;;;;;:35;23988:8;23962:35;;;;;;;;;;;;;;;;;;;;;;;;;23955:42;;23841:164;;;;:::o;42768:192::-;42099:12;:10;:12::i;:::-;42088:23;;:7;:5;:7::i;:::-;:23;;;42080:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42877:1:::1;42857:22;;:8;:22;;;;42849:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42933:19;42943:8;42933:9;:19::i;:::-;42768:192:::0;:::o;43499:29::-;;;;:::o;20678:305::-;20780:4;20832:25;20817:40;;;:11;:40;;;;:105;;;;20889:33;20874:48;;;:11;:48;;;;20817:105;:158;;;;20939:36;20963:11;20939:23;:36::i;:::-;20817:158;20797:178;;20678:305;;;:::o;26576:127::-;26641:4;26693:1;26665:30;;:7;:16;26673:7;26665:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26658:37;;26576:127;;;:::o;16100:98::-;16153:7;16180:10;16173:17;;16100:98;:::o;30558:174::-;30660:2;30633:15;:24;30649:7;30633:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30716:7;30712:2;30678:46;;30687:23;30702:7;30687:14;:23::i;:::-;30678:46;;;;;;;;;;;;30558:174;;:::o;26870:348::-;26963:4;26988:16;26996:7;26988;:16::i;:::-;26980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27064:13;27080:23;27095:7;27080:14;:23::i;:::-;27064:39;;27133:5;27122:16;;:7;:16;;;:51;;;;27166:7;27142:31;;:20;27154:7;27142:11;:20::i;:::-;:31;;;27122:51;:87;;;;27177:32;27194:5;27201:7;27177:16;:32::i;:::-;27122:87;27114:96;;;26870:348;;;;:::o;29862:578::-;30021:4;29994:31;;:23;30009:7;29994:14;:23::i;:::-;:31;;;29986:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30104:1;30090:16;;:2;:16;;;;30082:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30160:39;30181:4;30187:2;30191:7;30160:20;:39::i;:::-;30264:29;30281:1;30285:7;30264:8;:29::i;:::-;30325:1;30306:9;:15;30316:4;30306:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30354:1;30337:9;:13;30347:2;30337:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30385:2;30366:7;:16;30374:7;30366:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30424:7;30420:2;30405:27;;30414:4;30405:27;;;;;;;;;;;;29862:578;;;:::o;42968:173::-;43024:16;43043:6;;;;;;;;;;;43024:25;;43069:8;43060:6;;:17;;;;;;;;;;;;;;;;;;43124:8;43093:40;;43114:8;43093:40;;;;;;;;;;;;42968:173;;:::o;27560:110::-;27636:26;27646:2;27650:7;27636:26;;;;;;;;;;;;:9;:26::i;:::-;27560:110;;:::o;25948:315::-;26105:28;26115:4;26121:2;26125:7;26105:9;:28::i;:::-;26152:48;26175:4;26181:2;26185:7;26194:5;26152:22;:48::i;:::-;26144:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25948:315;;;;:::o;44727:113::-;44787:13;44820:12;44813:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44727:113;:::o;19182:157::-;19267:4;19306:25;19291:40;;;:11;:40;;;;19284:47;;19182:157;;;:::o;36398:589::-;36542:45;36569:4;36575:2;36579:7;36542:26;:45::i;:::-;36620:1;36604:18;;:4;:18;;;36600:187;;;36639:40;36671:7;36639:31;:40::i;:::-;36600:187;;;36709:2;36701:10;;:4;:10;;;36697:90;;36728:47;36761:4;36767:7;36728:32;:47::i;:::-;36697:90;36600:187;36815:1;36801:16;;:2;:16;;;36797:183;;;36834:45;36871:7;36834:36;:45::i;:::-;36797:183;;;36907:4;36901:10;;:2;:10;;;36897:83;;36928:40;36956:2;36960:7;36928:27;:40::i;:::-;36897:83;36797:183;36398:589;;;:::o;27897:321::-;28027:18;28033:2;28037:7;28027:5;:18::i;:::-;28078:54;28109:1;28113:2;28117:7;28126:5;28078:22;:54::i;:::-;28056:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27897:321;;;:::o;31297:799::-;31452:4;31473:15;:2;:13;;;:15::i;:::-;31469:620;;;31525:2;31509:36;;;31546:12;:10;:12::i;:::-;31560:4;31566:7;31575:5;31509:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31505:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31768:1;31751:6;:13;:18;31747:272;;;31794:60;;;;;;;;;;:::i;:::-;;;;;;;;31747:272;31969:6;31963:13;31954:6;31950:2;31946:15;31939:38;31505:529;31642:41;;;31632:51;;;:6;:51;;;;31625:58;;;;;31469:620;32073:4;32066:11;;31297:799;;;;;;;:::o;32668:126::-;;;;:::o;37710:164::-;37814:10;:17;;;;37787:15;:24;37803:7;37787:24;;;;;;;;;;;:44;;;;37842:10;37858:7;37842:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37710:164;:::o;38501:988::-;38767:22;38817:1;38792:22;38809:4;38792:16;:22::i;:::-;:26;;;;:::i;:::-;38767:51;;38829:18;38850:17;:26;38868:7;38850:26;;;;;;;;;;;;38829:47;;38997:14;38983:10;:28;38979:328;;39028:19;39050:12;:18;39063:4;39050:18;;;;;;;;;;;;;;;:34;39069:14;39050:34;;;;;;;;;;;;39028:56;;39134:11;39101:12;:18;39114:4;39101:18;;;;;;;;;;;;;;;:30;39120:10;39101:30;;;;;;;;;;;:44;;;;39251:10;39218:17;:30;39236:11;39218:30;;;;;;;;;;;:43;;;;38979:328;;39403:17;:26;39421:7;39403:26;;;;;;;;;;;39396:33;;;39447:12;:18;39460:4;39447:18;;;;;;;;;;;;;;;:34;39466:14;39447:34;;;;;;;;;;;39440:41;;;38501:988;;;;:::o;39784:1079::-;40037:22;40082:1;40062:10;:17;;;;:21;;;;:::i;:::-;40037:46;;40094:18;40115:15;:24;40131:7;40115:24;;;;;;;;;;;;40094:45;;40466:19;40488:10;40499:14;40488:26;;;;;;;;;;;;;;;;;;;;;;;;40466:48;;40552:11;40527:10;40538;40527:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40663:10;40632:15;:28;40648:11;40632:28;;;;;;;;;;;:41;;;;40804:15;:24;40820:7;40804:24;;;;;;;;;;;40797:31;;;40839:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39784:1079;;;;:::o;37288:221::-;37373:14;37390:20;37407:2;37390:16;:20::i;:::-;37373:37;;37448:7;37421:12;:16;37434:2;37421:16;;;;;;;;;;;;;;;:24;37438:6;37421:24;;;;;;;;;;;:34;;;;37495:6;37466:17;:26;37484:7;37466:26;;;;;;;;;;;:35;;;;37288:221;;;:::o;28554:382::-;28648:1;28634:16;;:2;:16;;;;28626:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28707:16;28715:7;28707;:16::i;:::-;28706:17;28698:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28769:45;28798:1;28802:2;28806:7;28769:20;:45::i;:::-;28844:1;28827:9;:13;28837:2;28827:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28875:2;28856:7;:16;28864:7;28856:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28920:7;28916:2;28895:33;;28912:1;28895:33;;;;;;;;;;;;28554:382;;:::o;8144:387::-;8204:4;8412:12;8479:7;8467:20;8459:28;;8522:1;8515:4;:8;8508:15;;;8144:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;23:823:1:-;129:5;154:91;170:74;237:6;170:74;:::i;:::-;154:91;:::i;:::-;145:100;;265:5;294:6;287:5;280:21;328:4;321:5;317:16;310:23;;354:6;404:3;396:4;388:6;384:17;379:3;375:27;372:36;369:2;;;433:1;430;423:12;369:2;469:1;454:386;479:6;476:1;473:13;454:386;;;561:3;548:17;597:18;584:11;581:35;578:2;;;629:1;626;619:12;578:2;676:11;668:6;664:24;714:47;757:3;745:10;714:47;:::i;:::-;709:3;702:60;791:4;786:3;782:14;775:21;;825:4;820:3;816:14;809:21;;514:326;;501:1;498;494:9;489:14;;454:386;;;458:14;135:711;;;;;;;:::o;852:343::-;929:5;954:65;970:48;1011:6;970:48;:::i;:::-;954:65;:::i;:::-;945:74;;1042:6;1035:5;1028:21;1080:4;1073:5;1069:16;1118:3;1109:6;1104:3;1100:16;1097:25;1094:2;;;1135:1;1132;1125:12;1094:2;1148:41;1182:6;1177:3;1172;1148:41;:::i;:::-;935:260;;;;;;:::o;1201:345::-;1279:5;1304:66;1320:49;1362:6;1320:49;:::i;:::-;1304:66;:::i;:::-;1295:75;;1393:6;1386:5;1379:21;1431:4;1424:5;1420:16;1469:3;1460:6;1455:3;1451:16;1448:25;1445:2;;;1486:1;1483;1476:12;1445:2;1499:41;1533:6;1528:3;1523;1499:41;:::i;:::-;1285:261;;;;;;:::o;1552:139::-;1598:5;1636:6;1623:20;1614:29;;1652:33;1679:5;1652:33;:::i;:::-;1604:87;;;;:::o;1713:323::-;1794:5;1843:3;1836:4;1828:6;1824:17;1820:27;1810:2;;1861:1;1858;1851:12;1810:2;1901:6;1888:20;1926:104;2026:3;2018:6;2011:4;2003:6;1999:17;1926:104;:::i;:::-;1917:113;;1800:236;;;;;:::o;2042:133::-;2085:5;2123:6;2110:20;2101:29;;2139:30;2163:5;2139:30;:::i;:::-;2091:84;;;;:::o;2181:137::-;2226:5;2264:6;2251:20;2242:29;;2280:32;2306:5;2280:32;:::i;:::-;2232:86;;;;:::o;2324:141::-;2380:5;2411:6;2405:13;2396:22;;2427:32;2453:5;2427:32;:::i;:::-;2386:79;;;;:::o;2484:271::-;2539:5;2588:3;2581:4;2573:6;2569:17;2565:27;2555:2;;2606:1;2603;2596:12;2555:2;2646:6;2633:20;2671:78;2745:3;2737:6;2730:4;2722:6;2718:17;2671:78;:::i;:::-;2662:87;;2545:210;;;;;:::o;2775:273::-;2831:5;2880:3;2873:4;2865:6;2861:17;2857:27;2847:2;;2898:1;2895;2888:12;2847:2;2938:6;2925:20;2963:79;3038:3;3030:6;3023:4;3015:6;3011:17;2963:79;:::i;:::-;2954:88;;2837:211;;;;;:::o;3054:139::-;3100:5;3138:6;3125:20;3116:29;;3154:33;3181:5;3154:33;:::i;:::-;3106:87;;;;:::o;3199:262::-;3258:6;3307:2;3295:9;3286:7;3282:23;3278:32;3275:2;;;3323:1;3320;3313:12;3275:2;3366:1;3391:53;3436:7;3427:6;3416:9;3412:22;3391:53;:::i;:::-;3381:63;;3337:117;3265:196;;;;:::o;3467:407::-;3535:6;3543;3592:2;3580:9;3571:7;3567:23;3563:32;3560:2;;;3608:1;3605;3598:12;3560:2;3651:1;3676:53;3721:7;3712:6;3701:9;3697:22;3676:53;:::i;:::-;3666:63;;3622:117;3778:2;3804:53;3849:7;3840:6;3829:9;3825:22;3804:53;:::i;:::-;3794:63;;3749:118;3550:324;;;;;:::o;3880:552::-;3957:6;3965;3973;4022:2;4010:9;4001:7;3997:23;3993:32;3990:2;;;4038:1;4035;4028:12;3990:2;4081:1;4106:53;4151:7;4142:6;4131:9;4127:22;4106:53;:::i;:::-;4096:63;;4052:117;4208:2;4234:53;4279:7;4270:6;4259:9;4255:22;4234:53;:::i;:::-;4224:63;;4179:118;4336:2;4362:53;4407:7;4398:6;4387:9;4383:22;4362:53;:::i;:::-;4352:63;;4307:118;3980:452;;;;;:::o;4438:809::-;4533:6;4541;4549;4557;4606:3;4594:9;4585:7;4581:23;4577:33;4574:2;;;4623:1;4620;4613:12;4574:2;4666:1;4691:53;4736:7;4727:6;4716:9;4712:22;4691:53;:::i;:::-;4681:63;;4637:117;4793:2;4819:53;4864:7;4855:6;4844:9;4840:22;4819:53;:::i;:::-;4809:63;;4764:118;4921:2;4947:53;4992:7;4983:6;4972:9;4968:22;4947:53;:::i;:::-;4937:63;;4892:118;5077:2;5066:9;5062:18;5049:32;5108:18;5100:6;5097:30;5094:2;;;5140:1;5137;5130:12;5094:2;5168:62;5222:7;5213:6;5202:9;5198:22;5168:62;:::i;:::-;5158:72;;5020:220;4564:683;;;;;;;:::o;5253:401::-;5318:6;5326;5375:2;5363:9;5354:7;5350:23;5346:32;5343:2;;;5391:1;5388;5381:12;5343:2;5434:1;5459:53;5504:7;5495:6;5484:9;5480:22;5459:53;:::i;:::-;5449:63;;5405:117;5561:2;5587:50;5629:7;5620:6;5609:9;5605:22;5587:50;:::i;:::-;5577:60;;5532:115;5333:321;;;;;:::o;5660:407::-;5728:6;5736;5785:2;5773:9;5764:7;5760:23;5756:32;5753:2;;;5801:1;5798;5791:12;5753:2;5844:1;5869:53;5914:7;5905:6;5894:9;5890:22;5869:53;:::i;:::-;5859:63;;5815:117;5971:2;5997:53;6042:7;6033:6;6022:9;6018:22;5997:53;:::i;:::-;5987:63;;5942:118;5743:324;;;;;:::o;6073:256::-;6129:6;6178:2;6166:9;6157:7;6153:23;6149:32;6146:2;;;6194:1;6191;6184:12;6146:2;6237:1;6262:50;6304:7;6295:6;6284:9;6280:22;6262:50;:::i;:::-;6252:60;;6208:114;6136:193;;;;:::o;6335:260::-;6393:6;6442:2;6430:9;6421:7;6417:23;6413:32;6410:2;;;6458:1;6455;6448:12;6410:2;6501:1;6526:52;6570:7;6561:6;6550:9;6546:22;6526:52;:::i;:::-;6516:62;;6472:116;6400:195;;;;:::o;6601:282::-;6670:6;6719:2;6707:9;6698:7;6694:23;6690:32;6687:2;;;6735:1;6732;6725:12;6687:2;6778:1;6803:63;6858:7;6849:6;6838:9;6834:22;6803:63;:::i;:::-;6793:73;;6749:127;6677:206;;;;:::o;6889:375::-;6958:6;7007:2;6995:9;6986:7;6982:23;6978:32;6975:2;;;7023:1;7020;7013:12;6975:2;7094:1;7083:9;7079:17;7066:31;7124:18;7116:6;7113:30;7110:2;;;7156:1;7153;7146:12;7110:2;7184:63;7239:7;7230:6;7219:9;7215:22;7184:63;:::i;:::-;7174:73;;7037:220;6965:299;;;;:::o;7270:262::-;7329:6;7378:2;7366:9;7357:7;7353:23;7349:32;7346:2;;;7394:1;7391;7384:12;7346:2;7437:1;7462:53;7507:7;7498:6;7487:9;7483:22;7462:53;:::i;:::-;7452:63;;7408:117;7336:196;;;;:::o;7538:570::-;7641:6;7649;7698:2;7686:9;7677:7;7673:23;7669:32;7666:2;;;7714:1;7711;7704:12;7666:2;7757:1;7782:53;7827:7;7818:6;7807:9;7803:22;7782:53;:::i;:::-;7772:63;;7728:117;7912:2;7901:9;7897:18;7884:32;7943:18;7935:6;7932:30;7929:2;;;7975:1;7972;7965:12;7929:2;8003:88;8083:7;8074:6;8063:9;8059:22;8003:88;:::i;:::-;7993:98;;7855:246;7656:452;;;;;:::o;8114:179::-;8183:10;8204:46;8246:3;8238:6;8204:46;:::i;:::-;8282:4;8277:3;8273:14;8259:28;;8194:99;;;;:::o;8299:118::-;8386:24;8404:5;8386:24;:::i;:::-;8381:3;8374:37;8364:53;;:::o;8453:732::-;8572:3;8601:54;8649:5;8601:54;:::i;:::-;8671:86;8750:6;8745:3;8671:86;:::i;:::-;8664:93;;8781:56;8831:5;8781:56;:::i;:::-;8860:7;8891:1;8876:284;8901:6;8898:1;8895:13;8876:284;;;8977:6;8971:13;9004:63;9063:3;9048:13;9004:63;:::i;:::-;8997:70;;9090:60;9143:6;9090:60;:::i;:::-;9080:70;;8936:224;8923:1;8920;8916:9;8911:14;;8876:284;;;8880:14;9176:3;9169:10;;8577:608;;;;;;;:::o;9191:109::-;9272:21;9287:5;9272:21;:::i;:::-;9267:3;9260:34;9250:50;;:::o;9306:360::-;9392:3;9420:38;9452:5;9420:38;:::i;:::-;9474:70;9537:6;9532:3;9474:70;:::i;:::-;9467:77;;9553:52;9598:6;9593:3;9586:4;9579:5;9575:16;9553:52;:::i;:::-;9630:29;9652:6;9630:29;:::i;:::-;9625:3;9621:39;9614:46;;9396:270;;;;;:::o;9672:364::-;9760:3;9788:39;9821:5;9788:39;:::i;:::-;9843:71;9907:6;9902:3;9843:71;:::i;:::-;9836:78;;9923:52;9968:6;9963:3;9956:4;9949:5;9945:16;9923:52;:::i;:::-;10000:29;10022:6;10000:29;:::i;:::-;9995:3;9991:39;9984:46;;9764:272;;;;;:::o;10042:377::-;10148:3;10176:39;10209:5;10176:39;:::i;:::-;10231:89;10313:6;10308:3;10231:89;:::i;:::-;10224:96;;10329:52;10374:6;10369:3;10362:4;10355:5;10351:16;10329:52;:::i;:::-;10406:6;10401:3;10397:16;10390:23;;10152:267;;;;;:::o;10425:366::-;10567:3;10588:67;10652:2;10647:3;10588:67;:::i;:::-;10581:74;;10664:93;10753:3;10664:93;:::i;:::-;10782:2;10777:3;10773:12;10766:19;;10571:220;;;:::o;10797:366::-;10939:3;10960:67;11024:2;11019:3;10960:67;:::i;:::-;10953:74;;11036:93;11125:3;11036:93;:::i;:::-;11154:2;11149:3;11145:12;11138:19;;10943:220;;;:::o;11169:366::-;11311:3;11332:67;11396:2;11391:3;11332:67;:::i;:::-;11325:74;;11408:93;11497:3;11408:93;:::i;:::-;11526:2;11521:3;11517:12;11510:19;;11315:220;;;:::o;11541:366::-;11683:3;11704:67;11768:2;11763:3;11704:67;:::i;:::-;11697:74;;11780:93;11869:3;11780:93;:::i;:::-;11898:2;11893:3;11889:12;11882:19;;11687:220;;;:::o;11913:366::-;12055:3;12076:67;12140:2;12135:3;12076:67;:::i;:::-;12069:74;;12152:93;12241:3;12152:93;:::i;:::-;12270:2;12265:3;12261:12;12254:19;;12059:220;;;:::o;12285:366::-;12427:3;12448:67;12512:2;12507:3;12448:67;:::i;:::-;12441:74;;12524:93;12613:3;12524:93;:::i;:::-;12642:2;12637:3;12633:12;12626:19;;12431:220;;;:::o;12657:366::-;12799:3;12820:67;12884:2;12879:3;12820:67;:::i;:::-;12813:74;;12896:93;12985:3;12896:93;:::i;:::-;13014:2;13009:3;13005:12;12998:19;;12803:220;;;:::o;13029:366::-;13171:3;13192:67;13256:2;13251:3;13192:67;:::i;:::-;13185:74;;13268:93;13357:3;13268:93;:::i;:::-;13386:2;13381:3;13377:12;13370:19;;13175:220;;;:::o;13401:366::-;13543:3;13564:67;13628:2;13623:3;13564:67;:::i;:::-;13557:74;;13640:93;13729:3;13640:93;:::i;:::-;13758:2;13753:3;13749:12;13742:19;;13547:220;;;:::o;13773:366::-;13915:3;13936:67;14000:2;13995:3;13936:67;:::i;:::-;13929:74;;14012:93;14101:3;14012:93;:::i;:::-;14130:2;14125:3;14121:12;14114:19;;13919:220;;;:::o;14145:366::-;14287:3;14308:67;14372:2;14367:3;14308:67;:::i;:::-;14301:74;;14384:93;14473:3;14384:93;:::i;:::-;14502:2;14497:3;14493:12;14486:19;;14291:220;;;:::o;14517:366::-;14659:3;14680:67;14744:2;14739:3;14680:67;:::i;:::-;14673:74;;14756:93;14845:3;14756:93;:::i;:::-;14874:2;14869:3;14865:12;14858:19;;14663:220;;;:::o;14889:366::-;15031:3;15052:67;15116:2;15111:3;15052:67;:::i;:::-;15045:74;;15128:93;15217:3;15128:93;:::i;:::-;15246:2;15241:3;15237:12;15230:19;;15035:220;;;:::o;15261:366::-;15403:3;15424:67;15488:2;15483:3;15424:67;:::i;:::-;15417:74;;15500:93;15589:3;15500:93;:::i;:::-;15618:2;15613:3;15609:12;15602:19;;15407:220;;;:::o;15633:366::-;15775:3;15796:67;15860:2;15855:3;15796:67;:::i;:::-;15789:74;;15872:93;15961:3;15872:93;:::i;:::-;15990:2;15985:3;15981:12;15974:19;;15779:220;;;:::o;16005:366::-;16147:3;16168:67;16232:2;16227:3;16168:67;:::i;:::-;16161:74;;16244:93;16333:3;16244:93;:::i;:::-;16362:2;16357:3;16353:12;16346:19;;16151:220;;;:::o;16377:366::-;16519:3;16540:67;16604:2;16599:3;16540:67;:::i;:::-;16533:74;;16616:93;16705:3;16616:93;:::i;:::-;16734:2;16729:3;16725:12;16718:19;;16523:220;;;:::o;16749:366::-;16891:3;16912:67;16976:2;16971:3;16912:67;:::i;:::-;16905:74;;16988:93;17077:3;16988:93;:::i;:::-;17106:2;17101:3;17097:12;17090:19;;16895:220;;;:::o;17121:366::-;17263:3;17284:67;17348:2;17343:3;17284:67;:::i;:::-;17277:74;;17360:93;17449:3;17360:93;:::i;:::-;17478:2;17473:3;17469:12;17462:19;;17267:220;;;:::o;17493:366::-;17635:3;17656:67;17720:2;17715:3;17656:67;:::i;:::-;17649:74;;17732:93;17821:3;17732:93;:::i;:::-;17850:2;17845:3;17841:12;17834:19;;17639:220;;;:::o;17865:366::-;18007:3;18028:67;18092:2;18087:3;18028:67;:::i;:::-;18021:74;;18104:93;18193:3;18104:93;:::i;:::-;18222:2;18217:3;18213:12;18206:19;;18011:220;;;:::o;18237:366::-;18379:3;18400:67;18464:2;18459:3;18400:67;:::i;:::-;18393:74;;18476:93;18565:3;18476:93;:::i;:::-;18594:2;18589:3;18585:12;18578:19;;18383:220;;;:::o;18609:366::-;18751:3;18772:67;18836:2;18831:3;18772:67;:::i;:::-;18765:74;;18848:93;18937:3;18848:93;:::i;:::-;18966:2;18961:3;18957:12;18950:19;;18755:220;;;:::o;18981:366::-;19123:3;19144:67;19208:2;19203:3;19144:67;:::i;:::-;19137:74;;19220:93;19309:3;19220:93;:::i;:::-;19338:2;19333:3;19329:12;19322:19;;19127:220;;;:::o;19353:366::-;19495:3;19516:67;19580:2;19575:3;19516:67;:::i;:::-;19509:74;;19592:93;19681:3;19592:93;:::i;:::-;19710:2;19705:3;19701:12;19694:19;;19499:220;;;:::o;19725:108::-;19802:24;19820:5;19802:24;:::i;:::-;19797:3;19790:37;19780:53;;:::o;19839:118::-;19926:24;19944:5;19926:24;:::i;:::-;19921:3;19914:37;19904:53;;:::o;19963:435::-;20143:3;20165:95;20256:3;20247:6;20165:95;:::i;:::-;20158:102;;20277:95;20368:3;20359:6;20277:95;:::i;:::-;20270:102;;20389:3;20382:10;;20147:251;;;;;:::o;20404:222::-;20497:4;20535:2;20524:9;20520:18;20512:26;;20548:71;20616:1;20605:9;20601:17;20592:6;20548:71;:::i;:::-;20502:124;;;;:::o;20632:640::-;20827:4;20865:3;20854:9;20850:19;20842:27;;20879:71;20947:1;20936:9;20932:17;20923:6;20879:71;:::i;:::-;20960:72;21028:2;21017:9;21013:18;21004:6;20960:72;:::i;:::-;21042;21110:2;21099:9;21095:18;21086:6;21042:72;:::i;:::-;21161:9;21155:4;21151:20;21146:2;21135:9;21131:18;21124:48;21189:76;21260:4;21251:6;21189:76;:::i;:::-;21181:84;;20832:440;;;;;;;:::o;21278:373::-;21421:4;21459:2;21448:9;21444:18;21436:26;;21508:9;21502:4;21498:20;21494:1;21483:9;21479:17;21472:47;21536:108;21639:4;21630:6;21536:108;:::i;:::-;21528:116;;21426:225;;;;:::o;21657:210::-;21744:4;21782:2;21771:9;21767:18;21759:26;;21795:65;21857:1;21846:9;21842:17;21833:6;21795:65;:::i;:::-;21749:118;;;;:::o;21873:313::-;21986:4;22024:2;22013:9;22009:18;22001:26;;22073:9;22067:4;22063:20;22059:1;22048:9;22044:17;22037:47;22101:78;22174:4;22165:6;22101:78;:::i;:::-;22093:86;;21991:195;;;;:::o;22192:419::-;22358:4;22396:2;22385:9;22381:18;22373:26;;22445:9;22439:4;22435:20;22431:1;22420:9;22416:17;22409:47;22473:131;22599:4;22473:131;:::i;:::-;22465:139;;22363:248;;;:::o;22617:419::-;22783:4;22821:2;22810:9;22806:18;22798:26;;22870:9;22864:4;22860:20;22856:1;22845:9;22841:17;22834:47;22898:131;23024:4;22898:131;:::i;:::-;22890:139;;22788:248;;;:::o;23042:419::-;23208:4;23246:2;23235:9;23231:18;23223:26;;23295:9;23289:4;23285:20;23281:1;23270:9;23266:17;23259:47;23323:131;23449:4;23323:131;:::i;:::-;23315:139;;23213:248;;;:::o;23467:419::-;23633:4;23671:2;23660:9;23656:18;23648:26;;23720:9;23714:4;23710:20;23706:1;23695:9;23691:17;23684:47;23748:131;23874:4;23748:131;:::i;:::-;23740:139;;23638:248;;;:::o;23892:419::-;24058:4;24096:2;24085:9;24081:18;24073:26;;24145:9;24139:4;24135:20;24131:1;24120:9;24116:17;24109:47;24173:131;24299:4;24173:131;:::i;:::-;24165:139;;24063:248;;;:::o;24317:419::-;24483:4;24521:2;24510:9;24506:18;24498:26;;24570:9;24564:4;24560:20;24556:1;24545:9;24541:17;24534:47;24598:131;24724:4;24598:131;:::i;:::-;24590:139;;24488:248;;;:::o;24742:419::-;24908:4;24946:2;24935:9;24931:18;24923:26;;24995:9;24989:4;24985:20;24981:1;24970:9;24966:17;24959:47;25023:131;25149:4;25023:131;:::i;:::-;25015:139;;24913:248;;;:::o;25167:419::-;25333:4;25371:2;25360:9;25356:18;25348:26;;25420:9;25414:4;25410:20;25406:1;25395:9;25391:17;25384:47;25448:131;25574:4;25448:131;:::i;:::-;25440:139;;25338:248;;;:::o;25592:419::-;25758:4;25796:2;25785:9;25781:18;25773:26;;25845:9;25839:4;25835:20;25831:1;25820:9;25816:17;25809:47;25873:131;25999:4;25873:131;:::i;:::-;25865:139;;25763:248;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26188:248;;;:::o;26442:419::-;26608:4;26646:2;26635:9;26631:18;26623:26;;26695:9;26689:4;26685:20;26681:1;26670:9;26666:17;26659:47;26723:131;26849:4;26723:131;:::i;:::-;26715:139;;26613:248;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;27038:248;;;:::o;27292:419::-;27458:4;27496:2;27485:9;27481:18;27473:26;;27545:9;27539:4;27535:20;27531:1;27520:9;27516:17;27509:47;27573:131;27699:4;27573:131;:::i;:::-;27565:139;;27463:248;;;:::o;27717:419::-;27883:4;27921:2;27910:9;27906:18;27898:26;;27970:9;27964:4;27960:20;27956:1;27945:9;27941:17;27934:47;27998:131;28124:4;27998:131;:::i;:::-;27990:139;;27888:248;;;:::o;28142:419::-;28308:4;28346:2;28335:9;28331:18;28323:26;;28395:9;28389:4;28385:20;28381:1;28370:9;28366:17;28359:47;28423:131;28549:4;28423:131;:::i;:::-;28415:139;;28313:248;;;:::o;28567:419::-;28733:4;28771:2;28760:9;28756:18;28748:26;;28820:9;28814:4;28810:20;28806:1;28795:9;28791:17;28784:47;28848:131;28974:4;28848:131;:::i;:::-;28840:139;;28738:248;;;:::o;28992:419::-;29158:4;29196:2;29185:9;29181:18;29173:26;;29245:9;29239:4;29235:20;29231:1;29220:9;29216:17;29209:47;29273:131;29399:4;29273:131;:::i;:::-;29265:139;;29163:248;;;:::o;29417:419::-;29583:4;29621:2;29610:9;29606:18;29598:26;;29670:9;29664:4;29660:20;29656:1;29645:9;29641:17;29634:47;29698:131;29824:4;29698:131;:::i;:::-;29690:139;;29588:248;;;:::o;29842:419::-;30008:4;30046:2;30035:9;30031:18;30023:26;;30095:9;30089:4;30085:20;30081:1;30070:9;30066:17;30059:47;30123:131;30249:4;30123:131;:::i;:::-;30115:139;;30013:248;;;:::o;30267:419::-;30433:4;30471:2;30460:9;30456:18;30448:26;;30520:9;30514:4;30510:20;30506:1;30495:9;30491:17;30484:47;30548:131;30674:4;30548:131;:::i;:::-;30540:139;;30438:248;;;:::o;30692:419::-;30858:4;30896:2;30885:9;30881:18;30873:26;;30945:9;30939:4;30935:20;30931:1;30920:9;30916:17;30909:47;30973:131;31099:4;30973:131;:::i;:::-;30965:139;;30863:248;;;:::o;31117:419::-;31283:4;31321:2;31310:9;31306:18;31298:26;;31370:9;31364:4;31360:20;31356:1;31345:9;31341:17;31334:47;31398:131;31524:4;31398:131;:::i;:::-;31390:139;;31288:248;;;:::o;31542:419::-;31708:4;31746:2;31735:9;31731:18;31723:26;;31795:9;31789:4;31785:20;31781:1;31770:9;31766:17;31759:47;31823:131;31949:4;31823:131;:::i;:::-;31815:139;;31713:248;;;:::o;31967:419::-;32133:4;32171:2;32160:9;32156:18;32148:26;;32220:9;32214:4;32210:20;32206:1;32195:9;32191:17;32184:47;32248:131;32374:4;32248:131;:::i;:::-;32240:139;;32138:248;;;:::o;32392:419::-;32558:4;32596:2;32585:9;32581:18;32573:26;;32645:9;32639:4;32635:20;32631:1;32620:9;32616:17;32609:47;32673:131;32799:4;32673:131;:::i;:::-;32665:139;;32563:248;;;:::o;32817:222::-;32910:4;32948:2;32937:9;32933:18;32925:26;;32961:71;33029:1;33018:9;33014:17;33005:6;32961:71;:::i;:::-;32915:124;;;;:::o;33045:129::-;33079:6;33106:20;;:::i;:::-;33096:30;;33135:33;33163:4;33155:6;33135:33;:::i;:::-;33086:88;;;:::o;33180:75::-;33213:6;33246:2;33240:9;33230:19;;33220:35;:::o;33261:321::-;33348:4;33438:18;33430:6;33427:30;33424:2;;;33460:18;;:::i;:::-;33424:2;33510:4;33502:6;33498:17;33490:25;;33570:4;33564;33560:15;33552:23;;33353:229;;;:::o;33588:307::-;33649:4;33739:18;33731:6;33728:30;33725:2;;;33761:18;;:::i;:::-;33725:2;33799:29;33821:6;33799:29;:::i;:::-;33791:37;;33883:4;33877;33873:15;33865:23;;33654:241;;;:::o;33901:308::-;33963:4;34053:18;34045:6;34042:30;34039:2;;;34075:18;;:::i;:::-;34039:2;34113:29;34135:6;34113:29;:::i;:::-;34105:37;;34197:4;34191;34187:15;34179:23;;33968:241;;;:::o;34215:132::-;34282:4;34305:3;34297:11;;34335:4;34330:3;34326:14;34318:22;;34287:60;;;:::o;34353:114::-;34420:6;34454:5;34448:12;34438:22;;34427:40;;;:::o;34473:98::-;34524:6;34558:5;34552:12;34542:22;;34531:40;;;:::o;34577:99::-;34629:6;34663:5;34657:12;34647:22;;34636:40;;;:::o;34682:113::-;34752:4;34784;34779:3;34775:14;34767:22;;34757:38;;;:::o;34801:184::-;34900:11;34934:6;34929:3;34922:19;34974:4;34969:3;34965:14;34950:29;;34912:73;;;;:::o;34991:168::-;35074:11;35108:6;35103:3;35096:19;35148:4;35143:3;35139:14;35124:29;;35086:73;;;;:::o;35165:169::-;35249:11;35283:6;35278:3;35271:19;35323:4;35318:3;35314:14;35299:29;;35261:73;;;;:::o;35340:148::-;35442:11;35479:3;35464:18;;35454:34;;;;:::o;35494:305::-;35534:3;35553:20;35571:1;35553:20;:::i;:::-;35548:25;;35587:20;35605:1;35587:20;:::i;:::-;35582:25;;35741:1;35673:66;35669:74;35666:1;35663:81;35660:2;;;35747:18;;:::i;:::-;35660:2;35791:1;35788;35784:9;35777:16;;35538:261;;;;:::o;35805:348::-;35845:7;35868:20;35886:1;35868:20;:::i;:::-;35863:25;;35902:20;35920:1;35902:20;:::i;:::-;35897:25;;36090:1;36022:66;36018:74;36015:1;36012:81;36007:1;36000:9;35993:17;35989:105;35986:2;;;36097:18;;:::i;:::-;35986:2;36145:1;36142;36138:9;36127:20;;35853:300;;;;:::o;36159:191::-;36199:4;36219:20;36237:1;36219:20;:::i;:::-;36214:25;;36253:20;36271:1;36253:20;:::i;:::-;36248:25;;36292:1;36289;36286:8;36283:2;;;36297:18;;:::i;:::-;36283:2;36342:1;36339;36335:9;36327:17;;36204:146;;;;:::o;36356:96::-;36393:7;36422:24;36440:5;36422:24;:::i;:::-;36411:35;;36401:51;;;:::o;36458:90::-;36492:7;36535:5;36528:13;36521:21;36510:32;;36500:48;;;:::o;36554:149::-;36590:7;36630:66;36623:5;36619:78;36608:89;;36598:105;;;:::o;36709:126::-;36746:7;36786:42;36779:5;36775:54;36764:65;;36754:81;;;:::o;36841:77::-;36878:7;36907:5;36896:16;;36886:32;;;:::o;36924:154::-;37008:6;37003:3;36998;36985:30;37070:1;37061:6;37056:3;37052:16;37045:27;36975:103;;;:::o;37084:307::-;37152:1;37162:113;37176:6;37173:1;37170:13;37162:113;;;37261:1;37256:3;37252:11;37246:18;37242:1;37237:3;37233:11;37226:39;37198:2;37195:1;37191:10;37186:15;;37162:113;;;37293:6;37290:1;37287:13;37284:2;;;37373:1;37364:6;37359:3;37355:16;37348:27;37284:2;37133:258;;;;:::o;37397:320::-;37441:6;37478:1;37472:4;37468:12;37458:22;;37525:1;37519:4;37515:12;37546:18;37536:2;;37602:4;37594:6;37590:17;37580:27;;37536:2;37664;37656:6;37653:14;37633:18;37630:38;37627:2;;;37683:18;;:::i;:::-;37627:2;37448:269;;;;:::o;37723:281::-;37806:27;37828:4;37806:27;:::i;:::-;37798:6;37794:40;37936:6;37924:10;37921:22;37900:18;37888:10;37885:34;37882:62;37879:2;;;37947:18;;:::i;:::-;37879:2;37987:10;37983:2;37976:22;37766:238;;;:::o;38010:233::-;38049:3;38072:24;38090:5;38072:24;:::i;:::-;38063:33;;38118:66;38111:5;38108:77;38105:2;;;38188:18;;:::i;:::-;38105:2;38235:1;38228:5;38224:13;38217:20;;38053:190;;;:::o;38249:180::-;38297:77;38294:1;38287:88;38394:4;38391:1;38384:15;38418:4;38415:1;38408:15;38435:180;38483:77;38480:1;38473:88;38580:4;38577:1;38570:15;38604:4;38601:1;38594:15;38621:180;38669:77;38666:1;38659:88;38766:4;38763:1;38756:15;38790:4;38787:1;38780:15;38807:102;38848:6;38899:2;38895:7;38890:2;38883:5;38879:14;38875:28;38865:38;;38855:54;;;:::o;38915:232::-;39055:34;39051:1;39043:6;39039:14;39032:58;39124:15;39119:2;39111:6;39107:15;39100:40;39021:126;:::o;39153:230::-;39293:34;39289:1;39281:6;39277:14;39270:58;39362:13;39357:2;39349:6;39345:15;39338:38;39259:124;:::o;39389:237::-;39529:34;39525:1;39517:6;39513:14;39506:58;39598:20;39593:2;39585:6;39581:15;39574:45;39495:131;:::o;39632:225::-;39772:34;39768:1;39760:6;39756:14;39749:58;39841:8;39836:2;39828:6;39824:15;39817:33;39738:119;:::o;39863:178::-;40003:30;39999:1;39991:6;39987:14;39980:54;39969:72;:::o;40047:181::-;40187:33;40183:1;40175:6;40171:14;40164:57;40153:75;:::o;40234:223::-;40374:34;40370:1;40362:6;40358:14;40351:58;40443:6;40438:2;40430:6;40426:15;40419:31;40340:117;:::o;40463:175::-;40603:27;40599:1;40591:6;40587:14;40580:51;40569:69;:::o;40644:238::-;40784:34;40780:1;40772:6;40768:14;40761:58;40853:21;40848:2;40840:6;40836:15;40829:46;40750:132;:::o;40888:231::-;41028:34;41024:1;41016:6;41012:14;41005:58;41097:14;41092:2;41084:6;41080:15;41073:39;40994:125;:::o;41125:243::-;41265:34;41261:1;41253:6;41249:14;41242:58;41334:26;41329:2;41321:6;41317:15;41310:51;41231:137;:::o;41374:229::-;41514:34;41510:1;41502:6;41498:14;41491:58;41583:12;41578:2;41570:6;41566:15;41559:37;41480:123;:::o;41609:228::-;41749:34;41745:1;41737:6;41733:14;41726:58;41818:11;41813:2;41805:6;41801:15;41794:36;41715:122;:::o;41843:182::-;41983:34;41979:1;41971:6;41967:14;41960:58;41949:76;:::o;42031:221::-;42171:34;42167:1;42159:6;42155:14;42148:58;42240:4;42235:2;42227:6;42223:15;42216:29;42137:115;:::o;42258:231::-;42398:34;42394:1;42386:6;42382:14;42375:58;42467:14;42462:2;42454:6;42450:15;42443:39;42364:125;:::o;42495:182::-;42635:34;42631:1;42623:6;42619:14;42612:58;42601:76;:::o;42683:228::-;42823:34;42819:1;42811:6;42807:14;42800:58;42892:11;42887:2;42879:6;42875:15;42868:36;42789:122;:::o;42917:234::-;43057:34;43053:1;43045:6;43041:14;43034:58;43126:17;43121:2;43113:6;43109:15;43102:42;43023:128;:::o;43157:167::-;43297:19;43293:1;43285:6;43281:14;43274:43;43263:61;:::o;43330:220::-;43470:34;43466:1;43458:6;43454:14;43447:58;43539:3;43534:2;43526:6;43522:15;43515:28;43436:114;:::o;43556:177::-;43696:29;43692:1;43684:6;43680:14;43673:53;43662:71;:::o;43739:236::-;43879:34;43875:1;43867:6;43863:14;43856:58;43948:19;43943:2;43935:6;43931:15;43924:44;43845:130;:::o;43981:231::-;44121:34;44117:1;44109:6;44105:14;44098:58;44190:14;44185:2;44177:6;44173:15;44166:39;44087:125;:::o;44218:174::-;44358:26;44354:1;44346:6;44342:14;44335:50;44324:68;:::o;44398:122::-;44471:24;44489:5;44471:24;:::i;:::-;44464:5;44461:35;44451:2;;44510:1;44507;44500:12;44451:2;44441:79;:::o;44526:116::-;44596:21;44611:5;44596:21;:::i;:::-;44589:5;44586:32;44576:2;;44632:1;44629;44622:12;44576:2;44566:76;:::o;44648:120::-;44720:23;44737:5;44720:23;:::i;:::-;44713:5;44710:34;44700:2;;44758:1;44755;44748:12;44700:2;44690:78;:::o;44774:122::-;44847:24;44865:5;44847:24;:::i;:::-;44840:5;44837:35;44827:2;;44886:1;44883;44876:12;44827:2;44817:79;:::o

Swarm Source

ipfs://0b5e5a7102fa4d10f9146af1020ab2b006d6117ccc7ade34d447dc34b000d7c3
Loading