Token Katty Cats NFT

Overview BRC721

Total Supply:
7 KTN

Holders:
2 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KattyCats

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-16
*/

/**
 *Submitted for verification at polygonscan.com on 2022-03-15
 */

// SPDX-License-Identifier: GPL-3.0

pragma solidity ^0.8.0;

// Part: OpenZeppelin/[email protected]/Address

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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);
            }
        }
    }
}

// Part: OpenZeppelin/[email protected]/Context

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

// Part: OpenZeppelin/[email protected]/IERC165

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

// Part: OpenZeppelin/[email protected]/IERC721Receiver

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

// Part: OpenZeppelin/[email protected]/Strings

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

// Part: OpenZeppelin/[email protected]/ERC165

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

// Part: OpenZeppelin/[email protected]/IERC721

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

// Part: OpenZeppelin/[email protected]/Ownable

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

// Part: OpenZeppelin/[email protected]/IERC721Enumerable

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

// Part: OpenZeppelin/[email protected]/IERC721Metadata

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

// Part: OpenZeppelin/[email protected]/ERC721

/**
 * @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(to).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 {}
}

// Part: OpenZeppelin/[email protected]/ERC721Enumerable

/**
 * @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: KattyCats.sol

contract KattyCats is ERC721Enumerable, Ownable {
    using Strings for uint256;

    string public baseURI =
        "https://gateway.pinata.cloud/ipfs/QmQcGhtLJaDhxPb4kXNzjKFexL4iPxfmLTvKPXWG3NZKD5/";
    string public baseExtension = ".json";
    string public notRevealedUri =
        "https://gateway.pinata.cloud/ipfs/QmWnjLwVSLuTMkFNUMyAUALfq6zNJovFGZ3fQ32aZkRTJG";
    uint256 public cost = 3000000 ether;
    uint256 public maxSupply = 500000;
    uint256 public maxMintAmount = 20;
    uint256 public nftPerAddressLimit = 10000;
    bool public paused = false;
    bool public revealed = true;
    bool public onlyWhitelisted = false;
    mapping(address => bool) whitelistedAddresses;
    mapping(address => uint256) public addressMintedBalance;

    constructor() ERC721("Katty Cats NFT", "KTN") {}

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

    // public
    function mint(uint256 _mintAmount) public payable {
        require(!paused, "the contract is paused");
        uint256 supply = totalSupply();
        require(_mintAmount > 0, "need to mint at least 1 NFT");
        require(
            _mintAmount <= maxMintAmount,
            "max mint amount per session exceeded"
        );
        require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");

        if (msg.sender != owner()) {
            if (onlyWhitelisted == true) {
                require(
                    whitelistedAddresses[msg.sender],
                    "user is not whitelisted"
                );
                uint256 ownerMintedCount = addressMintedBalance[msg.sender];
                require(
                    ownerMintedCount + _mintAmount <= nftPerAddressLimit,
                    "max NFT per address exceeded"
                );
            }
            require(msg.value >= cost * _mintAmount, "insufficient funds");
        }

        for (uint256 i = 1; i <= _mintAmount; i++) {
            addressMintedBalance[msg.sender]++;
            _safeMint(msg.sender, supply + i);
        }
    }

    function isWhitelisted(address _user) public view returns (bool) {
        return whitelistedAddresses[_user];
    }

    function walletOfOwner(address _owner)
        public
        view
        returns (uint256[] memory)
    {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerTokenCount);
        for (uint256 i; i < ownerTokenCount; i++) {
            tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokenIds;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        if (revealed == false) {
            return notRevealedUri;
        }

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

    //only owner
    function reveal() public onlyOwner {
        revealed = true;
    }

    function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
        nftPerAddressLimit = _limit;
    }

    function setCost(uint256 _newCost) public onlyOwner {
        cost = _newCost;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setMaxSupply(uint256 _limit) public onlyOwner {
        maxSupply = _limit;
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function setOnlyWhitelisted(bool _state) public onlyOwner {
        onlyWhitelisted = _state;
    }

    function whitelistUsers(address[] memory addresses) public onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            whitelistedAddresses[addresses[i]] = true;
        }
    }

    function withdraw() public payable onlyOwner {
        (bool os, ) = payable(owner()).call{value: address(this).balance}("");
        require(os);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"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":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060800160405280605181526020016200547a60519139600b908051906020019062000035929190620002ca565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c908051906020019062000083929190620002ca565b50604051806080016040528060508152602001620054cb60509139600d9080519060200190620000b5929190620002ca565b506a027b46536c66c8e3000000600e556207a120600f5560146010556127106011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055503480156200013557600080fd5b506040518060400160405280600e81526020017f4b617474792043617473204e46540000000000000000000000000000000000008152506040518060400160405280600381526020017f4b544e00000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001ba929190620002ca565b508060019080519060200190620001d3929190620002ca565b505050620001f6620001ea620001fc60201b60201c565b6200020460201b60201c565b620003df565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d8906200037a565b90600052602060002090601f016020900481019282620002fc576000855562000348565b82601f106200031757805160ff191683800117855562000348565b8280016001018555821562000348579182015b82811115620003475782518255916020019190600101906200032a565b5b5090506200035791906200035b565b5090565b5b80821115620003765760008160009055506001016200035c565b5090565b600060028204905060018216806200039357607f821691505b60208210811415620003aa57620003a9620003b0565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61508b80620003ef6000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063a475b5dd116100c1578063d5abeb011161007a578063d5abeb0114610948578063da3ef23f14610973578063e985e9c51461099c578063edec5f27146109d9578063f2c4ce1e14610a02578063f2fde38b14610a2b57610272565b8063a475b5dd1461084c578063b88d4fde14610863578063ba7d2c761461088c578063c6682862146108b7578063c87b56dd146108e2578063d0eb26b01461091f57610272565b80637f00c7a6116101135780637f00c7a61461075d5780638da5cb5b1461078657806395d89b41146107b15780639c70b512146107dc578063a0712d6814610807578063a22cb4651461082357610272565b80636352211e146106785780636c0360eb146106b55780636f8b44b0146106e057806370a0823114610709578063715018a61461074657610272565b80632f745c59116101e8578063438b6300116101ac578063438b63001461055657806344a0d68a146105935780634f6ccce7146105bc57806351830227146105f957806355f804b3146106245780635c975abb1461064d57610272565b80632f745c59146104805780633af32abf146104bd5780633c952764146104fa5780633ccfd60b1461052357806342842e0e1461052d57610272565b8063095ea7b31161023a578063095ea7b31461037057806313faede61461039957806318160ddd146103c457806318cae269146103ef578063239c70ae1461042c57806323b872dd1461045757610272565b806301ffc9a71461027757806302329a29146102b457806306fdde03146102dd578063081812fc14610308578063081c8c4414610345575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190613a07565b610a54565b6040516102ab9190614108565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d691906139da565b610ace565b005b3480156102e957600080fd5b506102f2610b67565b6040516102ff9190614123565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613aaa565b610bf9565b60405161033c919061407f565b60405180910390f35b34801561035157600080fd5b5061035a610c7e565b6040516103679190614123565b60405180910390f35b34801561037c57600080fd5b5061039760048036038101906103929190613951565b610d0c565b005b3480156103a557600080fd5b506103ae610e24565b6040516103bb9190614465565b60405180910390f35b3480156103d057600080fd5b506103d9610e2a565b6040516103e69190614465565b60405180910390f35b3480156103fb57600080fd5b50610416600480360381019061041191906137ce565b610e37565b6040516104239190614465565b60405180910390f35b34801561043857600080fd5b50610441610e4f565b60405161044e9190614465565b60405180910390f35b34801561046357600080fd5b5061047e6004803603810190610479919061383b565b610e55565b005b34801561048c57600080fd5b506104a760048036038101906104a29190613951565b610eb5565b6040516104b49190614465565b60405180910390f35b3480156104c957600080fd5b506104e460048036038101906104df91906137ce565b610f5a565b6040516104f19190614108565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c91906139da565b610fb0565b005b61052b611049565b005b34801561053957600080fd5b50610554600480360381019061054f919061383b565b611145565b005b34801561056257600080fd5b5061057d600480360381019061057891906137ce565b611165565b60405161058a91906140e6565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190613aaa565b611213565b005b3480156105c857600080fd5b506105e360048036038101906105de9190613aaa565b611299565b6040516105f09190614465565b60405180910390f35b34801561060557600080fd5b5061060e61130a565b60405161061b9190614108565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613a61565b61131d565b005b34801561065957600080fd5b506106626113b3565b60405161066f9190614108565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613aaa565b6113c6565b6040516106ac919061407f565b60405180910390f35b3480156106c157600080fd5b506106ca611478565b6040516106d79190614123565b60405180910390f35b3480156106ec57600080fd5b5061070760048036038101906107029190613aaa565b611506565b005b34801561071557600080fd5b50610730600480360381019061072b91906137ce565b61158c565b60405161073d9190614465565b60405180910390f35b34801561075257600080fd5b5061075b611644565b005b34801561076957600080fd5b50610784600480360381019061077f9190613aaa565b6116cc565b005b34801561079257600080fd5b5061079b611752565b6040516107a8919061407f565b60405180910390f35b3480156107bd57600080fd5b506107c661177c565b6040516107d39190614123565b60405180910390f35b3480156107e857600080fd5b506107f161180e565b6040516107fe9190614108565b60405180910390f35b610821600480360381019061081c9190613aaa565b611821565b005b34801561082f57600080fd5b5061084a60048036038101906108459190613911565b611bae565b005b34801561085857600080fd5b50610861611d2f565b005b34801561086f57600080fd5b5061088a6004803603810190610885919061388e565b611dc8565b005b34801561089857600080fd5b506108a1611e2a565b6040516108ae9190614465565b60405180910390f35b3480156108c357600080fd5b506108cc611e30565b6040516108d99190614123565b60405180910390f35b3480156108ee57600080fd5b5061090960048036038101906109049190613aaa565b611ebe565b6040516109169190614123565b60405180910390f35b34801561092b57600080fd5b5061094660048036038101906109419190613aaa565b612017565b005b34801561095457600080fd5b5061095d61209d565b60405161096a9190614465565b60405180910390f35b34801561097f57600080fd5b5061099a60048036038101906109959190613a61565b6120a3565b005b3480156109a857600080fd5b506109c360048036038101906109be91906137fb565b612139565b6040516109d09190614108565b60405180910390f35b3480156109e557600080fd5b50610a0060048036038101906109fb9190613991565b6121cd565b005b348015610a0e57600080fd5b50610a296004803603810190610a249190613a61565b6122de565b005b348015610a3757600080fd5b50610a526004803603810190610a4d91906137ce565b612374565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ac75750610ac68261246c565b5b9050919050565b610ad661254e565b73ffffffffffffffffffffffffffffffffffffffff16610af4611752565b73ffffffffffffffffffffffffffffffffffffffff1614610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190614325565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b606060008054610b769061479a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba29061479a565b8015610bef5780601f10610bc457610100808354040283529160200191610bef565b820191906000526020600020905b815481529060010190602001808311610bd257829003601f168201915b5050505050905090565b6000610c0482612556565b610c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3a90614305565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600d8054610c8b9061479a565b80601f0160208091040260200160405190810160405280929190818152602001828054610cb79061479a565b8015610d045780601f10610cd957610100808354040283529160200191610d04565b820191906000526020600020905b815481529060010190602001808311610ce757829003601f168201915b505050505081565b6000610d17826113c6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7f906143a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da761254e565b73ffffffffffffffffffffffffffffffffffffffff161480610dd65750610dd581610dd061254e565b612139565b5b610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90614245565b60405180910390fd5b610e1f83836125c2565b505050565b600e5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60105481565b610e66610e6061254e565b8261267b565b610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c906143e5565b60405180910390fd5b610eb0838383612759565b505050565b6000610ec08361158c565b8210610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614145565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610fb861254e565b73ffffffffffffffffffffffffffffffffffffffff16610fd6611752565b73ffffffffffffffffffffffffffffffffffffffff161461102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102390614325565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b61105161254e565b73ffffffffffffffffffffffffffffffffffffffff1661106f611752565b73ffffffffffffffffffffffffffffffffffffffff16146110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc90614325565b60405180910390fd5b60006110cf611752565b73ffffffffffffffffffffffffffffffffffffffff16476040516110f29061406a565b60006040518083038185875af1925050503d806000811461112f576040519150601f19603f3d011682016040523d82523d6000602084013e611134565b606091505b505090508061114257600080fd5b50565b61116083838360405180602001604052806000815250611dc8565b505050565b606060006111728361158c565b905060008167ffffffffffffffff8111156111905761118f614962565b5b6040519080825280602002602001820160405280156111be5781602001602082028036833780820191505090505b50905060005b82811015611208576111d68582610eb5565b8282815181106111e9576111e8614933565b5b6020026020010181815250508080611200906147fd565b9150506111c4565b508092505050919050565b61121b61254e565b73ffffffffffffffffffffffffffffffffffffffff16611239611752565b73ffffffffffffffffffffffffffffffffffffffff161461128f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128690614325565b60405180910390fd5b80600e8190555050565b60006112a3610e2a565b82106112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db90614405565b60405180910390fd5b600882815481106112f8576112f7614933565b5b90600052602060002001549050919050565b601260019054906101000a900460ff1681565b61132561254e565b73ffffffffffffffffffffffffffffffffffffffff16611343611752565b73ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090614325565b60405180910390fd5b80600b90805190602001906113af929190613544565b5050565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690614285565b60405180910390fd5b80915050919050565b600b80546114859061479a565b80601f01602080910402602001604051908101604052809291908181526020018280546114b19061479a565b80156114fe5780601f106114d3576101008083540402835291602001916114fe565b820191906000526020600020905b8154815290600101906020018083116114e157829003601f168201915b505050505081565b61150e61254e565b73ffffffffffffffffffffffffffffffffffffffff1661152c611752565b73ffffffffffffffffffffffffffffffffffffffff1614611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990614325565b60405180910390fd5b80600f8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f490614265565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164c61254e565b73ffffffffffffffffffffffffffffffffffffffff1661166a611752565b73ffffffffffffffffffffffffffffffffffffffff16146116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b790614325565b60405180910390fd5b6116ca60006129b5565b565b6116d461254e565b73ffffffffffffffffffffffffffffffffffffffff166116f2611752565b73ffffffffffffffffffffffffffffffffffffffff1614611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173f90614325565b60405180910390fd5b8060108190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461178b9061479a565b80601f01602080910402602001604051908101604052809291908181526020018280546117b79061479a565b80156118045780601f106117d957610100808354040283529160200191611804565b820191906000526020600020905b8154815290600101906020018083116117e757829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b601260009054906101000a900460ff1615611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890614345565b60405180910390fd5b600061187b610e2a565b9050600082116118c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b790614445565b60405180910390fd5b601054821115611905576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fc906142c5565b60405180910390fd5b600f54828261191491906145cf565b1115611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c906142a5565b60405180910390fd5b61195d611752565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611b1e5760011515601260029054906101000a900460ff1615151415611acd57601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2e90614425565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506011548382611a8a91906145cf565b1115611acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac2906141c5565b60405180910390fd5b505b81600e54611adb9190614656565b341015611b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b14906143c5565b60405180910390fd5b5b6000600190505b828111611ba957601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611b7c906147fd565b9190505550611b96338284611b9191906145cf565b612a7b565b8080611ba1906147fd565b915050611b25565b505050565b611bb661254e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1b90614205565b60405180910390fd5b8060056000611c3161254e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611cde61254e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d239190614108565b60405180910390a35050565b611d3761254e565b73ffffffffffffffffffffffffffffffffffffffff16611d55611752565b73ffffffffffffffffffffffffffffffffffffffff1614611dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da290614325565b60405180910390fd5b6001601260016101000a81548160ff021916908315150217905550565b611dd9611dd361254e565b8361267b565b611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f906143e5565b60405180910390fd5b611e2484848484612a99565b50505050565b60115481565b600c8054611e3d9061479a565b80601f0160208091040260200160405190810160405280929190818152602001828054611e699061479a565b8015611eb65780601f10611e8b57610100808354040283529160200191611eb6565b820191906000526020600020905b815481529060010190602001808311611e9957829003601f168201915b505050505081565b6060611ec982612556565b611f08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eff90614385565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611fb657600d8054611f319061479a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5d9061479a565b8015611faa5780601f10611f7f57610100808354040283529160200191611faa565b820191906000526020600020905b815481529060010190602001808311611f8d57829003601f168201915b50505050509050612012565b6000611fc0612af5565b90506000815111611fe0576040518060200160405280600081525061200e565b80611fea84612b87565b600c604051602001611ffe93929190614039565b6040516020818303038152906040525b9150505b919050565b61201f61254e565b73ffffffffffffffffffffffffffffffffffffffff1661203d611752565b73ffffffffffffffffffffffffffffffffffffffff1614612093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208a90614325565b60405180910390fd5b8060118190555050565b600f5481565b6120ab61254e565b73ffffffffffffffffffffffffffffffffffffffff166120c9611752565b73ffffffffffffffffffffffffffffffffffffffff161461211f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211690614325565b60405180910390fd5b80600c9080519060200190612135929190613544565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6121d561254e565b73ffffffffffffffffffffffffffffffffffffffff166121f3611752565b73ffffffffffffffffffffffffffffffffffffffff1614612249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224090614325565b60405180910390fd5b60005b81518110156122da5760016013600084848151811061226e5761226d614933565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806122d2906147fd565b91505061224c565b5050565b6122e661254e565b73ffffffffffffffffffffffffffffffffffffffff16612304611752565b73ffffffffffffffffffffffffffffffffffffffff161461235a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235190614325565b60405180910390fd5b80600d9080519060200190612370929190613544565b5050565b61237c61254e565b73ffffffffffffffffffffffffffffffffffffffff1661239a611752565b73ffffffffffffffffffffffffffffffffffffffff16146123f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e790614325565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245790614185565b60405180910390fd5b612469816129b5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061253757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612547575061254682612ce8565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612635836113c6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061268682612556565b6126c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126bc90614225565b60405180910390fd5b60006126d0836113c6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061273f57508373ffffffffffffffffffffffffffffffffffffffff1661272784610bf9565b73ffffffffffffffffffffffffffffffffffffffff16145b80612750575061274f8185612139565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612779826113c6565b73ffffffffffffffffffffffffffffffffffffffff16146127cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127c690614365565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561283f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612836906141e5565b60405180910390fd5b61284a838383612d52565b6128556000826125c2565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128a591906146b0565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128fc91906145cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612a95828260405180602001604052806000815250612e66565b5050565b612aa4848484612759565b612ab084848484612ec1565b612aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae690614165565b60405180910390fd5b50505050565b6060600b8054612b049061479a565b80601f0160208091040260200160405190810160405280929190818152602001828054612b309061479a565b8015612b7d5780601f10612b5257610100808354040283529160200191612b7d565b820191906000526020600020905b815481529060010190602001808311612b6057829003601f168201915b5050505050905090565b60606000821415612bcf576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ce3565b600082905060005b60008214612c01578080612bea906147fd565b915050600a82612bfa9190614625565b9150612bd7565b60008167ffffffffffffffff811115612c1d57612c1c614962565b5b6040519080825280601f01601f191660200182016040528015612c4f5781602001600182028036833780820191505090505b5090505b60008514612cdc57600182612c6891906146b0565b9150600a85612c779190614846565b6030612c8391906145cf565b60f81b818381518110612c9957612c98614933565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cd59190614625565b9450612c53565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612d5d838383613058565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612da057612d9b8161305d565b612ddf565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612dde57612ddd83826130a6565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e2257612e1d81613213565b612e61565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612e6057612e5f82826132e4565b5b5b505050565b612e708383613363565b612e7d6000848484612ec1565b612ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb390614165565b60405180910390fd5b505050565b6000612ee28473ffffffffffffffffffffffffffffffffffffffff16613531565b1561304b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612f0b61254e565b8786866040518563ffffffff1660e01b8152600401612f2d949392919061409a565b602060405180830381600087803b158015612f4757600080fd5b505af1925050508015612f7857506040513d601f19601f82011682018060405250810190612f759190613a34565b60015b612ffb573d8060008114612fa8576040519150601f19603f3d011682016040523d82523d6000602084013e612fad565b606091505b50600081511415612ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fea90614165565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613050565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016130b38461158c565b6130bd91906146b0565b90506000600760008481526020019081526020016000205490508181146131a2576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061322791906146b0565b905060006009600084815260200190815260200160002054905060006008838154811061325757613256614933565b5b90600052602060002001549050806008838154811061327957613278614933565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806132c8576132c7614904565b5b6001900381819060005260206000200160009055905550505050565b60006132ef8361158c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca906142e5565b60405180910390fd5b6133dc81612556565b1561341c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613413906141a5565b60405180910390fd5b61342860008383612d52565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461347891906145cf565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b8280546135509061479a565b90600052602060002090601f01602090048101928261357257600085556135b9565b82601f1061358b57805160ff19168380011785556135b9565b828001600101855582156135b9579182015b828111156135b857825182559160200191906001019061359d565b5b5090506135c691906135ca565b5090565b5b808211156135e35760008160009055506001016135cb565b5090565b60006135fa6135f5846144a5565b614480565b9050808382526020820190508285602086028201111561361d5761361c614996565b5b60005b8581101561364d578161363388826136db565b845260208401935060208301925050600181019050613620565b5050509392505050565b600061366a613665846144d1565b614480565b9050828152602081018484840111156136865761368561499b565b5b613691848285614758565b509392505050565b60006136ac6136a784614502565b614480565b9050828152602081018484840111156136c8576136c761499b565b5b6136d3848285614758565b509392505050565b6000813590506136ea81614ff9565b92915050565b600082601f83011261370557613704614991565b5b81356137158482602086016135e7565b91505092915050565b60008135905061372d81615010565b92915050565b60008135905061374281615027565b92915050565b60008151905061375781615027565b92915050565b600082601f83011261377257613771614991565b5b8135613782848260208601613657565b91505092915050565b600082601f8301126137a05761379f614991565b5b81356137b0848260208601613699565b91505092915050565b6000813590506137c88161503e565b92915050565b6000602082840312156137e4576137e36149a5565b5b60006137f2848285016136db565b91505092915050565b60008060408385031215613812576138116149a5565b5b6000613820858286016136db565b9250506020613831858286016136db565b9150509250929050565b600080600060608486031215613854576138536149a5565b5b6000613862868287016136db565b9350506020613873868287016136db565b9250506040613884868287016137b9565b9150509250925092565b600080600080608085870312156138a8576138a76149a5565b5b60006138b6878288016136db565b94505060206138c7878288016136db565b93505060406138d8878288016137b9565b925050606085013567ffffffffffffffff8111156138f9576138f86149a0565b5b6139058782880161375d565b91505092959194509250565b60008060408385031215613928576139276149a5565b5b6000613936858286016136db565b92505060206139478582860161371e565b9150509250929050565b60008060408385031215613968576139676149a5565b5b6000613976858286016136db565b9250506020613987858286016137b9565b9150509250929050565b6000602082840312156139a7576139a66149a5565b5b600082013567ffffffffffffffff8111156139c5576139c46149a0565b5b6139d1848285016136f0565b91505092915050565b6000602082840312156139f0576139ef6149a5565b5b60006139fe8482850161371e565b91505092915050565b600060208284031215613a1d57613a1c6149a5565b5b6000613a2b84828501613733565b91505092915050565b600060208284031215613a4a57613a496149a5565b5b6000613a5884828501613748565b91505092915050565b600060208284031215613a7757613a766149a5565b5b600082013567ffffffffffffffff811115613a9557613a946149a0565b5b613aa18482850161378b565b91505092915050565b600060208284031215613ac057613abf6149a5565b5b6000613ace848285016137b9565b91505092915050565b6000613ae3838361401b565b60208301905092915050565b613af8816146e4565b82525050565b6000613b0982614558565b613b138185614586565b9350613b1e83614533565b8060005b83811015613b4f578151613b368882613ad7565b9750613b4183614579565b925050600181019050613b22565b5085935050505092915050565b613b65816146f6565b82525050565b6000613b7682614563565b613b808185614597565b9350613b90818560208601614767565b613b99816149aa565b840191505092915050565b6000613baf8261456e565b613bb981856145b3565b9350613bc9818560208601614767565b613bd2816149aa565b840191505092915050565b6000613be88261456e565b613bf281856145c4565b9350613c02818560208601614767565b80840191505092915050565b60008154613c1b8161479a565b613c2581866145c4565b94506001821660008114613c405760018114613c5157613c84565b60ff19831686528186019350613c84565b613c5a85614543565b60005b83811015613c7c57815481890152600182019150602081019050613c5d565b838801955050505b50505092915050565b6000613c9a602b836145b3565b9150613ca5826149bb565b604082019050919050565b6000613cbd6032836145b3565b9150613cc882614a0a565b604082019050919050565b6000613ce06026836145b3565b9150613ceb82614a59565b604082019050919050565b6000613d03601c836145b3565b9150613d0e82614aa8565b602082019050919050565b6000613d26601c836145b3565b9150613d3182614ad1565b602082019050919050565b6000613d496024836145b3565b9150613d5482614afa565b604082019050919050565b6000613d6c6019836145b3565b9150613d7782614b49565b602082019050919050565b6000613d8f602c836145b3565b9150613d9a82614b72565b604082019050919050565b6000613db26038836145b3565b9150613dbd82614bc1565b604082019050919050565b6000613dd5602a836145b3565b9150613de082614c10565b604082019050919050565b6000613df86029836145b3565b9150613e0382614c5f565b604082019050919050565b6000613e1b6016836145b3565b9150613e2682614cae565b602082019050919050565b6000613e3e6024836145b3565b9150613e4982614cd7565b604082019050919050565b6000613e616020836145b3565b9150613e6c82614d26565b602082019050919050565b6000613e84602c836145b3565b9150613e8f82614d4f565b604082019050919050565b6000613ea76020836145b3565b9150613eb282614d9e565b602082019050919050565b6000613eca6016836145b3565b9150613ed582614dc7565b602082019050919050565b6000613eed6029836145b3565b9150613ef882614df0565b604082019050919050565b6000613f10602f836145b3565b9150613f1b82614e3f565b604082019050919050565b6000613f336021836145b3565b9150613f3e82614e8e565b604082019050919050565b6000613f566000836145a8565b9150613f6182614edd565b600082019050919050565b6000613f796012836145b3565b9150613f8482614ee0565b602082019050919050565b6000613f9c6031836145b3565b9150613fa782614f09565b604082019050919050565b6000613fbf602c836145b3565b9150613fca82614f58565b604082019050919050565b6000613fe26017836145b3565b9150613fed82614fa7565b602082019050919050565b6000614005601b836145b3565b915061401082614fd0565b602082019050919050565b6140248161474e565b82525050565b6140338161474e565b82525050565b60006140458286613bdd565b91506140518285613bdd565b915061405d8284613c0e565b9150819050949350505050565b600061407582613f49565b9150819050919050565b60006020820190506140946000830184613aef565b92915050565b60006080820190506140af6000830187613aef565b6140bc6020830186613aef565b6140c9604083018561402a565b81810360608301526140db8184613b6b565b905095945050505050565b600060208201905081810360008301526141008184613afe565b905092915050565b600060208201905061411d6000830184613b5c565b92915050565b6000602082019050818103600083015261413d8184613ba4565b905092915050565b6000602082019050818103600083015261415e81613c8d565b9050919050565b6000602082019050818103600083015261417e81613cb0565b9050919050565b6000602082019050818103600083015261419e81613cd3565b9050919050565b600060208201905081810360008301526141be81613cf6565b9050919050565b600060208201905081810360008301526141de81613d19565b9050919050565b600060208201905081810360008301526141fe81613d3c565b9050919050565b6000602082019050818103600083015261421e81613d5f565b9050919050565b6000602082019050818103600083015261423e81613d82565b9050919050565b6000602082019050818103600083015261425e81613da5565b9050919050565b6000602082019050818103600083015261427e81613dc8565b9050919050565b6000602082019050818103600083015261429e81613deb565b9050919050565b600060208201905081810360008301526142be81613e0e565b9050919050565b600060208201905081810360008301526142de81613e31565b9050919050565b600060208201905081810360008301526142fe81613e54565b9050919050565b6000602082019050818103600083015261431e81613e77565b9050919050565b6000602082019050818103600083015261433e81613e9a565b9050919050565b6000602082019050818103600083015261435e81613ebd565b9050919050565b6000602082019050818103600083015261437e81613ee0565b9050919050565b6000602082019050818103600083015261439e81613f03565b9050919050565b600060208201905081810360008301526143be81613f26565b9050919050565b600060208201905081810360008301526143de81613f6c565b9050919050565b600060208201905081810360008301526143fe81613f8f565b9050919050565b6000602082019050818103600083015261441e81613fb2565b9050919050565b6000602082019050818103600083015261443e81613fd5565b9050919050565b6000602082019050818103600083015261445e81613ff8565b9050919050565b600060208201905061447a600083018461402a565b92915050565b600061448a61449b565b905061449682826147cc565b919050565b6000604051905090565b600067ffffffffffffffff8211156144c0576144bf614962565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156144ec576144eb614962565b5b6144f5826149aa565b9050602081019050919050565b600067ffffffffffffffff82111561451d5761451c614962565b5b614526826149aa565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006145da8261474e565b91506145e58361474e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561461a57614619614877565b5b828201905092915050565b60006146308261474e565b915061463b8361474e565b92508261464b5761464a6148a6565b5b828204905092915050565b60006146618261474e565b915061466c8361474e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146a5576146a4614877565b5b828202905092915050565b60006146bb8261474e565b91506146c68361474e565b9250828210156146d9576146d8614877565b5b828203905092915050565b60006146ef8261472e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561478557808201518184015260208101905061476a565b83811115614794576000848401525b50505050565b600060028204905060018216806147b257607f821691505b602082108114156147c6576147c56148d5565b5b50919050565b6147d5826149aa565b810181811067ffffffffffffffff821117156147f4576147f3614962565b5b80604052505050565b60006148088261474e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561483b5761483a614877565b5b600182019050919050565b60006148518261474e565b915061485c8361474e565b92508261486c5761486b6148a6565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615002816146e4565b811461500d57600080fd5b50565b615019816146f6565b811461502457600080fd5b50565b61503081614702565b811461503b57600080fd5b50565b6150478161474e565b811461505257600080fd5b5056fea2646970667358221220ce2c8e89ee5e0b57562673c6205d082fb7823dbe1c5ea704575b4c1f258133e464736f6c6343000807003368747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d51634768744c4a614468785062346b584e7a6a4b4665784c34695078666d4c54764b50585747334e5a4b44352f68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d576e6a4c7756534c75544d6b464e554d794155414c6671367a4e4a6f7646475a3366513332615a6b52544a47

Deployed ByteCode Sourcemap

44678:4927:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38240:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49041:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25437:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27130:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44934:122;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26653:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45063:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39043:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45394:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45145:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28189:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38624:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46842:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49128:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49447:155;;;:::i;:::-;;28636:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46968:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48312:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39233:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45266:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48636:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45233:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25044:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44767:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48536:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24687:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20649:94;;;;;;;;;;;;;:::i;:::-;;48406:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19998:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25606:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45300:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45662:1172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27510:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48117:69;;;;;;;;;;;;;:::i;:::-;;28892:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45185:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44890:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47366:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48194:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48748:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27908:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49237:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48907:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20898:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38240:300;38387:4;38444:35;38429:50;;;:11;:50;;;;:103;;;;38496:36;38520:11;38496:23;:36::i;:::-;38429:103;38409:123;;38240:300;;;:::o;49041:79::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49106:6:::1;49097;;:15;;;;;;;;;;;;;;;;;;49041:79:::0;:::o;25437:100::-;25491:13;25524:5;25517:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25437:100;:::o;27130:308::-;27251:7;27298:16;27306:7;27298;:16::i;:::-;27276:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27406:15;:24;27422:7;27406:24;;;;;;;;;;;;;;;;;;;;;27399:31;;27130:308;;;:::o;44934:122::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26653:411::-;26734:13;26750:23;26765:7;26750:14;:23::i;:::-;26734:39;;26798:5;26792:11;;:2;:11;;;;26784:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26892:5;26876:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26901:37;26918:5;26925:12;:10;:12::i;:::-;26901:16;:37::i;:::-;26876:62;26854:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27035:21;27044:2;27048:7;27035:8;:21::i;:::-;26723:341;26653:411;;:::o;45063:35::-;;;;:::o;39043:113::-;39104:7;39131:10;:17;;;;39124:24;;39043:113;:::o;45394:55::-;;;;;;;;;;;;;;;;;:::o;45145:33::-;;;;:::o;28189:376::-;28398:41;28417:12;:10;:12::i;:::-;28431:7;28398:18;:41::i;:::-;28376:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28529:28;28539:4;28545:2;28549:7;28529:9;:28::i;:::-;28189:376;;;:::o;38624:343::-;38766:7;38821:23;38838:5;38821:16;:23::i;:::-;38813:5;:31;38791:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;38933:12;:19;38946:5;38933:19;;;;;;;;;;;;;;;:26;38953:5;38933:26;;;;;;;;;;;;38926:33;;38624:343;;;;:::o;46842:118::-;46901:4;46925:20;:27;46946:5;46925:27;;;;;;;;;;;;;;;;;;;;;;;;;46918:34;;46842:118;;;:::o;49128:101::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49215:6:::1;49197:15;;:24;;;;;;;;;;;;;;;;;;49128:101:::0;:::o;49447:155::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49504:7:::1;49525;:5;:7::i;:::-;49517:21;;49546;49517:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49503:69;;;49591:2;49583:11;;;::::0;::::1;;49492:110;49447:155::o:0;28636:185::-;28774:39;28791:4;28797:2;28801:7;28774:39;;;;;;;;;;;;:16;:39::i;:::-;28636:185;;;:::o;46968:390::-;47055:16;47089:23;47115:17;47125:6;47115:9;:17::i;:::-;47089:43;;47143:25;47185:15;47171:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47143:58;;47217:9;47212:113;47232:15;47228:1;:19;47212:113;;;47283:30;47303:6;47311:1;47283:19;:30::i;:::-;47269:8;47278:1;47269:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;47249:3;;;;;:::i;:::-;;;;47212:113;;;;47342:8;47335:15;;;;46968:390;;;:::o;48312:86::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48382:8:::1;48375:4;:15;;;;48312:86:::0;:::o;39233:320::-;39353:7;39408:30;:28;:30::i;:::-;39400:5;:38;39378:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39528:10;39539:5;39528:17;;;;;;;;:::i;:::-;;;;;;;;;;39521:24;;39233:320;;;:::o;45266:27::-;;;;;;;;;;;;;:::o;48636:104::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48721:11:::1;48711:7;:21;;;;;;;;;;;;:::i;:::-;;48636:104:::0;:::o;45233:26::-;;;;;;;;;;;;;:::o;25044:326::-;25161:7;25186:13;25202:7;:16;25210:7;25202:16;;;;;;;;;;;;;;;;;;;;;25186:32;;25268:1;25251:19;;:5;:19;;;;25229:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25357:5;25350:12;;;25044:326;;;:::o;44767:116::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48536:92::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48614:6:::1;48602:9;:18;;;;48536:92:::0;:::o;24687:295::-;24804:7;24868:1;24851:19;;:5;:19;;;;24829:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;24958:9;:16;24968:5;24958:16;;;;;;;;;;;;;;;;24951:23;;24687:295;;;:::o;20649:94::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20714:21:::1;20732:1;20714:9;:21::i;:::-;20649:94::o:0;48406:122::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48503:17:::1;48487:13;:33;;;;48406:122:::0;:::o;19998:87::-;20044:7;20071:6;;;;;;;;;;;20064:13;;19998:87;:::o;25606:104::-;25662:13;25695:7;25688:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25606:104;:::o;45300:35::-;;;;;;;;;;;;;:::o;45662:1172::-;45732:6;;;;;;;;;;;45731:7;45723:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;45776:14;45793:13;:11;:13::i;:::-;45776:30;;45839:1;45825:11;:15;45817:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;45920:13;;45905:11;:28;;45883:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;46040:9;;46025:11;46016:6;:20;;;;:::i;:::-;:33;;46008:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46107:7;:5;:7::i;:::-;46093:21;;:10;:21;;;46089:574;;46154:4;46135:23;;:15;;;;;;;;;;;:23;;;46131:444;;;46209:20;:32;46230:10;46209:32;;;;;;;;;;;;;;;;;;;;;;;;;46179:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;46327:24;46354:20;:32;46375:10;46354:32;;;;;;;;;;;;;;;;46327:59;;46469:18;;46454:11;46435:16;:30;;;;:::i;:::-;:52;;46405:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;46160:415;46131:444;46617:11;46610:4;;:18;;;;:::i;:::-;46597:9;:31;;46589:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;46089:574;46680:9;46692:1;46680:13;;46675:152;46700:11;46695:1;:16;46675:152;;46733:20;:32;46754:10;46733:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;46782:33;46792:10;46813:1;46804:6;:10;;;;:::i;:::-;46782:9;:33::i;:::-;46713:3;;;;;:::i;:::-;;;;46675:152;;;;45712:1122;45662:1172;:::o;27510:327::-;27657:12;:10;:12::i;:::-;27645:24;;:8;:24;;;;27637:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27757:8;27712:18;:32;27731:12;:10;:12::i;:::-;27712:32;;;;;;;;;;;;;;;:42;27745:8;27712:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27810:8;27781:48;;27796:12;:10;:12::i;:::-;27781:48;;;27820:8;27781:48;;;;;;:::i;:::-;;;;;;;;27510:327;;:::o;48117:69::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48174:4:::1;48163:8;;:15;;;;;;;;;;;;;;;;;;48117:69::o:0;28892:365::-;29081:41;29100:12;:10;:12::i;:::-;29114:7;29081:18;:41::i;:::-;29059:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:39;29224:4;29230:2;29234:7;29243:5;29210:13;:39::i;:::-;28892:365;;;;:::o;45185:41::-;;;;:::o;44890:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47366:725::-;47484:13;47537:16;47545:7;47537;:16::i;:::-;47515:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;47657:5;47645:17;;:8;;;;;;;;;;;:17;;;47641:71;;;47686:14;47679:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47641:71;47724:28;47755:10;:8;:10::i;:::-;47724:41;;47827:1;47802:14;47796:28;:32;:287;;;;;;;;;;;;;;;;;47920:14;47961:18;:7;:16;:18::i;:::-;48006:13;47877:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47796:287;47776:307;;;47366:725;;;;:::o;48194:110::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48290:6:::1;48269:18;:27;;;;48194:110:::0;:::o;45105:33::-;;;;:::o;48748:151::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48874:17:::1;48858:13;:33;;;;;;;;;;;;:::i;:::-;;48748:151:::0;:::o;27908:214::-;28050:4;28079:18;:25;28098:5;28079:25;;;;;;;;;;;;;;;:35;28105:8;28079:35;;;;;;;;;;;;;;;;;;;;;;;;;28072:42;;27908:214;;;;:::o;49237:202::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49322:9:::1;49317:115;49341:9;:16;49337:1;:20;49317:115;;;49416:4;49379:20;:34;49400:9;49410:1;49400:12;;;;;;;;:::i;:::-;;;;;;;;49379:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;49359:3;;;;;:::i;:::-;;;;49317:115;;;;49237:202:::0;:::o;48907:126::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49010:15:::1;48993:14;:32;;;;;;;;;;;;:::i;:::-;;48907:126:::0;:::o;20898:229::-;20229:12;:10;:12::i;:::-;20218:23;;:7;:5;:7::i;:::-;:23;;;20210:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21021:1:::1;21001:22;;:8;:22;;;;20979:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;21100:19;21110:8;21100:9;:19::i;:::-;20898:229:::0;:::o;24268:355::-;24415:4;24472:25;24457:40;;;:11;:40;;;;:105;;;;24529:33;24514:48;;;:11;:48;;;;24457:105;:158;;;;24579:36;24603:11;24579:23;:36::i;:::-;24457:158;24437:178;;24268:355;;;:::o;9066:98::-;9119:7;9146:10;9139:17;;9066:98;:::o;30804:127::-;30869:4;30921:1;30893:30;;:7;:16;30901:7;30893:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30886:37;;30804:127;;;:::o;34927:174::-;35029:2;35002:15;:24;35018:7;35002:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35085:7;35081:2;35047:46;;35056:23;35071:7;35056:14;:23::i;:::-;35047:46;;;;;;;;;;;;34927:174;;:::o;31098:452::-;31227:4;31271:16;31279:7;31271;:16::i;:::-;31249:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31370:13;31386:23;31401:7;31386:14;:23::i;:::-;31370:39;;31439:5;31428:16;;:7;:16;;;:64;;;;31485:7;31461:31;;:20;31473:7;31461:11;:20::i;:::-;:31;;;31428:64;:113;;;;31509:32;31526:5;31533:7;31509:16;:32::i;:::-;31428:113;31420:122;;;31098:452;;;;:::o;34194:615::-;34367:4;34340:31;;:23;34355:7;34340:14;:23::i;:::-;:31;;;34318:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34473:1;34459:16;;:2;:16;;;;34451:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34529:39;34550:4;34556:2;34560:7;34529:20;:39::i;:::-;34633:29;34650:1;34654:7;34633:8;:29::i;:::-;34694:1;34675:9;:15;34685:4;34675:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34723:1;34706:9;:13;34716:2;34706:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34754:2;34735:7;:16;34743:7;34735:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34793:7;34789:2;34774:27;;34783:4;34774:27;;;;;;;;;;;;34194:615;;;:::o;21135:173::-;21191:16;21210:6;;;;;;;;;;;21191:25;;21236:8;21227:6;;:17;;;;;;;;;;;;;;;;;;21291:8;21260:40;;21281:8;21260:40;;;;;;;;;;;;21180:128;21135:173;:::o;31892:110::-;31968:26;31978:2;31982:7;31968:26;;;;;;;;;;;;:9;:26::i;:::-;31892:110;;:::o;30139:352::-;30296:28;30306:4;30312:2;30316:7;30296:9;:28::i;:::-;30357:48;30380:4;30386:2;30390:7;30399:5;30357:22;:48::i;:::-;30335:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30139:352;;;;:::o;45531:108::-;45591:13;45624:7;45617:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45531:108;:::o;11312:723::-;11368:13;11598:1;11589:5;:10;11585:53;;;11616:10;;;;;;;;;;;;;;;;;;;;;11585:53;11648:12;11663:5;11648:20;;11679:14;11704:78;11719:1;11711:4;:9;11704:78;;11737:8;;;;;:::i;:::-;;;;11768:2;11760:10;;;;;:::i;:::-;;;11704:78;;;11792:19;11824:6;11814:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11792:39;;11842:154;11858:1;11849:5;:10;11842:154;;11886:1;11876:11;;;;;:::i;:::-;;;11953:2;11945:5;:10;;;;:::i;:::-;11932:2;:24;;;;:::i;:::-;11919:39;;11902:6;11909;11902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11982:2;11973:11;;;;;:::i;:::-;;;11842:154;;;12020:6;12006:21;;;;;11312:723;;;;:::o;13862:207::-;13992:4;14036:25;14021:40;;;:11;:40;;;;14014:47;;13862:207;;;:::o;40166:589::-;40310:45;40337:4;40343:2;40347:7;40310:26;:45::i;:::-;40388:1;40372:18;;:4;:18;;;40368:187;;;40407:40;40439:7;40407:31;:40::i;:::-;40368:187;;;40477:2;40469:10;;:4;:10;;;40465:90;;40496:47;40529:4;40535:7;40496:32;:47::i;:::-;40465:90;40368:187;40583:1;40569:16;;:2;:16;;;40565:183;;;40602:45;40639:7;40602:36;:45::i;:::-;40565:183;;;40675:4;40669:10;;:2;:10;;;40665:83;;40696:40;40724:2;40728:7;40696:27;:40::i;:::-;40665:83;40565:183;40166:589;;;:::o;32229:321::-;32359:18;32365:2;32369:7;32359:5;:18::i;:::-;32410:54;32441:1;32445:2;32449:7;32458:5;32410:22;:54::i;:::-;32388:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32229:321;;;:::o;35666:984::-;35821:4;35842:15;:2;:13;;;:15::i;:::-;35838:805;;;35911:2;35895:36;;;35954:12;:10;:12::i;:::-;35989:4;36016:7;36046:5;35895:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35874:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36274:1;36257:6;:13;:18;36253:320;;;36300:108;;;;;;;;;;:::i;:::-;;;;;;;;36253:320;36523:6;36517:13;36508:6;36504:2;36500:15;36493:38;35874:714;36144:45;;;36134:55;;;:6;:55;;;;36127:62;;;;;35838:805;36627:4;36620:11;;35666:984;;;;;;;:::o;37222:126::-;;;;:::o;41478:164::-;41582:10;:17;;;;41555:15;:24;41571:7;41555:24;;;;;;;;;;;:44;;;;41610:10;41626:7;41610:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41478:164;:::o;42269:1002::-;42549:22;42599:1;42574:22;42591:4;42574:16;:22::i;:::-;:26;;;;:::i;:::-;42549:51;;42611:18;42632:17;:26;42650:7;42632:26;;;;;;;;;;;;42611:47;;42779:14;42765:10;:28;42761:328;;42810:19;42832:12;:18;42845:4;42832:18;;;;;;;;;;;;;;;:34;42851:14;42832:34;;;;;;;;;;;;42810:56;;42916:11;42883:12;:18;42896:4;42883:18;;;;;;;;;;;;;;;:30;42902:10;42883:30;;;;;;;;;;;:44;;;;43033:10;43000:17;:30;43018:11;43000:30;;;;;;;;;;;:43;;;;42795:294;42761:328;43185:17;:26;43203:7;43185:26;;;;;;;;;;;43178:33;;;43229:12;:18;43242:4;43229:18;;;;;;;;;;;;;;;:34;43248:14;43229:34;;;;;;;;;;;43222:41;;;42364:907;;42269:1002;;:::o;43566:1079::-;43819:22;43864:1;43844:10;:17;;;;:21;;;;:::i;:::-;43819:46;;43876:18;43897:15;:24;43913:7;43897:24;;;;;;;;;;;;43876:45;;44248:19;44270:10;44281:14;44270:26;;;;;;;;:::i;:::-;;;;;;;;;;44248:48;;44334:11;44309:10;44320;44309:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44445:10;44414:15;:28;44430:11;44414:28;;;;;;;;;;;:41;;;;44586:15;:24;44602:7;44586:24;;;;;;;;;;;44579:31;;;44621:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43637:1008;;;43566:1079;:::o;41056:221::-;41141:14;41158:20;41175:2;41158:16;:20::i;:::-;41141:37;;41216:7;41189:12;:16;41202:2;41189:16;;;;;;;;;;;;;;;:24;41206:6;41189:24;;;;;;;;;;;:34;;;;41263:6;41234:17;:26;41252:7;41234:26;;;;;;;;;;;:35;;;;41130:147;41056:221;;:::o;32886:382::-;32980:1;32966:16;;:2;:16;;;;32958:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33039:16;33047:7;33039;:16::i;:::-;33038:17;33030:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33101:45;33130:1;33134:2;33138:7;33101:20;:45::i;:::-;33176:1;33159:9;:13;33169:2;33159:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33207:2;33188:7;:16;33196:7;33188:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33252:7;33248:2;33227:33;;33244:1;33227:33;;;;;;;;;;;;32886:382;;:::o;884:387::-;944:4;1152:12;1219:7;1207:20;1199:28;;1262:1;1255:4;:8;1248:15;;;884:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:179::-;9239:10;9260:46;9302:3;9294:6;9260:46;:::i;:::-;9338:4;9333:3;9329:14;9315:28;;9170:179;;;;:::o;9355:118::-;9442:24;9460:5;9442:24;:::i;:::-;9437:3;9430:37;9355:118;;:::o;9509:732::-;9628:3;9657:54;9705:5;9657:54;:::i;:::-;9727:86;9806:6;9801:3;9727:86;:::i;:::-;9720:93;;9837:56;9887:5;9837:56;:::i;:::-;9916:7;9947:1;9932:284;9957:6;9954:1;9951:13;9932:284;;;10033:6;10027:13;10060:63;10119:3;10104:13;10060:63;:::i;:::-;10053:70;;10146:60;10199:6;10146:60;:::i;:::-;10136:70;;9992:224;9979:1;9976;9972:9;9967:14;;9932:284;;;9936:14;10232:3;10225:10;;9633:608;;;9509:732;;;;:::o;10247:109::-;10328:21;10343:5;10328:21;:::i;:::-;10323:3;10316:34;10247:109;;:::o;10362:360::-;10448:3;10476:38;10508:5;10476:38;:::i;:::-;10530:70;10593:6;10588:3;10530:70;:::i;:::-;10523:77;;10609:52;10654:6;10649:3;10642:4;10635:5;10631:16;10609:52;:::i;:::-;10686:29;10708:6;10686:29;:::i;:::-;10681:3;10677:39;10670:46;;10452:270;10362:360;;;;:::o;10728:364::-;10816:3;10844:39;10877:5;10844:39;:::i;:::-;10899:71;10963:6;10958:3;10899:71;:::i;:::-;10892:78;;10979:52;11024:6;11019:3;11012:4;11005:5;11001:16;10979:52;:::i;:::-;11056:29;11078:6;11056:29;:::i;:::-;11051:3;11047:39;11040:46;;10820:272;10728:364;;;;:::o;11098:377::-;11204:3;11232:39;11265:5;11232:39;:::i;:::-;11287:89;11369:6;11364:3;11287:89;:::i;:::-;11280:96;;11385:52;11430:6;11425:3;11418:4;11411:5;11407:16;11385:52;:::i;:::-;11462:6;11457:3;11453:16;11446:23;;11208:267;11098:377;;;;:::o;11505:845::-;11608:3;11645:5;11639:12;11674:36;11700:9;11674:36;:::i;:::-;11726:89;11808:6;11803:3;11726:89;:::i;:::-;11719:96;;11846:1;11835:9;11831:17;11862:1;11857:137;;;;12008:1;12003:341;;;;11824:520;;11857:137;11941:4;11937:9;11926;11922:25;11917:3;11910:38;11977:6;11972:3;11968:16;11961:23;;11857:137;;12003:341;12070:38;12102:5;12070:38;:::i;:::-;12130:1;12144:154;12158:6;12155:1;12152:13;12144:154;;;12232:7;12226:14;12222:1;12217:3;12213:11;12206:35;12282:1;12273:7;12269:15;12258:26;;12180:4;12177:1;12173:12;12168:17;;12144:154;;;12327:6;12322:3;12318:16;12311:23;;12010:334;;11824:520;;11612:738;;11505:845;;;;:::o;12356:366::-;12498:3;12519:67;12583:2;12578:3;12519:67;:::i;:::-;12512:74;;12595:93;12684:3;12595:93;:::i;:::-;12713:2;12708:3;12704:12;12697:19;;12356:366;;;:::o;12728:::-;12870:3;12891:67;12955:2;12950:3;12891:67;:::i;:::-;12884:74;;12967:93;13056:3;12967:93;:::i;:::-;13085:2;13080:3;13076:12;13069:19;;12728:366;;;:::o;13100:::-;13242:3;13263:67;13327:2;13322:3;13263:67;:::i;:::-;13256:74;;13339:93;13428:3;13339:93;:::i;:::-;13457:2;13452:3;13448:12;13441:19;;13100:366;;;:::o;13472:::-;13614:3;13635:67;13699:2;13694:3;13635:67;:::i;:::-;13628:74;;13711:93;13800:3;13711:93;:::i;:::-;13829:2;13824:3;13820:12;13813:19;;13472:366;;;:::o;13844:::-;13986:3;14007:67;14071:2;14066:3;14007:67;:::i;:::-;14000:74;;14083:93;14172:3;14083:93;:::i;:::-;14201:2;14196:3;14192:12;14185:19;;13844:366;;;:::o;14216:::-;14358:3;14379:67;14443:2;14438:3;14379:67;:::i;:::-;14372:74;;14455:93;14544:3;14455:93;:::i;:::-;14573:2;14568:3;14564:12;14557:19;;14216:366;;;:::o;14588:::-;14730:3;14751:67;14815:2;14810:3;14751:67;:::i;:::-;14744:74;;14827:93;14916:3;14827:93;:::i;:::-;14945:2;14940:3;14936:12;14929:19;;14588:366;;;:::o;14960:::-;15102:3;15123:67;15187:2;15182:3;15123:67;:::i;:::-;15116:74;;15199:93;15288:3;15199:93;:::i;:::-;15317:2;15312:3;15308:12;15301:19;;14960:366;;;:::o;15332:::-;15474:3;15495:67;15559:2;15554:3;15495:67;:::i;:::-;15488:74;;15571:93;15660:3;15571:93;:::i;:::-;15689:2;15684:3;15680:12;15673:19;;15332:366;;;:::o;15704:::-;15846:3;15867:67;15931:2;15926:3;15867:67;:::i;:::-;15860:74;;15943:93;16032:3;15943:93;:::i;:::-;16061:2;16056:3;16052:12;16045:19;;15704:366;;;:::o;16076:::-;16218:3;16239:67;16303:2;16298:3;16239:67;:::i;:::-;16232:74;;16315:93;16404:3;16315:93;:::i;:::-;16433:2;16428:3;16424:12;16417:19;;16076:366;;;:::o;16448:::-;16590:3;16611:67;16675:2;16670:3;16611:67;:::i;:::-;16604:74;;16687:93;16776:3;16687:93;:::i;:::-;16805:2;16800:3;16796:12;16789:19;;16448:366;;;:::o;16820:::-;16962:3;16983:67;17047:2;17042:3;16983:67;:::i;:::-;16976:74;;17059:93;17148:3;17059:93;:::i;:::-;17177:2;17172:3;17168:12;17161:19;;16820:366;;;:::o;17192:::-;17334:3;17355:67;17419:2;17414:3;17355:67;:::i;:::-;17348:74;;17431:93;17520:3;17431:93;:::i;:::-;17549:2;17544:3;17540:12;17533:19;;17192:366;;;:::o;17564:::-;17706:3;17727:67;17791:2;17786:3;17727:67;:::i;:::-;17720:74;;17803:93;17892:3;17803:93;:::i;:::-;17921:2;17916:3;17912:12;17905:19;;17564:366;;;:::o;17936:::-;18078:3;18099:67;18163:2;18158:3;18099:67;:::i;:::-;18092:74;;18175:93;18264:3;18175:93;:::i;:::-;18293:2;18288:3;18284:12;18277:19;;17936:366;;;:::o;18308:::-;18450:3;18471:67;18535:2;18530:3;18471:67;:::i;:::-;18464:74;;18547:93;18636:3;18547:93;:::i;:::-;18665:2;18660:3;18656:12;18649:19;;18308:366;;;:::o;18680:::-;18822:3;18843:67;18907:2;18902:3;18843:67;:::i;:::-;18836:74;;18919:93;19008:3;18919:93;:::i;:::-;19037:2;19032:3;19028:12;19021:19;;18680:366;;;:::o;19052:::-;19194:3;19215:67;19279:2;19274:3;19215:67;:::i;:::-;19208:74;;19291:93;19380:3;19291:93;:::i;:::-;19409:2;19404:3;19400:12;19393:19;;19052:366;;;:::o;19424:::-;19566:3;19587:67;19651:2;19646:3;19587:67;:::i;:::-;19580:74;;19663:93;19752:3;19663:93;:::i;:::-;19781:2;19776:3;19772:12;19765:19;;19424:366;;;:::o;19796:398::-;19955:3;19976:83;20057:1;20052:3;19976:83;:::i;:::-;19969:90;;20068:93;20157:3;20068:93;:::i;:::-;20186:1;20181:3;20177:11;20170:18;;19796:398;;;:::o;20200:366::-;20342:3;20363:67;20427:2;20422:3;20363:67;:::i;:::-;20356:74;;20439:93;20528:3;20439:93;:::i;:::-;20557:2;20552:3;20548:12;20541:19;;20200:366;;;:::o;20572:::-;20714:3;20735:67;20799:2;20794:3;20735:67;:::i;:::-;20728:74;;20811:93;20900:3;20811:93;:::i;:::-;20929:2;20924:3;20920:12;20913:19;;20572:366;;;:::o;20944:::-;21086:3;21107:67;21171:2;21166:3;21107:67;:::i;:::-;21100:74;;21183:93;21272:3;21183:93;:::i;:::-;21301:2;21296:3;21292:12;21285:19;;20944:366;;;:::o;21316:::-;21458:3;21479:67;21543:2;21538:3;21479:67;:::i;:::-;21472:74;;21555:93;21644:3;21555:93;:::i;:::-;21673:2;21668:3;21664:12;21657:19;;21316:366;;;:::o;21688:::-;21830:3;21851:67;21915:2;21910:3;21851:67;:::i;:::-;21844:74;;21927:93;22016:3;21927:93;:::i;:::-;22045:2;22040:3;22036:12;22029:19;;21688:366;;;:::o;22060:108::-;22137:24;22155:5;22137:24;:::i;:::-;22132:3;22125:37;22060:108;;:::o;22174:118::-;22261:24;22279:5;22261:24;:::i;:::-;22256:3;22249:37;22174:118;;:::o;22298:589::-;22523:3;22545:95;22636:3;22627:6;22545:95;:::i;:::-;22538:102;;22657:95;22748:3;22739:6;22657:95;:::i;:::-;22650:102;;22769:92;22857:3;22848:6;22769:92;:::i;:::-;22762:99;;22878:3;22871:10;;22298:589;;;;;;:::o;22893:379::-;23077:3;23099:147;23242:3;23099:147;:::i;:::-;23092:154;;23263:3;23256:10;;22893:379;;;:::o;23278:222::-;23371:4;23409:2;23398:9;23394:18;23386:26;;23422:71;23490:1;23479:9;23475:17;23466:6;23422:71;:::i;:::-;23278:222;;;;:::o;23506:640::-;23701:4;23739:3;23728:9;23724:19;23716:27;;23753:71;23821:1;23810:9;23806:17;23797:6;23753:71;:::i;:::-;23834:72;23902:2;23891:9;23887:18;23878:6;23834:72;:::i;:::-;23916;23984:2;23973:9;23969:18;23960:6;23916:72;:::i;:::-;24035:9;24029:4;24025:20;24020:2;24009:9;24005:18;23998:48;24063:76;24134:4;24125:6;24063:76;:::i;:::-;24055:84;;23506:640;;;;;;;:::o;24152:373::-;24295:4;24333:2;24322:9;24318:18;24310:26;;24382:9;24376:4;24372:20;24368:1;24357:9;24353:17;24346:47;24410:108;24513:4;24504:6;24410:108;:::i;:::-;24402:116;;24152:373;;;;:::o;24531:210::-;24618:4;24656:2;24645:9;24641:18;24633:26;;24669:65;24731:1;24720:9;24716:17;24707:6;24669:65;:::i;:::-;24531:210;;;;:::o;24747:313::-;24860:4;24898:2;24887:9;24883:18;24875:26;;24947:9;24941:4;24937:20;24933:1;24922:9;24918:17;24911:47;24975:78;25048:4;25039:6;24975:78;:::i;:::-;24967:86;;24747:313;;;;:::o;25066:419::-;25232:4;25270:2;25259:9;25255:18;25247:26;;25319:9;25313:4;25309:20;25305:1;25294:9;25290:17;25283:47;25347:131;25473:4;25347:131;:::i;:::-;25339:139;;25066:419;;;:::o;25491:::-;25657:4;25695:2;25684:9;25680:18;25672:26;;25744:9;25738:4;25734:20;25730:1;25719:9;25715:17;25708:47;25772:131;25898:4;25772:131;:::i;:::-;25764:139;;25491:419;;;:::o;25916:::-;26082:4;26120:2;26109:9;26105:18;26097:26;;26169:9;26163:4;26159:20;26155:1;26144:9;26140:17;26133:47;26197:131;26323:4;26197:131;:::i;:::-;26189:139;;25916:419;;;:::o;26341:::-;26507:4;26545:2;26534:9;26530:18;26522:26;;26594:9;26588:4;26584:20;26580:1;26569:9;26565:17;26558:47;26622:131;26748:4;26622:131;:::i;:::-;26614:139;;26341:419;;;:::o;26766:::-;26932:4;26970:2;26959:9;26955:18;26947:26;;27019:9;27013:4;27009:20;27005:1;26994:9;26990:17;26983:47;27047:131;27173:4;27047:131;:::i;:::-;27039:139;;26766:419;;;:::o;27191:::-;27357:4;27395:2;27384:9;27380:18;27372:26;;27444:9;27438:4;27434:20;27430:1;27419:9;27415:17;27408:47;27472:131;27598:4;27472:131;:::i;:::-;27464:139;;27191:419;;;:::o;27616:::-;27782:4;27820:2;27809:9;27805:18;27797:26;;27869:9;27863:4;27859:20;27855:1;27844:9;27840:17;27833:47;27897:131;28023:4;27897:131;:::i;:::-;27889:139;;27616:419;;;:::o;28041:::-;28207:4;28245:2;28234:9;28230:18;28222:26;;28294:9;28288:4;28284:20;28280:1;28269:9;28265:17;28258:47;28322:131;28448:4;28322:131;:::i;:::-;28314:139;;28041:419;;;:::o;28466:::-;28632:4;28670:2;28659:9;28655:18;28647:26;;28719:9;28713:4;28709:20;28705:1;28694:9;28690:17;28683:47;28747:131;28873:4;28747:131;:::i;:::-;28739:139;;28466:419;;;:::o;28891:::-;29057:4;29095:2;29084:9;29080:18;29072:26;;29144:9;29138:4;29134:20;29130:1;29119:9;29115:17;29108:47;29172:131;29298:4;29172:131;:::i;:::-;29164:139;;28891:419;;;:::o;29316:::-;29482:4;29520:2;29509:9;29505:18;29497:26;;29569:9;29563:4;29559:20;29555:1;29544:9;29540:17;29533:47;29597:131;29723:4;29597:131;:::i;:::-;29589:139;;29316:419;;;:::o;29741:::-;29907:4;29945:2;29934:9;29930:18;29922:26;;29994:9;29988:4;29984:20;29980:1;29969:9;29965:17;29958:47;30022:131;30148:4;30022:131;:::i;:::-;30014:139;;29741:419;;;:::o;30166:::-;30332:4;30370:2;30359:9;30355:18;30347:26;;30419:9;30413:4;30409:20;30405:1;30394:9;30390:17;30383:47;30447:131;30573:4;30447:131;:::i;:::-;30439:139;;30166:419;;;:::o;30591:::-;30757:4;30795:2;30784:9;30780:18;30772:26;;30844:9;30838:4;30834:20;30830:1;30819:9;30815:17;30808:47;30872:131;30998:4;30872:131;:::i;:::-;30864:139;;30591:419;;;:::o;31016:::-;31182:4;31220:2;31209:9;31205:18;31197:26;;31269:9;31263:4;31259:20;31255:1;31244:9;31240:17;31233:47;31297:131;31423:4;31297:131;:::i;:::-;31289:139;;31016:419;;;:::o;31441:::-;31607:4;31645:2;31634:9;31630:18;31622:26;;31694:9;31688:4;31684:20;31680:1;31669:9;31665:17;31658:47;31722:131;31848:4;31722:131;:::i;:::-;31714:139;;31441:419;;;:::o;31866:::-;32032:4;32070:2;32059:9;32055:18;32047:26;;32119:9;32113:4;32109:20;32105:1;32094:9;32090:17;32083:47;32147:131;32273:4;32147:131;:::i;:::-;32139:139;;31866:419;;;:::o;32291:::-;32457:4;32495:2;32484:9;32480:18;32472:26;;32544:9;32538:4;32534:20;32530:1;32519:9;32515:17;32508:47;32572:131;32698:4;32572:131;:::i;:::-;32564:139;;32291:419;;;:::o;32716:::-;32882:4;32920:2;32909:9;32905:18;32897:26;;32969:9;32963:4;32959:20;32955:1;32944:9;32940:17;32933:47;32997:131;33123:4;32997:131;:::i;:::-;32989:139;;32716:419;;;:::o;33141:::-;33307:4;33345:2;33334:9;33330:18;33322:26;;33394:9;33388:4;33384:20;33380:1;33369:9;33365:17;33358:47;33422:131;33548:4;33422:131;:::i;:::-;33414:139;;33141:419;;;:::o;33566:::-;33732:4;33770:2;33759:9;33755:18;33747:26;;33819:9;33813:4;33809:20;33805:1;33794:9;33790:17;33783:47;33847:131;33973:4;33847:131;:::i;:::-;33839:139;;33566:419;;;:::o;33991:::-;34157:4;34195:2;34184:9;34180:18;34172:26;;34244:9;34238:4;34234:20;34230:1;34219:9;34215:17;34208:47;34272:131;34398:4;34272:131;:::i;:::-;34264:139;;33991:419;;;:::o;34416:::-;34582:4;34620:2;34609:9;34605:18;34597:26;;34669:9;34663:4;34659:20;34655:1;34644:9;34640:17;34633:47;34697:131;34823:4;34697:131;:::i;:::-;34689:139;;34416:419;;;:::o;34841:::-;35007:4;35045:2;35034:9;35030:18;35022:26;;35094:9;35088:4;35084:20;35080:1;35069:9;35065:17;35058:47;35122:131;35248:4;35122:131;:::i;:::-;35114:139;;34841:419;;;:::o;35266:::-;35432:4;35470:2;35459:9;35455:18;35447:26;;35519:9;35513:4;35509:20;35505:1;35494:9;35490:17;35483:47;35547:131;35673:4;35547:131;:::i;:::-;35539:139;;35266:419;;;:::o;35691:222::-;35784:4;35822:2;35811:9;35807:18;35799:26;;35835:71;35903:1;35892:9;35888:17;35879:6;35835:71;:::i;:::-;35691:222;;;;:::o;35919:129::-;35953:6;35980:20;;:::i;:::-;35970:30;;36009:33;36037:4;36029:6;36009:33;:::i;:::-;35919:129;;;:::o;36054:75::-;36087:6;36120:2;36114:9;36104:19;;36054:75;:::o;36135:311::-;36212:4;36302:18;36294:6;36291:30;36288:56;;;36324:18;;:::i;:::-;36288:56;36374:4;36366:6;36362:17;36354:25;;36434:4;36428;36424:15;36416:23;;36135:311;;;:::o;36452:307::-;36513:4;36603:18;36595:6;36592:30;36589:56;;;36625:18;;:::i;:::-;36589:56;36663:29;36685:6;36663:29;:::i;:::-;36655:37;;36747:4;36741;36737:15;36729:23;;36452:307;;;:::o;36765:308::-;36827:4;36917:18;36909:6;36906:30;36903:56;;;36939:18;;:::i;:::-;36903:56;36977:29;36999:6;36977:29;:::i;:::-;36969:37;;37061:4;37055;37051:15;37043:23;;36765:308;;;:::o;37079:132::-;37146:4;37169:3;37161:11;;37199:4;37194:3;37190:14;37182:22;;37079:132;;;:::o;37217:141::-;37266:4;37289:3;37281:11;;37312:3;37309:1;37302:14;37346:4;37343:1;37333:18;37325:26;;37217:141;;;:::o;37364:114::-;37431:6;37465:5;37459:12;37449:22;;37364:114;;;:::o;37484:98::-;37535:6;37569:5;37563:12;37553:22;;37484:98;;;:::o;37588:99::-;37640:6;37674:5;37668:12;37658:22;;37588:99;;;:::o;37693:113::-;37763:4;37795;37790:3;37786:14;37778:22;;37693:113;;;:::o;37812:184::-;37911:11;37945:6;37940:3;37933:19;37985:4;37980:3;37976:14;37961:29;;37812:184;;;;:::o;38002:168::-;38085:11;38119:6;38114:3;38107:19;38159:4;38154:3;38150:14;38135:29;;38002:168;;;;:::o;38176:147::-;38277:11;38314:3;38299:18;;38176:147;;;;:::o;38329:169::-;38413:11;38447:6;38442:3;38435:19;38487:4;38482:3;38478:14;38463:29;;38329:169;;;;:::o;38504:148::-;38606:11;38643:3;38628:18;;38504:148;;;;:::o;38658:305::-;38698:3;38717:20;38735:1;38717:20;:::i;:::-;38712:25;;38751:20;38769:1;38751:20;:::i;:::-;38746:25;;38905:1;38837:66;38833:74;38830:1;38827:81;38824:107;;;38911:18;;:::i;:::-;38824:107;38955:1;38952;38948:9;38941:16;;38658:305;;;;:::o;38969:185::-;39009:1;39026:20;39044:1;39026:20;:::i;:::-;39021:25;;39060:20;39078:1;39060:20;:::i;:::-;39055:25;;39099:1;39089:35;;39104:18;;:::i;:::-;39089:35;39146:1;39143;39139:9;39134:14;;38969:185;;;;:::o;39160:348::-;39200:7;39223:20;39241:1;39223:20;:::i;:::-;39218:25;;39257:20;39275:1;39257:20;:::i;:::-;39252:25;;39445:1;39377:66;39373:74;39370:1;39367:81;39362:1;39355:9;39348:17;39344:105;39341:131;;;39452:18;;:::i;:::-;39341:131;39500:1;39497;39493:9;39482:20;;39160:348;;;;:::o;39514:191::-;39554:4;39574:20;39592:1;39574:20;:::i;:::-;39569:25;;39608:20;39626:1;39608:20;:::i;:::-;39603:25;;39647:1;39644;39641:8;39638:34;;;39652:18;;:::i;:::-;39638:34;39697:1;39694;39690:9;39682:17;;39514:191;;;;:::o;39711:96::-;39748:7;39777:24;39795:5;39777:24;:::i;:::-;39766:35;;39711:96;;;:::o;39813:90::-;39847:7;39890:5;39883:13;39876:21;39865:32;;39813:90;;;:::o;39909:149::-;39945:7;39985:66;39978:5;39974:78;39963:89;;39909:149;;;:::o;40064:126::-;40101:7;40141:42;40134:5;40130:54;40119:65;;40064:126;;;:::o;40196:77::-;40233:7;40262:5;40251:16;;40196:77;;;:::o;40279:154::-;40363:6;40358:3;40353;40340:30;40425:1;40416:6;40411:3;40407:16;40400:27;40279:154;;;:::o;40439:307::-;40507:1;40517:113;40531:6;40528:1;40525:13;40517:113;;;40616:1;40611:3;40607:11;40601:18;40597:1;40592:3;40588:11;40581:39;40553:2;40550:1;40546:10;40541:15;;40517:113;;;40648:6;40645:1;40642:13;40639:101;;;40728:1;40719:6;40714:3;40710:16;40703:27;40639:101;40488:258;40439:307;;;:::o;40752:320::-;40796:6;40833:1;40827:4;40823:12;40813:22;;40880:1;40874:4;40870:12;40901:18;40891:81;;40957:4;40949:6;40945:17;40935:27;;40891:81;41019:2;41011:6;41008:14;40988:18;40985:38;40982:84;;;41038:18;;:::i;:::-;40982:84;40803:269;40752:320;;;:::o;41078:281::-;41161:27;41183:4;41161:27;:::i;:::-;41153:6;41149:40;41291:6;41279:10;41276:22;41255:18;41243:10;41240:34;41237:62;41234:88;;;41302:18;;:::i;:::-;41234:88;41342:10;41338:2;41331:22;41121:238;41078:281;;:::o;41365:233::-;41404:3;41427:24;41445:5;41427:24;:::i;:::-;41418:33;;41473:66;41466:5;41463:77;41460:103;;;41543:18;;:::i;:::-;41460:103;41590:1;41583:5;41579:13;41572:20;;41365:233;;;:::o;41604:176::-;41636:1;41653:20;41671:1;41653:20;:::i;:::-;41648:25;;41687:20;41705:1;41687:20;:::i;:::-;41682:25;;41726:1;41716:35;;41731:18;;:::i;:::-;41716:35;41772:1;41769;41765:9;41760:14;;41604:176;;;;:::o;41786:180::-;41834:77;41831:1;41824:88;41931:4;41928:1;41921:15;41955:4;41952:1;41945:15;41972:180;42020:77;42017:1;42010:88;42117:4;42114:1;42107:15;42141:4;42138:1;42131:15;42158:180;42206:77;42203:1;42196:88;42303:4;42300:1;42293:15;42327:4;42324:1;42317:15;42344:180;42392:77;42389:1;42382:88;42489:4;42486:1;42479:15;42513:4;42510:1;42503:15;42530:180;42578:77;42575:1;42568:88;42675:4;42672:1;42665:15;42699:4;42696:1;42689:15;42716:180;42764:77;42761:1;42754:88;42861:4;42858:1;42851:15;42885:4;42882:1;42875:15;42902:117;43011:1;43008;43001:12;43025:117;43134:1;43131;43124:12;43148:117;43257:1;43254;43247:12;43271:117;43380:1;43377;43370:12;43394:117;43503:1;43500;43493:12;43517:102;43558:6;43609:2;43605:7;43600:2;43593:5;43589:14;43585:28;43575:38;;43517:102;;;:::o;43625:230::-;43765:34;43761:1;43753:6;43749:14;43742:58;43834:13;43829:2;43821:6;43817:15;43810:38;43625:230;:::o;43861:237::-;44001:34;43997:1;43989:6;43985:14;43978:58;44070:20;44065:2;44057:6;44053:15;44046:45;43861:237;:::o;44104:225::-;44244:34;44240:1;44232:6;44228:14;44221:58;44313:8;44308:2;44300:6;44296:15;44289:33;44104:225;:::o;44335:178::-;44475:30;44471:1;44463:6;44459:14;44452:54;44335:178;:::o;44519:::-;44659:30;44655:1;44647:6;44643:14;44636:54;44519:178;:::o;44703:223::-;44843:34;44839:1;44831:6;44827:14;44820:58;44912:6;44907:2;44899:6;44895:15;44888:31;44703:223;:::o;44932:175::-;45072:27;45068:1;45060:6;45056:14;45049:51;44932:175;:::o;45113:231::-;45253:34;45249:1;45241:6;45237:14;45230:58;45322:14;45317:2;45309:6;45305:15;45298:39;45113:231;:::o;45350:243::-;45490:34;45486:1;45478:6;45474:14;45467:58;45559:26;45554:2;45546:6;45542:15;45535:51;45350:243;:::o;45599:229::-;45739:34;45735:1;45727:6;45723:14;45716:58;45808:12;45803:2;45795:6;45791:15;45784:37;45599:229;:::o;45834:228::-;45974:34;45970:1;45962:6;45958:14;45951:58;46043:11;46038:2;46030:6;46026:15;46019:36;45834:228;:::o;46068:172::-;46208:24;46204:1;46196:6;46192:14;46185:48;46068:172;:::o;46246:223::-;46386:34;46382:1;46374:6;46370:14;46363:58;46455:6;46450:2;46442:6;46438:15;46431:31;46246:223;:::o;46475:182::-;46615:34;46611:1;46603:6;46599:14;46592:58;46475:182;:::o;46663:231::-;46803:34;46799:1;46791:6;46787:14;46780:58;46872:14;46867:2;46859:6;46855:15;46848:39;46663:231;:::o;46900:182::-;47040:34;47036:1;47028:6;47024:14;47017:58;46900:182;:::o;47088:172::-;47228:24;47224:1;47216:6;47212:14;47205:48;47088:172;:::o;47266:228::-;47406:34;47402:1;47394:6;47390:14;47383:58;47475:11;47470:2;47462:6;47458:15;47451:36;47266:228;:::o;47500:234::-;47640:34;47636:1;47628:6;47624:14;47617:58;47709:17;47704:2;47696:6;47692:15;47685:42;47500:234;:::o;47740:220::-;47880:34;47876:1;47868:6;47864:14;47857:58;47949:3;47944:2;47936:6;47932:15;47925:28;47740:220;:::o;47966:114::-;;:::o;48086:168::-;48226:20;48222:1;48214:6;48210:14;48203:44;48086:168;:::o;48260:236::-;48400:34;48396:1;48388:6;48384:14;48377:58;48469:19;48464:2;48456:6;48452:15;48445:44;48260:236;:::o;48502:231::-;48642:34;48638:1;48630:6;48626:14;48619:58;48711:14;48706:2;48698:6;48694:15;48687:39;48502:231;:::o;48739:173::-;48879:25;48875:1;48867:6;48863:14;48856:49;48739:173;:::o;48918:177::-;49058:29;49054:1;49046:6;49042:14;49035:53;48918:177;:::o;49101:122::-;49174:24;49192:5;49174:24;:::i;:::-;49167:5;49164:35;49154:63;;49213:1;49210;49203:12;49154:63;49101:122;:::o;49229:116::-;49299:21;49314:5;49299:21;:::i;:::-;49292:5;49289:32;49279:60;;49335:1;49332;49325:12;49279:60;49229:116;:::o;49351:120::-;49423:23;49440:5;49423:23;:::i;:::-;49416:5;49413:34;49403:62;;49461:1;49458;49451:12;49403:62;49351:120;:::o;49477:122::-;49550:24;49568:5;49550:24;:::i;:::-;49543:5;49540:35;49530:63;;49589:1;49586;49579:12;49530:63;49477:122;:::o

Swarm Source

ipfs://ce2c8e89ee5e0b57562673c6205d082fb7823dbe1c5ea704575b4c1f258133e4
Loading