ETH Price: $2,869.45 (-9.36%)
Gas: 17 Gwei

Token

Thicc Frens (THICCFRENS)
 

Overview

Max Total Supply

0 THICCFRENS

Holders

1,797

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
redbug.eth
Balance
1 THICCFRENS
0xe123b7df9a55073b6bb726d87a41ee18375ded6e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
THICCNFT

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-05-06
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must 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 Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(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);

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: contracts/THICCNFT.sol


pragma solidity 0.8.4;




contract THICCNFT is ERC721, Ownable {
    using Strings for uint256;
    using Address for address;

    uint64 private _maxSupply = 5555;

    uint64 private _totalNftMinted = 155;
    uint64 private _reserve = 155;
    uint64 private _totalOwnerMinted;

    uint64 public _mintPerWhiteList = 5;
    uint64 public _mintPerUser = 5;
    uint64 private _mintPerOwner= 5;

    address private _owner;
    string private baseURI;
    string private _baseExtension = ".json";
    
    bool private revealed = false;
    string private notRevealedUri;
    bool public isMintEnabled;
    bool public isWhiteListEnable;

    struct Details {
        address users;
        uint256[] tokenIds;
    }

    uint256 private mintPriceForUser = 0.069 ether ;
    uint256 private mintPriceForWhiteListUser = 0.0420 ether ;
  

    
    mapping(address => Details) private _userTokenIds;
    mapping(address => bool) public _ownerAddress;

    mapping(address => bool) public whitelistedAddresses;


    constructor(string memory _initNotRevealedUri) ERC721("Thicc Frens", "THICCFRENS") {
        _owner = msg.sender;
        isWhiteListEnable = true;
        _ownerAddress[msg.sender]=true;
        setNotRevealedURI(_initNotRevealedUri);
        


    }
    modifier zeroAddress(address _account) {
        require(_account != address(0), "address can't be zero address");
        _;
    }
    

    // only owner
    // This function is used to update the presale supply.
    function setMaxWhiteListSupply(uint8 _amount) external onlyOwner {
        _mintPerWhiteList = _amount;
    }

    // This function is used to update the public supply.
    function setMaxPublicSupply(uint8 _amount) external onlyOwner {
        _mintPerUser = _amount;
    }
    // This function is used to update the public supply.
    function setMaxOwnerSupply(uint8 _amount) external onlyOwner {
        _mintPerOwner = _amount;
    }

    // please pass the value in wei.
    function setMintPriceForUser(uint256 _price) external onlyOwner {
        require(_price > 0, "Price must greater then zero. ");
        mintPriceForUser = _price;
    }

    // please pass the value in wei.
    function setMintPriceForWhiteListUser(uint256 _price) external onlyOwner {
        require(_price > 0, "Price must greater then zero. ");
        mintPriceForWhiteListUser = _price;
    }

    // Here we can pass address in array format.
    function setWhiteListUserInBatch(address[] memory _account)
        external
        onlyOwner
        returns (bool)
    {
        require(_account.length <= 100,"Array length must be less then 100" );
        for (uint256 i = 0; i < _account.length; i++) {
            address userAddress = _account[i];
            whitelistedAddresses[userAddress] = true;
        }
        return true;
    }

    // Here we can pass address in array format.
    function setOwnerWhiteList(address[] memory _account)
        external
        onlyOwner
        returns (bool)
    {
        require(_account.length <= 100,"Array length must be less then 100" );
        for (uint256 i = 0; i < _account.length; i++) {
            address userAddress = _account[i];
            _ownerAddress[userAddress] = true;
        }
        return true;
    }

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

    function setMaxSupply(uint64 _setValidTokenIds) external onlyOwner {
        _maxSupply = _setValidTokenIds;
    }

    function removeWhiteListUser(address _account) external onlyOwner zeroAddress(_account) {
        require(whitelistedAddresses[_account] == true);
        whitelistedAddresses[_account] = false;
    }
    function removeOwnerWhiteList(address _account) external onlyOwner zeroAddress(_account) {

        _ownerAddress[_account] = false;
    }

    function toggleWhiteList() external onlyOwner {
        isWhiteListEnable = !isWhiteListEnable;
    }

    function mintEnabled() external onlyOwner {
        isMintEnabled = !isMintEnabled;
    }

    function reveal() external onlyOwner {
        revealed = true;
    }

    function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
        notRevealedUri = _notRevealedURI;
    }
    function totalMintNft() external view onlyOwner returns(uint256){
        return _totalNftMinted;
    }
    function OwnerTotalMintNft() external view onlyOwner returns(uint256){
        return _totalOwnerMinted;
    }
    // internal
    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    function ownerMint(uint256 _quantity) internal {
        address user = msg.sender;
        require(_ownerAddress[user], " You are not owner.");
        uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
        checkToken= checkToken+_quantity;
        require(checkToken <=_mintPerOwner,"Mint limit exceeded.");
        uint256 supply = _totalOwnerMinted;
        require((supply + _quantity) <= _reserve, "All _reserve NFTs are minted");
        for (uint256 i = 1; i <= _quantity; i++) {
            uint256 ids = supply + i;
            _safeMint(user, ids);
            _totalOwnerMinted++;
            Details storage newDetails = _userTokenIds[user];
            newDetails.users = user;
            newDetails.tokenIds.push(ids);
        }
    }

    // public functions
    function mint(uint256 _quantity) external payable {
        require(_quantity >= 1 && _quantity <= 5   ,"Invalid argument.");
        require(isMintEnabled, "minting not enabled");
        address user = msg.sender;
        require(user != address(0), "address can't be zero address");

        if (_ownerAddress[user]) {
            ownerMint(_quantity);
        } else {
            uint256 supply = _totalNftMinted;
            require((supply + _quantity) <= _maxSupply, "All NFTs are minted");

            if (isWhiteListEnable) {
                require(
                    _quantity <= _mintPerWhiteList,
                    "Please enter valid tokenIds."
                );
                require(
                    whitelistedAddresses[msg.sender],
                    "You are not whiteListed."
                );
                uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
                checkToken= checkToken+_quantity;

                require(
                    checkToken <=
                        _mintPerWhiteList,
                    "Your mint limit exceed."
                );
                uint256 mintFee = estimateFee(_quantity);
                require(
                    msg.value >= mintFee,
                    "Please enter asking price for mint NFT."
                );
                Address.sendValue(payable(_owner), mintFee);
                for (uint256 i = 1; i <= _quantity; i++) {
                    uint256 ids = supply + i;
                    _safeMint(user, ids);
                    _totalNftMinted++;
                    Details storage newDetails = _userTokenIds[user];
                    newDetails.users = user;
                    newDetails.tokenIds.push(ids);
                }
            } else {
                require(
                    _quantity <= _mintPerUser,
                    "Please enter valid tokenIds."
                );

                uint256 checkToken= _userTokenIds[msg.sender].tokenIds.length;
                checkToken= checkToken+_quantity;
                require(
                    checkToken <= _mintPerUser,
                    "Your mint limit exceed."
                );
                uint256 mintFee = estimateFee(_quantity);
                require(msg.value >= mintFee, "Please enter minting price.");
                Address.sendValue(payable(_owner), mintFee);
                for (uint256 j = 1; j <= _quantity; j++) {
                    uint256 ids = supply + j;
                    _safeMint(user, ids);
                    _totalNftMinted++;
                    Details storage newDetails = _userTokenIds[user];
                    newDetails.users = user;
                    newDetails.tokenIds.push(ids);
                }
            }
        }
    }
    function estimateFee(uint256 tokenId) public view returns (uint256) {
        if (isWhiteListEnable) {
            return mintPriceForWhiteListUser * tokenId;
        } else {
            return mintPriceForUser * tokenId;
        }
    }

    function owner() public view virtual override returns (address) {
        return _owner;
    }

    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
                    )
                )
                : "";
    }

    function getUserTokenIds() external view returns (uint256[] memory) {
        Details memory d=  _userTokenIds[msg.sender];
        return d.tokenIds;

    }

    // check which price is set for nft.
    function currentNftPrice() external view returns (uint256) {
        if (isWhiteListEnable) {
            return mintPriceForWhiteListUser;
        }
        return mintPriceForUser;
    }
    function checkReveal() external view returns(bool){
        return revealed;
    }
    function checkNonRevealUrl() external view returns(string memory){
        return notRevealedUri;
    }
    function gerBaseUri() external view returns(string memory){
        return baseURI;
    }
    // This function is gives total number of NFT minted.
    function getTotalMintedNFT() external view returns(uint256){
        uint256 userMint =  _totalNftMinted - 155 ;
        uint64 ownerMinted=_totalOwnerMinted;
        return userMint + ownerMinted;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"OwnerTotalMintNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPerUser","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPerWhiteList","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_ownerAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"checkNonRevealUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkReveal","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNftPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"estimateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gerBaseUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalMintedNFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserTokenIds","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhiteListEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeOwnerWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeWhiteListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxOwnerSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxPublicSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_setValidTokenIds","type":"uint64"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_amount","type":"uint8"}],"name":"setMaxWhiteListSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPriceForUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPriceForWhiteListUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setOwnerWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_account","type":"address[]"}],"name":"setWhiteListUserInBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"toggleWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintNft","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":"","type":"address"}],"name":"whitelistedAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040526115b3600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550609b600760006101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550609b600760086101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506005600760186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506005600860006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060056008806101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b90805190602001906200014d929190620004e1565b506000600c60006101000a81548160ff02191690831515021790555066f5232269808000600f55669536c7089100006010553480156200018c57600080fd5b50604051620067c8380380620067c88339818101604052810190620001b2919062000603565b6040518060400160405280600b81526020017f5468696363204672656e730000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f54484943434652454e5300000000000000000000000000000000000000000000815250816000908051906020019062000236929190620004e1565b5080600190805190602001906200024f929190620004e1565b50505062000272620002666200033e60201b60201c565b6200034660201b60201c565b33600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600e60016101000a81548160ff0219169083151502179055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000337816200040c60201b60201c565b506200083b565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200041c6200033e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000442620004b760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200049b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000492906200066f565b60405180910390fd5b80600d9080519060200190620004b3929190620004e1565b5050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620004ef9062000737565b90600052602060002090601f0160209004810192826200051357600085556200055f565b82601f106200052e57805160ff19168380011785556200055f565b828001600101855582156200055f579182015b828111156200055e57825182559160200191906001019062000541565b5b5090506200056e919062000572565b5090565b5b808211156200058d57600081600090555060010162000573565b5090565b6000620005a8620005a284620006ba565b62000691565b905082815260208101848484011115620005c157600080fd5b620005ce84828562000701565b509392505050565b600082601f830112620005e857600080fd5b8151620005fa84826020860162000591565b91505092915050565b6000602082840312156200061657600080fd5b600082015167ffffffffffffffff8111156200063157600080fd5b6200063f84828501620005d6565b91505092915050565b600062000657602083620006f0565b9150620006648262000812565b602082019050919050565b600060208201905081810360008301526200068a8162000648565b9050919050565b60006200069d620006b0565b9050620006ab82826200076d565b919050565b6000604051905090565b600067ffffffffffffffff821115620006d857620006d7620007d2565b5b620006e38262000801565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200072157808201518184015260208101905062000704565b8381111562000731576000848401525b50505050565b600060028204905060018216806200075057607f821691505b60208210811415620007675762000766620007a3565b5b50919050565b620007788262000801565b810181811067ffffffffffffffff821117156200079a5762000799620007d2565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b615f7d806200084b6000396000f3fe6080604052600436106102885760003560e01c80638da5cb5b1161015a578063bd3e8ba5116100c1578063e985e9c51161007a578063e985e9c514610999578063f07bd601146109d6578063f2c4ce1e14610a13578063f2fde38b14610a3c578063f3d9582114610a65578063f5bfa26f14610a9057610288565b8063bd3e8ba514610899578063c87b56dd146108c4578063caa5c2aa14610901578063cef8cb871461092c578063d123973014610957578063dd9526db1461096e57610288565b8063a22cb46511610113578063a22cb465146107b1578063a475b5dd146107da578063acca7295146107f1578063b299ed931461081a578063b5ed1e3114610845578063b88d4fde1461087057610288565b80638da5cb5b146106ae57806394dadfe9146106d957806395d89b41146107165780639950126b146107415780639c4f3d0a1461076c578063a0712d681461079557610288565b8063346de50a116101fe5780636352211e116101b75780636352211e146105a057806370a08231146105dd578063715018a61461061a5780637fbc62321461063157806383b256281461065c5780638884e86b1461068557610288565b8063346de50a146104a657806342842e0e146104d15780634746ebdf146104fa57806355f804b314610523578063583698511461054c57806363430b381461058957610288565b8063127e8e4d11610250578063127e8e4d14610398578063139fc94e146103d557806323b872dd1461040057806327076078146104295780632b8d294d1461045457806330533fdf1461047d57610288565b806301ffc9a71461028d57806306c933d8146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614560565b610ab9565b6040516102c19190614da3565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614378565b610b9b565b6040516102fe9190614da3565b60405180910390f35b34801561031357600080fd5b5061031c610bbb565b6040516103299190614dbe565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906145f3565b610c4d565b6040516103669190614d1a565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906144e3565b610cd2565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906145f3565b610dea565b6040516103cc91906151e0565b60405180910390f35b3480156103e157600080fd5b506103ea610e2c565b6040516103f791906151e0565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906143dd565b610e56565b005b34801561043557600080fd5b5061043e610eb6565b60405161044b9190614d81565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906145f3565b610fbf565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614645565b611088565b005b3480156104b257600080fd5b506104bb611132565b6040516104c89190614da3565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906143dd565b611145565b005b34801561050657600080fd5b50610521600480360381019061051c91906145f3565b611165565b005b34801561052f57600080fd5b5061054a600480360381019061054591906145b2565b61122e565b005b34801561055857600080fd5b50610573600480360381019061056e919061451f565b6112c4565b6040516105809190614da3565b60405180910390f35b34801561059557600080fd5b5061059e61144e565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906145f3565b6114f6565b6040516105d49190614d1a565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614378565b6115a8565b60405161061191906151e0565b60405180910390f35b34801561062657600080fd5b5061062f611660565b005b34801561063d57600080fd5b506106466116e8565b60405161065391906151fb565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614378565b611702565b005b34801561069157600080fd5b506106ac60048036038101906106a79190614645565b61184b565b005b3480156106ba57600080fd5b506106c36118f6565b6040516106d09190614d1a565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb919061451f565b611920565b60405161070d9190614da3565b60405180910390f35b34801561072257600080fd5b5061072b611aaa565b6040516107389190614dbe565b60405180910390f35b34801561074d57600080fd5b50610756611b3c565b6040516107639190614dbe565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e919061461c565b611bce565b005b6107af60048036038101906107aa91906145f3565b611c76565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906144a7565b6124db565b005b3480156107e657600080fd5b506107ef6124f1565b005b3480156107fd57600080fd5b5061081860048036038101906108139190614378565b61258a565b005b34801561082657600080fd5b5061082f612730565b60405161083c91906151fb565b60405180910390f35b34801561085157600080fd5b5061085a61274a565b6040516108679190614dbe565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061442c565b6127dc565b005b3480156108a557600080fd5b506108ae61283e565b6040516108bb91906151e0565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906145f3565b6128e2565b6040516108f89190614dbe565b60405180910390f35b34801561090d57600080fd5b50610916612a3b565b6040516109239190614da3565b60405180910390f35b34801561093857600080fd5b50610941612a52565b60405161094e91906151e0565b60405180910390f35b34801561096357600080fd5b5061096c612abc565b005b34801561097a57600080fd5b50610983612b64565b6040516109909190614da3565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb91906143a1565b612b77565b6040516109cd9190614da3565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614378565b612c0b565b604051610a0a9190614da3565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a3591906145b2565b612c2b565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190614378565b612cc1565b005b348015610a7157600080fd5b50610a7a612db9565b604051610a8791906151e0565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614645565b612e5d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b945750610b9382612f08565b5b9050919050565b60136020528060005260406000206000915054906101000a900460ff1681565b606060008054610bca90615585565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf690615585565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5882612f72565b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906150e0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdd826114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590615180565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6d612fde565b73ffffffffffffffffffffffffffffffffffffffff161480610d9c5750610d9b81610d96612fde565b612b77565b5b610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290615000565b60405180910390fd5b610de58383612fe6565b505050565b6000600e60019054906101000a900460ff1615610e165781601054610e0f91906153ec565b9050610e27565b81600f54610e2491906153ec565b90505b919050565b6000600e60019054906101000a900460ff1615610e4d576010549050610e53565b600f5490505b90565b610e67610e61612fde565b8261309f565b610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906151a0565b60405180910390fd5b610eb183838361317d565b505050565b60606000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b815481526020019060010190808311610f95575b5050505050815250509050806020015191505090565b610fc7612fde565b73ffffffffffffffffffffffffffffffffffffffff16610fe56118f6565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290615100565b60405180910390fd5b6000811161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614f00565b60405180910390fd5b80600f8190555050565b611090612fde565b73ffffffffffffffffffffffffffffffffffffffff166110ae6118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90615100565b60405180910390fd5b8060ff166008806101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600e60009054906101000a900460ff1681565b611160838383604051806020016040528060008152506127dc565b505050565b61116d612fde565b73ffffffffffffffffffffffffffffffffffffffff1661118b6118f6565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890615100565b60405180910390fd5b60008111611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614f00565b60405180910390fd5b8060108190555050565b611236612fde565b73ffffffffffffffffffffffffffffffffffffffff166112546118f6565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190615100565b60405180910390fd5b80600a90805190602001906112c09291906140dc565b5050565b60006112ce612fde565b73ffffffffffffffffffffffffffffffffffffffff166112ec6118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990615100565b60405180910390fd5b606482511115611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90615060565b60405180910390fd5b60005b82518110156114445760008382815181106113ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061143c906155e8565b91505061138a565b5060019050919050565b611456612fde565b73ffffffffffffffffffffffffffffffffffffffff166114746118f6565b73ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190615100565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690615040565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090615020565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611668612fde565b73ffffffffffffffffffffffffffffffffffffffff166116866118f6565b73ffffffffffffffffffffffffffffffffffffffff16146116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390615100565b60405180910390fd5b6116e660006133e4565b565b600860009054906101000a900467ffffffffffffffff1681565b61170a612fde565b73ffffffffffffffffffffffffffffffffffffffff166117286118f6565b73ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590615100565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690614f60565b60405180910390fd5b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611853612fde565b73ffffffffffffffffffffffffffffffffffffffff166118716118f6565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90615100565b60405180910390fd5b8060ff16600760186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061192a612fde565b73ffffffffffffffffffffffffffffffffffffffff166119486118f6565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590615100565b60405180910390fd5b6064825111156119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90615060565b60405180910390fd5b60005b8251811015611aa0576000838281518110611a2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611a98906155e8565b9150506119e6565b5060019050919050565b606060018054611ab990615585565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae590615585565b8015611b325780601f10611b0757610100808354040283529160200191611b32565b820191906000526020600020905b815481529060010190602001808311611b1557829003601f168201915b5050505050905090565b6060600a8054611b4b90615585565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7790615585565b8015611bc45780601f10611b9957610100808354040283529160200191611bc4565b820191906000526020600020905b815481529060010190602001808311611ba757829003601f168201915b5050505050905090565b611bd6612fde565b73ffffffffffffffffffffffffffffffffffffffff16611bf46118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190615100565b60405180910390fd5b80600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60018110158015611c88575060058111155b611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614f80565b60405180910390fd5b600e60009054906101000a900460ff16611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d90614e60565b60405180910390fd5b6000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290614f60565b60405180910390fd5b601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611deb57611de6826134aa565b6124d7565b6000600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168382611e3d9190615365565b1115611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906151c0565b60405180910390fd5b600e60019054906101000a900460ff16156121fc57600760189054906101000a900467ffffffffffffffff1667ffffffffffffffff16831115611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614de0565b60405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990614e00565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054905090508381611fd89190615365565b9050600760189054906101000a900467ffffffffffffffff1667ffffffffffffffff1681111561203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490614ea0565b60405180910390fd5b600061204885610dea565b90508034101561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615160565b60405180910390fd5b6120b9600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826137c9565b6000600190505b8581116121f457600081856120d59190615365565b90506120e186826138bd565b6007600081819054906101000a900467ffffffffffffffff168092919061210790615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806121ec906155e8565b9150506120c0565b5050506124d5565b600860009054906101000a900467ffffffffffffffff1667ffffffffffffffff1683111561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614de0565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905083816122b59190615365565b9050600860009054906101000a900467ffffffffffffffff1667ffffffffffffffff1681111561231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190614ea0565b60405180910390fd5b600061232585610dea565b90508034101561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236190615120565b60405180910390fd5b612396600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826137c9565b6000600190505b8581116124d157600081856123b29190615365565b90506123be86826138bd565b6007600081819054906101000a900467ffffffffffffffff16809291906123e490615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806124c9906155e8565b91505061239d565b5050505b505b5050565b6124ed6124e6612fde565b83836138db565b5050565b6124f9612fde565b73ffffffffffffffffffffffffffffffffffffffff166125176118f6565b73ffffffffffffffffffffffffffffffffffffffff161461256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490615100565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b612592612fde565b73ffffffffffffffffffffffffffffffffffffffff166125b06118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90615100565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614f60565b60405180910390fd5b60011515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126d457600080fd5b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760189054906101000a900467ffffffffffffffff1681565b6060600d805461275990615585565b80601f016020809104026020016040519081016040528092919081815260200182805461278590615585565b80156127d25780601f106127a7576101008083540402835291602001916127d2565b820191906000526020600020905b8154815290600101906020018083116127b557829003601f168201915b5050505050905090565b6127ed6127e7612fde565b8361309f565b61282c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612823906151a0565b60405180910390fd5b61283884848484613a48565b50505050565b6000612848612fde565b73ffffffffffffffffffffffffffffffffffffffff166128666118f6565b73ffffffffffffffffffffffffffffffffffffffff16146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390615100565b60405180910390fd5b600760109054906101000a900467ffffffffffffffff1667ffffffffffffffff16905090565b60606128ed82612f72565b61292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390615140565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514156129da57600d805461295590615585565b80601f016020809104026020016040519081016040528092919081815260200182805461298190615585565b80156129ce5780601f106129a3576101008083540402835291602001916129ce565b820191906000526020600020905b8154815290600101906020018083116129b157829003601f168201915b50505050509050612a36565b60006129e4613aa4565b90506000815111612a045760405180602001604052806000815250612a32565b80612a0e84613b36565b600b604051602001612a2293929190614cd4565b6040516020818303038152906040525b9150505b919050565b6000600c60009054906101000a900460ff16905090565b600080609b600760009054906101000a900467ffffffffffffffff16612a78919061547a565b67ffffffffffffffff1690506000600760109054906101000a900467ffffffffffffffff1690508067ffffffffffffffff1682612ab59190615365565b9250505090565b612ac4612fde565b73ffffffffffffffffffffffffffffffffffffffff16612ae26118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615100565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b600e60019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b612c33612fde565b73ffffffffffffffffffffffffffffffffffffffff16612c516118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90615100565b60405180910390fd5b80600d9080519060200190612cbd9291906140dc565b5050565b612cc9612fde565b73ffffffffffffffffffffffffffffffffffffffff16612ce76118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615100565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614e80565b60405180910390fd5b612db6816133e4565b50565b6000612dc3612fde565b73ffffffffffffffffffffffffffffffffffffffff16612de16118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2e90615100565b60405180910390fd5b600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff16905090565b612e65612fde565b73ffffffffffffffffffffffffffffffffffffffff16612e836118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090615100565b60405180910390fd5b8060ff16600860006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613059836114f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130aa82612f72565b6130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e090614fe0565b60405180910390fd5b60006130f4836114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061313657506131358185612b77565b5b8061317457508373ffffffffffffffffffffffffffffffffffffffff1661315c84610c4d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661319d826114f6565b73ffffffffffffffffffffffffffffffffffffffff16146131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ea90614ec0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a90614f20565b60405180910390fd5b61326e838383613ce3565b613279600082612fe6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c99190615446565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133209190615365565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133df838383613ce8565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353290615080565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905082816135919190615365565b905060088054906101000a900467ffffffffffffffff1667ffffffffffffffff168111156135f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135eb90614e20565b60405180910390fd5b6000600760109054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600760089054906101000a900467ffffffffffffffff1667ffffffffffffffff1684826136469190615365565b1115613687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367e906150a0565b60405180910390fd5b6000600190505b8481116137c257600081836136a39190615365565b90506136af85826138bd565b6007601081819054906101000a900467ffffffffffffffff16809291906136d590615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806137ba906155e8565b91505061368e565b5050505050565b8047101561380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390614fc0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161383290614d05565b60006040518083038185875af1925050503d806000811461386f576040519150601f19603f3d011682016040523d82523d6000602084013e613874565b606091505b50509050806138b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138af90614fa0565b60405180910390fd5b505050565b6138d7828260405180602001604052806000815250613ced565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561394a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394190614f40565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613a3b9190614da3565b60405180910390a3505050565b613a5384848461317d565b613a5f84848484613d48565b613a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9590614e40565b60405180910390fd5b50505050565b6060600a8054613ab390615585565b80601f0160208091040260200160405190810160405280929190818152602001828054613adf90615585565b8015613b2c5780601f10613b0157610100808354040283529160200191613b2c565b820191906000526020600020905b815481529060010190602001808311613b0f57829003601f168201915b5050505050905090565b60606000821415613b7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613cde565b600082905060005b60008214613bb0578080613b99906155e8565b915050600a82613ba991906153bb565b9150613b86565b60008167ffffffffffffffff811115613bf2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613c245781602001600182028036833780820191505090505b5090505b60008514613cd757600182613c3d9190615446565b9150600a85613c4c9190615662565b6030613c589190615365565b60f81b818381518110613c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613cd091906153bb565b9450613c28565b8093505050505b919050565b505050565b505050565b613cf78383613edf565b613d046000848484613d48565b613d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3a90614e40565b60405180910390fd5b505050565b6000613d698473ffffffffffffffffffffffffffffffffffffffff166140b9565b15613ed2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613d92612fde565b8786866040518563ffffffff1660e01b8152600401613db49493929190614d35565b602060405180830381600087803b158015613dce57600080fd5b505af1925050508015613dff57506040513d601f19601f82011682018060405250810190613dfc9190614589565b60015b613e82573d8060008114613e2f576040519150601f19603f3d011682016040523d82523d6000602084013e613e34565b606091505b50600081511415613e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7190614e40565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613ed7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f46906150c0565b60405180910390fd5b613f5881612f72565b15613f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8f90614ee0565b60405180910390fd5b613fa460008383613ce3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff49190615365565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46140b560008383613ce8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140e890615585565b90600052602060002090601f01602090048101928261410a5760008555614151565b82601f1061412357805160ff1916838001178555614151565b82800160010185558215614151579182015b82811115614150578251825591602001919060010190614135565b5b50905061415e9190614162565b5090565b5b8082111561417b576000816000905550600101614163565b5090565b600061419261418d8461523b565b615216565b905080838252602082019050828560208602820111156141b157600080fd5b60005b858110156141e157816141c78882614267565b8452602084019350602083019250506001810190506141b4565b5050509392505050565b60006141fe6141f984615267565b615216565b90508281526020810184848401111561421657600080fd5b614221848285615543565b509392505050565b600061423c61423784615298565b615216565b90508281526020810184848401111561425457600080fd5b61425f848285615543565b509392505050565b60008135905061427681615ebd565b92915050565b600082601f83011261428d57600080fd5b813561429d84826020860161417f565b91505092915050565b6000813590506142b581615ed4565b92915050565b6000813590506142ca81615eeb565b92915050565b6000815190506142df81615eeb565b92915050565b600082601f8301126142f657600080fd5b81356143068482602086016141eb565b91505092915050565b600082601f83011261432057600080fd5b8135614330848260208601614229565b91505092915050565b60008135905061434881615f02565b92915050565b60008135905061435d81615f19565b92915050565b60008135905061437281615f30565b92915050565b60006020828403121561438a57600080fd5b600061439884828501614267565b91505092915050565b600080604083850312156143b457600080fd5b60006143c285828601614267565b92505060206143d385828601614267565b9150509250929050565b6000806000606084860312156143f257600080fd5b600061440086828701614267565b935050602061441186828701614267565b925050604061442286828701614339565b9150509250925092565b6000806000806080858703121561444257600080fd5b600061445087828801614267565b945050602061446187828801614267565b935050604061447287828801614339565b925050606085013567ffffffffffffffff81111561448f57600080fd5b61449b878288016142e5565b91505092959194509250565b600080604083850312156144ba57600080fd5b60006144c885828601614267565b92505060206144d9858286016142a6565b9150509250929050565b600080604083850312156144f657600080fd5b600061450485828601614267565b925050602061451585828601614339565b9150509250929050565b60006020828403121561453157600080fd5b600082013567ffffffffffffffff81111561454b57600080fd5b6145578482850161427c565b91505092915050565b60006020828403121561457257600080fd5b6000614580848285016142bb565b91505092915050565b60006020828403121561459b57600080fd5b60006145a9848285016142d0565b91505092915050565b6000602082840312156145c457600080fd5b600082013567ffffffffffffffff8111156145de57600080fd5b6145ea8482850161430f565b91505092915050565b60006020828403121561460557600080fd5b600061461384828501614339565b91505092915050565b60006020828403121561462e57600080fd5b600061463c8482850161434e565b91505092915050565b60006020828403121561465757600080fd5b600061466584828501614363565b91505092915050565b600061467a8383614ca7565b60208301905092915050565b61468f816154ae565b82525050565b60006146a0826152ee565b6146aa818561531c565b93506146b5836152c9565b8060005b838110156146e65781516146cd888261466e565b97506146d88361530f565b9250506001810190506146b9565b5085935050505092915050565b6146fc816154c0565b82525050565b600061470d826152f9565b614717818561532d565b9350614727818560208601615552565b6147308161574f565b840191505092915050565b600061474682615304565b6147508185615349565b9350614760818560208601615552565b6147698161574f565b840191505092915050565b600061477f82615304565b614789818561535a565b9350614799818560208601615552565b80840191505092915050565b600081546147b281615585565b6147bc818661535a565b945060018216600081146147d757600181146147e85761481b565b60ff1983168652818601935061481b565b6147f1856152d9565b60005b83811015614813578154818901526001820191506020810190506147f4565b838801955050505b50505092915050565b6000614831601c83615349565b915061483c82615760565b602082019050919050565b6000614854601883615349565b915061485f82615789565b602082019050919050565b6000614877601483615349565b9150614882826157b2565b602082019050919050565b600061489a603283615349565b91506148a5826157db565b604082019050919050565b60006148bd601383615349565b91506148c88261582a565b602082019050919050565b60006148e0602683615349565b91506148eb82615853565b604082019050919050565b6000614903601783615349565b915061490e826158a2565b602082019050919050565b6000614926602583615349565b9150614931826158cb565b604082019050919050565b6000614949601c83615349565b91506149548261591a565b602082019050919050565b600061496c601e83615349565b915061497782615943565b602082019050919050565b600061498f602483615349565b915061499a8261596c565b604082019050919050565b60006149b2601983615349565b91506149bd826159bb565b602082019050919050565b60006149d5601d83615349565b91506149e0826159e4565b602082019050919050565b60006149f8601183615349565b9150614a0382615a0d565b602082019050919050565b6000614a1b603a83615349565b9150614a2682615a36565b604082019050919050565b6000614a3e601d83615349565b9150614a4982615a85565b602082019050919050565b6000614a61602c83615349565b9150614a6c82615aae565b604082019050919050565b6000614a84603883615349565b9150614a8f82615afd565b604082019050919050565b6000614aa7602a83615349565b9150614ab282615b4c565b604082019050919050565b6000614aca602983615349565b9150614ad582615b9b565b604082019050919050565b6000614aed602283615349565b9150614af882615bea565b604082019050919050565b6000614b10601383615349565b9150614b1b82615c39565b602082019050919050565b6000614b33601c83615349565b9150614b3e82615c62565b602082019050919050565b6000614b56602083615349565b9150614b6182615c8b565b602082019050919050565b6000614b79602c83615349565b9150614b8482615cb4565b604082019050919050565b6000614b9c602083615349565b9150614ba782615d03565b602082019050919050565b6000614bbf601b83615349565b9150614bca82615d2c565b602082019050919050565b6000614be2602f83615349565b9150614bed82615d55565b604082019050919050565b6000614c05602783615349565b9150614c1082615da4565b604082019050919050565b6000614c28602183615349565b9150614c3382615df3565b604082019050919050565b6000614c4b60008361533e565b9150614c5682615e42565b600082019050919050565b6000614c6e603183615349565b9150614c7982615e45565b604082019050919050565b6000614c91601383615349565b9150614c9c82615e94565b602082019050919050565b614cb081615518565b82525050565b614cbf81615518565b82525050565b614cce81615522565b82525050565b6000614ce08286614774565b9150614cec8285614774565b9150614cf882846147a5565b9150819050949350505050565b6000614d1082614c3e565b9150819050919050565b6000602082019050614d2f6000830184614686565b92915050565b6000608082019050614d4a6000830187614686565b614d576020830186614686565b614d646040830185614cb6565b8181036060830152614d768184614702565b905095945050505050565b60006020820190508181036000830152614d9b8184614695565b905092915050565b6000602082019050614db860008301846146f3565b92915050565b60006020820190508181036000830152614dd8818461473b565b905092915050565b60006020820190508181036000830152614df981614824565b9050919050565b60006020820190508181036000830152614e1981614847565b9050919050565b60006020820190508181036000830152614e398161486a565b9050919050565b60006020820190508181036000830152614e598161488d565b9050919050565b60006020820190508181036000830152614e79816148b0565b9050919050565b60006020820190508181036000830152614e99816148d3565b9050919050565b60006020820190508181036000830152614eb9816148f6565b9050919050565b60006020820190508181036000830152614ed981614919565b9050919050565b60006020820190508181036000830152614ef98161493c565b9050919050565b60006020820190508181036000830152614f198161495f565b9050919050565b60006020820190508181036000830152614f3981614982565b9050919050565b60006020820190508181036000830152614f59816149a5565b9050919050565b60006020820190508181036000830152614f79816149c8565b9050919050565b60006020820190508181036000830152614f99816149eb565b9050919050565b60006020820190508181036000830152614fb981614a0e565b9050919050565b60006020820190508181036000830152614fd981614a31565b9050919050565b60006020820190508181036000830152614ff981614a54565b9050919050565b6000602082019050818103600083015261501981614a77565b9050919050565b6000602082019050818103600083015261503981614a9a565b9050919050565b6000602082019050818103600083015261505981614abd565b9050919050565b6000602082019050818103600083015261507981614ae0565b9050919050565b6000602082019050818103600083015261509981614b03565b9050919050565b600060208201905081810360008301526150b981614b26565b9050919050565b600060208201905081810360008301526150d981614b49565b9050919050565b600060208201905081810360008301526150f981614b6c565b9050919050565b6000602082019050818103600083015261511981614b8f565b9050919050565b6000602082019050818103600083015261513981614bb2565b9050919050565b6000602082019050818103600083015261515981614bd5565b9050919050565b6000602082019050818103600083015261517981614bf8565b9050919050565b6000602082019050818103600083015261519981614c1b565b9050919050565b600060208201905081810360008301526151b981614c61565b9050919050565b600060208201905081810360008301526151d981614c84565b9050919050565b60006020820190506151f56000830184614cb6565b92915050565b60006020820190506152106000830184614cc5565b92915050565b6000615220615231565b905061522c82826155b7565b919050565b6000604051905090565b600067ffffffffffffffff82111561525657615255615720565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561528257615281615720565b5b61528b8261574f565b9050602081019050919050565b600067ffffffffffffffff8211156152b3576152b2615720565b5b6152bc8261574f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061537082615518565b915061537b83615518565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153b0576153af615693565b5b828201905092915050565b60006153c682615518565b91506153d183615518565b9250826153e1576153e06156c2565b5b828204905092915050565b60006153f782615518565b915061540283615518565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561543b5761543a615693565b5b828202905092915050565b600061545182615518565b915061545c83615518565b92508282101561546f5761546e615693565b5b828203905092915050565b600061548582615522565b915061549083615522565b9250828210156154a3576154a2615693565b5b828203905092915050565b60006154b9826154f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615570578082015181840152602081019050615555565b8381111561557f576000848401525b50505050565b6000600282049050600182168061559d57607f821691505b602082108114156155b1576155b06156f1565b5b50919050565b6155c08261574f565b810181811067ffffffffffffffff821117156155df576155de615720565b5b80604052505050565b60006155f382615518565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561562657615625615693565b5b600182019050919050565b600061563c82615522565b915067ffffffffffffffff82141561565757615656615693565b5b600182019050919050565b600061566d82615518565b915061567883615518565b925082615688576156876156c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f506c6561736520656e7465722076616c696420746f6b656e4964732e00000000600082015250565b7f596f7520617265206e6f742077686974654c69737465642e0000000000000000600082015250565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206d696e74206c696d6974206578636565642e000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072696365206d7573742067726561746572207468656e207a65726f2e200000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f496e76616c696420617267756d656e742e000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4172726179206c656e677468206d757374206265206c657373207468656e203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b7f20596f7520617265206e6f74206f776e65722e00000000000000000000000000600082015250565b7f416c6c205f72657365727665204e46547320617265206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506c6561736520656e746572206d696e74696e672070726963652e0000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722061736b696e6720707269636520666f72206d6960008201527f6e74204e46542e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416c6c204e46547320617265206d696e74656400000000000000000000000000600082015250565b615ec6816154ae565b8114615ed157600080fd5b50565b615edd816154c0565b8114615ee857600080fd5b50565b615ef4816154cc565b8114615eff57600080fd5b50565b615f0b81615518565b8114615f1657600080fd5b50565b615f2281615522565b8114615f2d57600080fd5b50565b615f3981615536565b8114615f4457600080fd5b5056fea2646970667358221220268e37fb068244bc748e9d48f907874b6d617aeab90f7b7234284da46c28114564736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576737551704464664b6964415a6367387176794d6f6a0000000000000000000000

Deployed Bytecode

0x6080604052600436106102885760003560e01c80638da5cb5b1161015a578063bd3e8ba5116100c1578063e985e9c51161007a578063e985e9c514610999578063f07bd601146109d6578063f2c4ce1e14610a13578063f2fde38b14610a3c578063f3d9582114610a65578063f5bfa26f14610a9057610288565b8063bd3e8ba514610899578063c87b56dd146108c4578063caa5c2aa14610901578063cef8cb871461092c578063d123973014610957578063dd9526db1461096e57610288565b8063a22cb46511610113578063a22cb465146107b1578063a475b5dd146107da578063acca7295146107f1578063b299ed931461081a578063b5ed1e3114610845578063b88d4fde1461087057610288565b80638da5cb5b146106ae57806394dadfe9146106d957806395d89b41146107165780639950126b146107415780639c4f3d0a1461076c578063a0712d681461079557610288565b8063346de50a116101fe5780636352211e116101b75780636352211e146105a057806370a08231146105dd578063715018a61461061a5780637fbc62321461063157806383b256281461065c5780638884e86b1461068557610288565b8063346de50a146104a657806342842e0e146104d15780634746ebdf146104fa57806355f804b314610523578063583698511461054c57806363430b381461058957610288565b8063127e8e4d11610250578063127e8e4d14610398578063139fc94e146103d557806323b872dd1461040057806327076078146104295780632b8d294d1461045457806330533fdf1461047d57610288565b806301ffc9a71461028d57806306c933d8146102ca57806306fdde0314610307578063081812fc14610332578063095ea7b31461036f575b600080fd5b34801561029957600080fd5b506102b460048036038101906102af9190614560565b610ab9565b6040516102c19190614da3565b60405180910390f35b3480156102d657600080fd5b506102f160048036038101906102ec9190614378565b610b9b565b6040516102fe9190614da3565b60405180910390f35b34801561031357600080fd5b5061031c610bbb565b6040516103299190614dbe565b60405180910390f35b34801561033e57600080fd5b50610359600480360381019061035491906145f3565b610c4d565b6040516103669190614d1a565b60405180910390f35b34801561037b57600080fd5b50610396600480360381019061039191906144e3565b610cd2565b005b3480156103a457600080fd5b506103bf60048036038101906103ba91906145f3565b610dea565b6040516103cc91906151e0565b60405180910390f35b3480156103e157600080fd5b506103ea610e2c565b6040516103f791906151e0565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906143dd565b610e56565b005b34801561043557600080fd5b5061043e610eb6565b60405161044b9190614d81565b60405180910390f35b34801561046057600080fd5b5061047b600480360381019061047691906145f3565b610fbf565b005b34801561048957600080fd5b506104a4600480360381019061049f9190614645565b611088565b005b3480156104b257600080fd5b506104bb611132565b6040516104c89190614da3565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906143dd565b611145565b005b34801561050657600080fd5b50610521600480360381019061051c91906145f3565b611165565b005b34801561052f57600080fd5b5061054a600480360381019061054591906145b2565b61122e565b005b34801561055857600080fd5b50610573600480360381019061056e919061451f565b6112c4565b6040516105809190614da3565b60405180910390f35b34801561059557600080fd5b5061059e61144e565b005b3480156105ac57600080fd5b506105c760048036038101906105c291906145f3565b6114f6565b6040516105d49190614d1a565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190614378565b6115a8565b60405161061191906151e0565b60405180910390f35b34801561062657600080fd5b5061062f611660565b005b34801561063d57600080fd5b506106466116e8565b60405161065391906151fb565b60405180910390f35b34801561066857600080fd5b50610683600480360381019061067e9190614378565b611702565b005b34801561069157600080fd5b506106ac60048036038101906106a79190614645565b61184b565b005b3480156106ba57600080fd5b506106c36118f6565b6040516106d09190614d1a565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb919061451f565b611920565b60405161070d9190614da3565b60405180910390f35b34801561072257600080fd5b5061072b611aaa565b6040516107389190614dbe565b60405180910390f35b34801561074d57600080fd5b50610756611b3c565b6040516107639190614dbe565b60405180910390f35b34801561077857600080fd5b50610793600480360381019061078e919061461c565b611bce565b005b6107af60048036038101906107aa91906145f3565b611c76565b005b3480156107bd57600080fd5b506107d860048036038101906107d391906144a7565b6124db565b005b3480156107e657600080fd5b506107ef6124f1565b005b3480156107fd57600080fd5b5061081860048036038101906108139190614378565b61258a565b005b34801561082657600080fd5b5061082f612730565b60405161083c91906151fb565b60405180910390f35b34801561085157600080fd5b5061085a61274a565b6040516108679190614dbe565b60405180910390f35b34801561087c57600080fd5b506108976004803603810190610892919061442c565b6127dc565b005b3480156108a557600080fd5b506108ae61283e565b6040516108bb91906151e0565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906145f3565b6128e2565b6040516108f89190614dbe565b60405180910390f35b34801561090d57600080fd5b50610916612a3b565b6040516109239190614da3565b60405180910390f35b34801561093857600080fd5b50610941612a52565b60405161094e91906151e0565b60405180910390f35b34801561096357600080fd5b5061096c612abc565b005b34801561097a57600080fd5b50610983612b64565b6040516109909190614da3565b60405180910390f35b3480156109a557600080fd5b506109c060048036038101906109bb91906143a1565b612b77565b6040516109cd9190614da3565b60405180910390f35b3480156109e257600080fd5b506109fd60048036038101906109f89190614378565b612c0b565b604051610a0a9190614da3565b60405180910390f35b348015610a1f57600080fd5b50610a3a6004803603810190610a3591906145b2565b612c2b565b005b348015610a4857600080fd5b50610a636004803603810190610a5e9190614378565b612cc1565b005b348015610a7157600080fd5b50610a7a612db9565b604051610a8791906151e0565b60405180910390f35b348015610a9c57600080fd5b50610ab76004803603810190610ab29190614645565b612e5d565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b8457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b945750610b9382612f08565b5b9050919050565b60136020528060005260406000206000915054906101000a900460ff1681565b606060008054610bca90615585565b80601f0160208091040260200160405190810160405280929190818152602001828054610bf690615585565b8015610c435780601f10610c1857610100808354040283529160200191610c43565b820191906000526020600020905b815481529060010190602001808311610c2657829003601f168201915b5050505050905090565b6000610c5882612f72565b610c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8e906150e0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610cdd826114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4590615180565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d6d612fde565b73ffffffffffffffffffffffffffffffffffffffff161480610d9c5750610d9b81610d96612fde565b612b77565b5b610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290615000565b60405180910390fd5b610de58383612fe6565b505050565b6000600e60019054906101000a900460ff1615610e165781601054610e0f91906153ec565b9050610e27565b81600f54610e2491906153ec565b90505b919050565b6000600e60019054906101000a900460ff1615610e4d576010549050610e53565b600f5490505b90565b610e67610e61612fde565b8261309f565b610ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9d906151a0565b60405180910390fd5b610eb183838361317d565b505050565b60606000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020018280548015610fa957602002820191906000526020600020905b815481526020019060010190808311610f95575b5050505050815250509050806020015191505090565b610fc7612fde565b73ffffffffffffffffffffffffffffffffffffffff16610fe56118f6565b73ffffffffffffffffffffffffffffffffffffffff161461103b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103290615100565b60405180910390fd5b6000811161107e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107590614f00565b60405180910390fd5b80600f8190555050565b611090612fde565b73ffffffffffffffffffffffffffffffffffffffff166110ae6118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611104576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fb90615100565b60405180910390fd5b8060ff166008806101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b600e60009054906101000a900460ff1681565b611160838383604051806020016040528060008152506127dc565b505050565b61116d612fde565b73ffffffffffffffffffffffffffffffffffffffff1661118b6118f6565b73ffffffffffffffffffffffffffffffffffffffff16146111e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d890615100565b60405180910390fd5b60008111611224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121b90614f00565b60405180910390fd5b8060108190555050565b611236612fde565b73ffffffffffffffffffffffffffffffffffffffff166112546118f6565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190615100565b60405180910390fd5b80600a90805190602001906112c09291906140dc565b5050565b60006112ce612fde565b73ffffffffffffffffffffffffffffffffffffffff166112ec6118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990615100565b60405180910390fd5b606482511115611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90615060565b60405180910390fd5b60005b82518110156114445760008382815181106113ce577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050808061143c906155e8565b91505061138a565b5060019050919050565b611456612fde565b73ffffffffffffffffffffffffffffffffffffffff166114746118f6565b73ffffffffffffffffffffffffffffffffffffffff16146114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c190615100565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159690615040565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090615020565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611668612fde565b73ffffffffffffffffffffffffffffffffffffffff166116866118f6565b73ffffffffffffffffffffffffffffffffffffffff16146116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d390615100565b60405180910390fd5b6116e660006133e4565b565b600860009054906101000a900467ffffffffffffffff1681565b61170a612fde565b73ffffffffffffffffffffffffffffffffffffffff166117286118f6565b73ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590615100565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690614f60565b60405180910390fd5b6000601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611853612fde565b73ffffffffffffffffffffffffffffffffffffffff166118716118f6565b73ffffffffffffffffffffffffffffffffffffffff16146118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90615100565b60405180910390fd5b8060ff16600760186101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061192a612fde565b73ffffffffffffffffffffffffffffffffffffffff166119486118f6565b73ffffffffffffffffffffffffffffffffffffffff161461199e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199590615100565b60405180910390fd5b6064825111156119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90615060565b60405180910390fd5b60005b8251811015611aa0576000838281518110611a2a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550508080611a98906155e8565b9150506119e6565b5060019050919050565b606060018054611ab990615585565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae590615585565b8015611b325780601f10611b0757610100808354040283529160200191611b32565b820191906000526020600020905b815481529060010190602001808311611b1557829003601f168201915b5050505050905090565b6060600a8054611b4b90615585565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7790615585565b8015611bc45780601f10611b9957610100808354040283529160200191611bc4565b820191906000526020600020905b815481529060010190602001808311611ba757829003601f168201915b5050505050905090565b611bd6612fde565b73ffffffffffffffffffffffffffffffffffffffff16611bf46118f6565b73ffffffffffffffffffffffffffffffffffffffff1614611c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4190615100565b60405180910390fd5b80600660146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60018110158015611c88575060058111155b611cc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbe90614f80565b60405180910390fd5b600e60009054906101000a900460ff16611d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0d90614e60565b60405180910390fd5b6000339050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290614f60565b60405180910390fd5b601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611deb57611de6826134aa565b6124d7565b6000600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600660149054906101000a900467ffffffffffffffff1667ffffffffffffffff168382611e3d9190615365565b1115611e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e75906151c0565b60405180910390fd5b600e60019054906101000a900460ff16156121fc57600760189054906101000a900467ffffffffffffffff1667ffffffffffffffff16831115611ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eed90614de0565b60405180910390fd5b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611f82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7990614e00565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018054905090508381611fd89190615365565b9050600760189054906101000a900467ffffffffffffffff1667ffffffffffffffff1681111561203d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203490614ea0565b60405180910390fd5b600061204885610dea565b90508034101561208d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208490615160565b60405180910390fd5b6120b9600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826137c9565b6000600190505b8581116121f457600081856120d59190615365565b90506120e186826138bd565b6007600081819054906101000a900467ffffffffffffffff168092919061210790615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806121ec906155e8565b9150506120c0565b5050506124d5565b600860009054906101000a900467ffffffffffffffff1667ffffffffffffffff1683111561225f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225690614de0565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905083816122b59190615365565b9050600860009054906101000a900467ffffffffffffffff1667ffffffffffffffff1681111561231a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231190614ea0565b60405180910390fd5b600061232585610dea565b90508034101561236a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236190615120565b60405180910390fd5b612396600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826137c9565b6000600190505b8581116124d157600081856123b29190615365565b90506123be86826138bd565b6007600081819054906101000a900467ffffffffffffffff16809291906123e490615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050868160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806124c9906155e8565b91505061239d565b5050505b505b5050565b6124ed6124e6612fde565b83836138db565b5050565b6124f9612fde565b73ffffffffffffffffffffffffffffffffffffffff166125176118f6565b73ffffffffffffffffffffffffffffffffffffffff161461256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256490615100565b60405180910390fd5b6001600c60006101000a81548160ff021916908315150217905550565b612592612fde565b73ffffffffffffffffffffffffffffffffffffffff166125b06118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd90615100565b60405180910390fd5b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612677576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266e90614f60565b60405180910390fd5b60011515601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515146126d457600080fd5b6000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760189054906101000a900467ffffffffffffffff1681565b6060600d805461275990615585565b80601f016020809104026020016040519081016040528092919081815260200182805461278590615585565b80156127d25780601f106127a7576101008083540402835291602001916127d2565b820191906000526020600020905b8154815290600101906020018083116127b557829003601f168201915b5050505050905090565b6127ed6127e7612fde565b8361309f565b61282c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612823906151a0565b60405180910390fd5b61283884848484613a48565b50505050565b6000612848612fde565b73ffffffffffffffffffffffffffffffffffffffff166128666118f6565b73ffffffffffffffffffffffffffffffffffffffff16146128bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b390615100565b60405180910390fd5b600760109054906101000a900467ffffffffffffffff1667ffffffffffffffff16905090565b60606128ed82612f72565b61292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390615140565b60405180910390fd5b60001515600c60009054906101000a900460ff16151514156129da57600d805461295590615585565b80601f016020809104026020016040519081016040528092919081815260200182805461298190615585565b80156129ce5780601f106129a3576101008083540402835291602001916129ce565b820191906000526020600020905b8154815290600101906020018083116129b157829003601f168201915b50505050509050612a36565b60006129e4613aa4565b90506000815111612a045760405180602001604052806000815250612a32565b80612a0e84613b36565b600b604051602001612a2293929190614cd4565b6040516020818303038152906040525b9150505b919050565b6000600c60009054906101000a900460ff16905090565b600080609b600760009054906101000a900467ffffffffffffffff16612a78919061547a565b67ffffffffffffffff1690506000600760109054906101000a900467ffffffffffffffff1690508067ffffffffffffffff1682612ab59190615365565b9250505090565b612ac4612fde565b73ffffffffffffffffffffffffffffffffffffffff16612ae26118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90615100565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b600e60019054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b612c33612fde565b73ffffffffffffffffffffffffffffffffffffffff16612c516118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9e90615100565b60405180910390fd5b80600d9080519060200190612cbd9291906140dc565b5050565b612cc9612fde565b73ffffffffffffffffffffffffffffffffffffffff16612ce76118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3490615100565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da490614e80565b60405180910390fd5b612db6816133e4565b50565b6000612dc3612fde565b73ffffffffffffffffffffffffffffffffffffffff16612de16118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2e90615100565b60405180910390fd5b600760009054906101000a900467ffffffffffffffff1667ffffffffffffffff16905090565b612e65612fde565b73ffffffffffffffffffffffffffffffffffffffff16612e836118f6565b73ffffffffffffffffffffffffffffffffffffffff1614612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed090615100565b60405180910390fd5b8060ff16600860006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16613059836114f6565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006130aa82612f72565b6130e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e090614fe0565b60405180910390fd5b60006130f4836114f6565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061313657506131358185612b77565b5b8061317457508373ffffffffffffffffffffffffffffffffffffffff1661315c84610c4d565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661319d826114f6565b73ffffffffffffffffffffffffffffffffffffffff16146131f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ea90614ec0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325a90614f20565b60405180910390fd5b61326e838383613ce3565b613279600082612fe6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132c99190615446565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133209190615365565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46133df838383613ce8565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000339050601260008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661353b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353290615080565b60405180910390fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010180549050905082816135919190615365565b905060088054906101000a900467ffffffffffffffff1667ffffffffffffffff168111156135f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135eb90614e20565b60405180910390fd5b6000600760109054906101000a900467ffffffffffffffff1667ffffffffffffffff169050600760089054906101000a900467ffffffffffffffff1667ffffffffffffffff1684826136469190615365565b1115613687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367e906150a0565b60405180910390fd5b6000600190505b8481116137c257600081836136a39190615365565b90506136af85826138bd565b6007601081819054906101000a900467ffffffffffffffff16809291906136d590615631565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506000601160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600101829080600181540180825580915050600190039060005260206000200160009091909190915055505080806137ba906155e8565b91505061368e565b5050505050565b8047101561380c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161380390614fc0565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405161383290614d05565b60006040518083038185875af1925050503d806000811461386f576040519150601f19603f3d011682016040523d82523d6000602084013e613874565b606091505b50509050806138b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138af90614fa0565b60405180910390fd5b505050565b6138d7828260405180602001604052806000815250613ced565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561394a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161394190614f40565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051613a3b9190614da3565b60405180910390a3505050565b613a5384848461317d565b613a5f84848484613d48565b613a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9590614e40565b60405180910390fd5b50505050565b6060600a8054613ab390615585565b80601f0160208091040260200160405190810160405280929190818152602001828054613adf90615585565b8015613b2c5780601f10613b0157610100808354040283529160200191613b2c565b820191906000526020600020905b815481529060010190602001808311613b0f57829003601f168201915b5050505050905090565b60606000821415613b7e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613cde565b600082905060005b60008214613bb0578080613b99906155e8565b915050600a82613ba991906153bb565b9150613b86565b60008167ffffffffffffffff811115613bf2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015613c245781602001600182028036833780820191505090505b5090505b60008514613cd757600182613c3d9190615446565b9150600a85613c4c9190615662565b6030613c589190615365565b60f81b818381518110613c94577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613cd091906153bb565b9450613c28565b8093505050505b919050565b505050565b505050565b613cf78383613edf565b613d046000848484613d48565b613d43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d3a90614e40565b60405180910390fd5b505050565b6000613d698473ffffffffffffffffffffffffffffffffffffffff166140b9565b15613ed2578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613d92612fde565b8786866040518563ffffffff1660e01b8152600401613db49493929190614d35565b602060405180830381600087803b158015613dce57600080fd5b505af1925050508015613dff57506040513d601f19601f82011682018060405250810190613dfc9190614589565b60015b613e82573d8060008114613e2f576040519150601f19603f3d011682016040523d82523d6000602084013e613e34565b606091505b50600081511415613e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e7190614e40565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613ed7565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613f4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f46906150c0565b60405180910390fd5b613f5881612f72565b15613f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f8f90614ee0565b60405180910390fd5b613fa460008383613ce3565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613ff49190615365565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46140b560008383613ce8565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546140e890615585565b90600052602060002090601f01602090048101928261410a5760008555614151565b82601f1061412357805160ff1916838001178555614151565b82800160010185558215614151579182015b82811115614150578251825591602001919060010190614135565b5b50905061415e9190614162565b5090565b5b8082111561417b576000816000905550600101614163565b5090565b600061419261418d8461523b565b615216565b905080838252602082019050828560208602820111156141b157600080fd5b60005b858110156141e157816141c78882614267565b8452602084019350602083019250506001810190506141b4565b5050509392505050565b60006141fe6141f984615267565b615216565b90508281526020810184848401111561421657600080fd5b614221848285615543565b509392505050565b600061423c61423784615298565b615216565b90508281526020810184848401111561425457600080fd5b61425f848285615543565b509392505050565b60008135905061427681615ebd565b92915050565b600082601f83011261428d57600080fd5b813561429d84826020860161417f565b91505092915050565b6000813590506142b581615ed4565b92915050565b6000813590506142ca81615eeb565b92915050565b6000815190506142df81615eeb565b92915050565b600082601f8301126142f657600080fd5b81356143068482602086016141eb565b91505092915050565b600082601f83011261432057600080fd5b8135614330848260208601614229565b91505092915050565b60008135905061434881615f02565b92915050565b60008135905061435d81615f19565b92915050565b60008135905061437281615f30565b92915050565b60006020828403121561438a57600080fd5b600061439884828501614267565b91505092915050565b600080604083850312156143b457600080fd5b60006143c285828601614267565b92505060206143d385828601614267565b9150509250929050565b6000806000606084860312156143f257600080fd5b600061440086828701614267565b935050602061441186828701614267565b925050604061442286828701614339565b9150509250925092565b6000806000806080858703121561444257600080fd5b600061445087828801614267565b945050602061446187828801614267565b935050604061447287828801614339565b925050606085013567ffffffffffffffff81111561448f57600080fd5b61449b878288016142e5565b91505092959194509250565b600080604083850312156144ba57600080fd5b60006144c885828601614267565b92505060206144d9858286016142a6565b9150509250929050565b600080604083850312156144f657600080fd5b600061450485828601614267565b925050602061451585828601614339565b9150509250929050565b60006020828403121561453157600080fd5b600082013567ffffffffffffffff81111561454b57600080fd5b6145578482850161427c565b91505092915050565b60006020828403121561457257600080fd5b6000614580848285016142bb565b91505092915050565b60006020828403121561459b57600080fd5b60006145a9848285016142d0565b91505092915050565b6000602082840312156145c457600080fd5b600082013567ffffffffffffffff8111156145de57600080fd5b6145ea8482850161430f565b91505092915050565b60006020828403121561460557600080fd5b600061461384828501614339565b91505092915050565b60006020828403121561462e57600080fd5b600061463c8482850161434e565b91505092915050565b60006020828403121561465757600080fd5b600061466584828501614363565b91505092915050565b600061467a8383614ca7565b60208301905092915050565b61468f816154ae565b82525050565b60006146a0826152ee565b6146aa818561531c565b93506146b5836152c9565b8060005b838110156146e65781516146cd888261466e565b97506146d88361530f565b9250506001810190506146b9565b5085935050505092915050565b6146fc816154c0565b82525050565b600061470d826152f9565b614717818561532d565b9350614727818560208601615552565b6147308161574f565b840191505092915050565b600061474682615304565b6147508185615349565b9350614760818560208601615552565b6147698161574f565b840191505092915050565b600061477f82615304565b614789818561535a565b9350614799818560208601615552565b80840191505092915050565b600081546147b281615585565b6147bc818661535a565b945060018216600081146147d757600181146147e85761481b565b60ff1983168652818601935061481b565b6147f1856152d9565b60005b83811015614813578154818901526001820191506020810190506147f4565b838801955050505b50505092915050565b6000614831601c83615349565b915061483c82615760565b602082019050919050565b6000614854601883615349565b915061485f82615789565b602082019050919050565b6000614877601483615349565b9150614882826157b2565b602082019050919050565b600061489a603283615349565b91506148a5826157db565b604082019050919050565b60006148bd601383615349565b91506148c88261582a565b602082019050919050565b60006148e0602683615349565b91506148eb82615853565b604082019050919050565b6000614903601783615349565b915061490e826158a2565b602082019050919050565b6000614926602583615349565b9150614931826158cb565b604082019050919050565b6000614949601c83615349565b91506149548261591a565b602082019050919050565b600061496c601e83615349565b915061497782615943565b602082019050919050565b600061498f602483615349565b915061499a8261596c565b604082019050919050565b60006149b2601983615349565b91506149bd826159bb565b602082019050919050565b60006149d5601d83615349565b91506149e0826159e4565b602082019050919050565b60006149f8601183615349565b9150614a0382615a0d565b602082019050919050565b6000614a1b603a83615349565b9150614a2682615a36565b604082019050919050565b6000614a3e601d83615349565b9150614a4982615a85565b602082019050919050565b6000614a61602c83615349565b9150614a6c82615aae565b604082019050919050565b6000614a84603883615349565b9150614a8f82615afd565b604082019050919050565b6000614aa7602a83615349565b9150614ab282615b4c565b604082019050919050565b6000614aca602983615349565b9150614ad582615b9b565b604082019050919050565b6000614aed602283615349565b9150614af882615bea565b604082019050919050565b6000614b10601383615349565b9150614b1b82615c39565b602082019050919050565b6000614b33601c83615349565b9150614b3e82615c62565b602082019050919050565b6000614b56602083615349565b9150614b6182615c8b565b602082019050919050565b6000614b79602c83615349565b9150614b8482615cb4565b604082019050919050565b6000614b9c602083615349565b9150614ba782615d03565b602082019050919050565b6000614bbf601b83615349565b9150614bca82615d2c565b602082019050919050565b6000614be2602f83615349565b9150614bed82615d55565b604082019050919050565b6000614c05602783615349565b9150614c1082615da4565b604082019050919050565b6000614c28602183615349565b9150614c3382615df3565b604082019050919050565b6000614c4b60008361533e565b9150614c5682615e42565b600082019050919050565b6000614c6e603183615349565b9150614c7982615e45565b604082019050919050565b6000614c91601383615349565b9150614c9c82615e94565b602082019050919050565b614cb081615518565b82525050565b614cbf81615518565b82525050565b614cce81615522565b82525050565b6000614ce08286614774565b9150614cec8285614774565b9150614cf882846147a5565b9150819050949350505050565b6000614d1082614c3e565b9150819050919050565b6000602082019050614d2f6000830184614686565b92915050565b6000608082019050614d4a6000830187614686565b614d576020830186614686565b614d646040830185614cb6565b8181036060830152614d768184614702565b905095945050505050565b60006020820190508181036000830152614d9b8184614695565b905092915050565b6000602082019050614db860008301846146f3565b92915050565b60006020820190508181036000830152614dd8818461473b565b905092915050565b60006020820190508181036000830152614df981614824565b9050919050565b60006020820190508181036000830152614e1981614847565b9050919050565b60006020820190508181036000830152614e398161486a565b9050919050565b60006020820190508181036000830152614e598161488d565b9050919050565b60006020820190508181036000830152614e79816148b0565b9050919050565b60006020820190508181036000830152614e99816148d3565b9050919050565b60006020820190508181036000830152614eb9816148f6565b9050919050565b60006020820190508181036000830152614ed981614919565b9050919050565b60006020820190508181036000830152614ef98161493c565b9050919050565b60006020820190508181036000830152614f198161495f565b9050919050565b60006020820190508181036000830152614f3981614982565b9050919050565b60006020820190508181036000830152614f59816149a5565b9050919050565b60006020820190508181036000830152614f79816149c8565b9050919050565b60006020820190508181036000830152614f99816149eb565b9050919050565b60006020820190508181036000830152614fb981614a0e565b9050919050565b60006020820190508181036000830152614fd981614a31565b9050919050565b60006020820190508181036000830152614ff981614a54565b9050919050565b6000602082019050818103600083015261501981614a77565b9050919050565b6000602082019050818103600083015261503981614a9a565b9050919050565b6000602082019050818103600083015261505981614abd565b9050919050565b6000602082019050818103600083015261507981614ae0565b9050919050565b6000602082019050818103600083015261509981614b03565b9050919050565b600060208201905081810360008301526150b981614b26565b9050919050565b600060208201905081810360008301526150d981614b49565b9050919050565b600060208201905081810360008301526150f981614b6c565b9050919050565b6000602082019050818103600083015261511981614b8f565b9050919050565b6000602082019050818103600083015261513981614bb2565b9050919050565b6000602082019050818103600083015261515981614bd5565b9050919050565b6000602082019050818103600083015261517981614bf8565b9050919050565b6000602082019050818103600083015261519981614c1b565b9050919050565b600060208201905081810360008301526151b981614c61565b9050919050565b600060208201905081810360008301526151d981614c84565b9050919050565b60006020820190506151f56000830184614cb6565b92915050565b60006020820190506152106000830184614cc5565b92915050565b6000615220615231565b905061522c82826155b7565b919050565b6000604051905090565b600067ffffffffffffffff82111561525657615255615720565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561528257615281615720565b5b61528b8261574f565b9050602081019050919050565b600067ffffffffffffffff8211156152b3576152b2615720565b5b6152bc8261574f565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061537082615518565b915061537b83615518565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153b0576153af615693565b5b828201905092915050565b60006153c682615518565b91506153d183615518565b9250826153e1576153e06156c2565b5b828204905092915050565b60006153f782615518565b915061540283615518565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561543b5761543a615693565b5b828202905092915050565b600061545182615518565b915061545c83615518565b92508282101561546f5761546e615693565b5b828203905092915050565b600061548582615522565b915061549083615522565b9250828210156154a3576154a2615693565b5b828203905092915050565b60006154b9826154f8565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015615570578082015181840152602081019050615555565b8381111561557f576000848401525b50505050565b6000600282049050600182168061559d57607f821691505b602082108114156155b1576155b06156f1565b5b50919050565b6155c08261574f565b810181811067ffffffffffffffff821117156155df576155de615720565b5b80604052505050565b60006155f382615518565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561562657615625615693565b5b600182019050919050565b600061563c82615522565b915067ffffffffffffffff82141561565757615656615693565b5b600182019050919050565b600061566d82615518565b915061567883615518565b925082615688576156876156c2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f506c6561736520656e7465722076616c696420746f6b656e4964732e00000000600082015250565b7f596f7520617265206e6f742077686974654c69737465642e0000000000000000600082015250565b7f4d696e74206c696d69742065786365656465642e000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f596f7572206d696e74206c696d6974206578636565642e000000000000000000600082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5072696365206d7573742067726561746572207468656e207a65726f2e200000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f616464726573732063616e2774206265207a65726f2061646472657373000000600082015250565b7f496e76616c696420617267756d656e742e000000000000000000000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4172726179206c656e677468206d757374206265206c657373207468656e203160008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b7f20596f7520617265206e6f74206f776e65722e00000000000000000000000000600082015250565b7f416c6c205f72657365727665204e46547320617265206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f506c6561736520656e746572206d696e74696e672070726963652e0000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f506c6561736520656e7465722061736b696e6720707269636520666f72206d6960008201527f6e74204e46542e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f416c6c204e46547320617265206d696e74656400000000000000000000000000600082015250565b615ec6816154ae565b8114615ed157600080fd5b50565b615edd816154c0565b8114615ee857600080fd5b50565b615ef4816154cc565b8114615eff57600080fd5b50565b615f0b81615518565b8114615f1657600080fd5b50565b615f2281615522565b8114615f2d57600080fd5b50565b615f3981615536565b8114615f4457600080fd5b5056fea2646970667358221220268e37fb068244bc748e9d48f907874b6d617aeab90f7b7234284da46c28114564736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000035697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576737551704464664b6964415a6367387176794d6f6a0000000000000000000000

-----Decoded View---------------
Arg [0] : _initNotRevealedUri (string): ipfs://QmY4uapxLTAZ81ZjaFshhEtuvsuQpDdfKidAZcg8qvyMoj

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000035
Arg [2] : 697066733a2f2f516d5934756170784c54415a38315a6a614673686845747576
Arg [3] : 737551704464664b6964415a6367387176794d6f6a0000000000000000000000


Deployed Bytecode Sourcemap

37331:10471:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24147:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38297:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25092:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26652:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26175:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45735:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47036:193;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27402:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46825:161;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39348:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39199:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37903:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27812:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39566:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40681:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40279:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41275:103;;;;;;;;;;;;;:::i;:::-;;24786:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24516:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;37644:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41126:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38853:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45987:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39814:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25261:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47436:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40793:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42871:2858;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26945:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41485:71;;;;;;;;;;;;;:::i;:::-;;40917:203;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37602:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47325:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28068:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41807:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46091:726;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47235:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47592:207;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41386:91;;;;;;;;;;;;;:::i;:::-;;37935:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27171:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38243:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41564:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41696:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39031:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24147:305;24249:4;24301:25;24286:40;;;:11;:40;;;;:105;;;;24358:33;24343:48;;;:11;:48;;;;24286:105;:158;;;;24408:36;24432:11;24408:23;:36::i;:::-;24286:158;24266:178;;24147:305;;;:::o;38297:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;25092:100::-;25146:13;25179:5;25172:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25092:100;:::o;26652:221::-;26728:7;26756:16;26764:7;26756;:16::i;:::-;26748:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26841:15;:24;26857:7;26841:24;;;;;;;;;;;;;;;;;;;;;26834:31;;26652:221;;;:::o;26175:411::-;26256:13;26272:23;26287:7;26272:14;:23::i;:::-;26256:39;;26320:5;26314:11;;:2;:11;;;;26306:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;26414:5;26398:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;26423:37;26440:5;26447:12;:10;:12::i;:::-;26423:16;:37::i;:::-;26398:62;26376:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;26557:21;26566:2;26570:7;26557:8;:21::i;:::-;26175:411;;;:::o;45735:244::-;45794:7;45818:17;;;;;;;;;;;45814:158;;;45887:7;45859:25;;:35;;;;:::i;:::-;45852:42;;;;45814:158;45953:7;45934:16;;:26;;;;:::i;:::-;45927:33;;45735:244;;;;:::o;47036:193::-;47086:7;47110:17;;;;;;;;;;;47106:82;;;47151:25;;47144:32;;;;47106:82;47205:16;;47198:23;;47036:193;;:::o;27402:339::-;27597:41;27616:12;:10;:12::i;:::-;27630:7;27597:18;:41::i;:::-;27589:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27705:28;27715:4;27721:2;27725:7;27705:9;:28::i;:::-;27402:339;;;:::o;46825:161::-;46875:16;46904;46923:13;:25;46937:10;46923:25;;;;;;;;;;;;;;;46904:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46966:1;:10;;;46959:17;;;46825:161;:::o;39348:172::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39440:1:::1;39431:6;:10;39423:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39506:6;39487:16;:25;;;;39348:172:::0;:::o;39199:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39287:7:::1;39271:23;;:13;::::0;:23:::1;;;;;;;;;;;;;;;;;;39199:103:::0;:::o;37903:25::-;;;;;;;;;;;;;:::o;27812:185::-;27950:39;27967:4;27973:2;27977:7;27950:39;;;;;;;;;;;;:16;:39::i;:::-;27812:185;;;:::o;39566:190::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39667:1:::1;39658:6;:10;39650:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39742:6;39714:25;:34;;;;39566:190:::0;:::o;40681:104::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40766:11:::1;40756:7;:21;;;;;;;;;;;;:::i;:::-;;40681:104:::0;:::o;40279:394::-;40388:4;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40437:3:::1;40418:8;:15;:22;;40410:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40495:9;40490:154;40514:8;:15;40510:1;:19;40490:154;;;40551:19;40573:8;40582:1;40573:11;;;;;;;;;;;;;;;;;;;;;;40551:33;;40628:4;40599:13;:26;40613:11;40599:26;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;40490:154;40531:3;;;;;:::i;:::-;;;;40490:154;;;;40661:4;40654:11;;40279:394:::0;;;:::o;41275:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41353:17:::1;;;;;;;;;;;41352:18;41332:17;;:38;;;;;;;;;;;;;;;;;;41275:103::o:0;24786:239::-;24858:7;24878:13;24894:7;:16;24902:7;24894:16;;;;;;;;;;;;;;;;;;;;;24878:32;;24946:1;24929:19;;:5;:19;;;;24921:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25012:5;25005:12;;;24786:239;;;:::o;24516:208::-;24588:7;24633:1;24616:19;;:5;:19;;;;24608:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24700:9;:16;24710:5;24700:16;;;;;;;;;;;;;;;;24693:23;;24516:208;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;37644:30::-;;;;;;;;;;;;;:::o;41126:141::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41205:8:::1;38704:1;38684:22;;:8;:22;;;;38676:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41254:5:::2;41228:13;:23;41242:8;41228:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;4370:1:::1;41126:141:::0;:::o;38853:111::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38949:7:::1;38929:27;;:17;;:27;;;;;;;;;;;;;;;;;;38853:111:::0;:::o;45987:96::-;46042:7;46069:6;;;;;;;;;;;46062:13;;45987:96;:::o;39814:407::-;39929:4;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39978:3:::1;39959:8;:15;:22;;39951:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;40036:9;40031:161;40055:8;:15;40051:1;:19;40031:161;;;40092:19;40114:8;40123:1;40114:11;;;;;;;;;;;;;;;;;;;;;;40092:33;;40176:4;40140:20;:33;40161:11;40140:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;40031:161;40072:3;;;;;:::i;:::-;;;;40031:161;;;;40209:4;40202:11;;39814:407:::0;;;:::o;25261:104::-;25317:13;25350:7;25343:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25261:104;:::o;47436:91::-;47480:13;47512:7;47505:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47436:91;:::o;40793:116::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40884:17:::1;40871:10;;:30;;;;;;;;;;;;;;;;;;40793:116:::0;:::o;42871:2858::-;42953:1;42940:9;:14;;:32;;;;;42971:1;42958:9;:14;;42940:32;42932:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43015:13;;;;;;;;;;;43007:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;43063:12;43078:10;43063:25;;43123:1;43107:18;;:4;:18;;;;43099:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;43176:13;:19;43190:4;43176:19;;;;;;;;;;;;;;;;;;;;;;;;;43172:2550;;;43212:20;43222:9;43212;:20::i;:::-;43172:2550;;;43265:14;43282:15;;;;;;;;;;;43265:32;;;;43344:10;;;;;;;;;;;43320:34;;43330:9;43321:6;:18;;;;:::i;:::-;43320:34;;43312:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43399:17;;;;;;;;;;;43395:2316;;;43480:17;;;;;;;;;;;43467:30;;:9;:30;;43437:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;43618:20;:32;43639:10;43618:32;;;;;;;;;;;;;;;;;;;;;;;;;43588:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;43737:18;43757:13;:25;43771:10;43757:25;;;;;;;;;;;;;;;:34;;:41;;;;43737:61;;43840:9;43829:10;:20;;;;:::i;:::-;43817:32;;43939:17;;;;;;;;;;;43900:56;;:10;:56;;43870:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;44042:15;44060:22;44072:9;44060:11;:22::i;:::-;44042:40;;44144:7;44131:9;:20;;44101:133;;;;;;;;;;;;:::i;:::-;;;;;;;;;44253:43;44279:6;;;;;;;;;;;44288:7;44253:17;:43::i;:::-;44320:9;44332:1;44320:13;;44315:360;44340:9;44335:1;:14;44315:360;;44379:11;44402:1;44393:6;:10;;;;:::i;:::-;44379:24;;44426:20;44436:4;44442:3;44426:9;:20::i;:::-;44469:15;;:17;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;44509:26;44538:13;:19;44552:4;44538:19;;;;;;;;;;;;;;;44509:48;;44599:4;44580:10;:16;;;:23;;;;;;;;;;;;;;;;;;44626:10;:19;;44651:3;44626:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44315:360;;44351:3;;;;;:::i;:::-;;;;44315:360;;;;43395:2316;;;;;44758:12;;;;;;;;;;;44745:25;;:9;:25;;44715:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;44863:18;44883:13;:25;44897:10;44883:25;;;;;;;;;;;;;;;:34;;:41;;;;44863:61;;44966:9;44955:10;:20;;;;:::i;:::-;44943:32;;45038:12;;;;;;;;;;;45024:26;;:10;:26;;44994:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;45136:15;45154:22;45166:9;45154:11;:22::i;:::-;45136:40;;45216:7;45203:9;:20;;45195:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45274:43;45300:6;;;;;;;;;;;45309:7;45274:17;:43::i;:::-;45341:9;45353:1;45341:13;;45336:360;45361:9;45356:1;:14;45336:360;;45400:11;45423:1;45414:6;:10;;;;:::i;:::-;45400:24;;45447:20;45457:4;45463:3;45447:9;:20::i;:::-;45490:15;;:17;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;45530:26;45559:13;:19;45573:4;45559:19;;;;;;;;;;;;;;;45530:48;;45620:4;45601:10;:16;;;:23;;;;;;;;;;;;;;;;;;45647:10;:19;;45672:3;45647:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45336:360;;45372:3;;;;;:::i;:::-;;;;45336:360;;;;43395:2316;;;43172:2550;;42871:2858;;:::o;26945:155::-;27040:52;27059:12;:10;:12::i;:::-;27073:8;27083;27040:18;:52::i;:::-;26945:155;;:::o;41485:71::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41544:4:::1;41533:8;;:15;;;;;;;;;;;;;;;;;;41485:71::o:0;40917:203::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40995:8:::1;38704:1;38684:22;;:8;:22;;;;38676:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41058:4:::2;41024:38;;:20;:30;41045:8;41024:30;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;41016:47;;;::::0;::::2;;41107:5;41074:20;:30;41095:8;41074:30;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;4370:1:::1;40917:203:::0;:::o;37602:35::-;;;;;;;;;;;;;:::o;47325:105::-;47376:13;47408:14;47401:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47325:105;:::o;28068:328::-;28243:41;28262:12;:10;:12::i;:::-;28276:7;28243:18;:41::i;:::-;28235:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28349:39;28363:4;28369:2;28373:7;28382:5;28349:13;:39::i;:::-;28068:328;;;;:::o;41807:112::-;41868:7;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41894:17:::1;;;;;;;;;;;41887:24;;;;41807:112:::0;:::o;46091:726::-;46209:13;46262:16;46270:7;46262;:16::i;:::-;46240:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;46382:5;46370:17;;:8;;;;;;;;;;;:17;;;46366:71;;;46411:14;46404:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46366:71;46449:28;46480:10;:8;:10::i;:::-;46449:41;;46552:1;46527:14;46521:28;:32;:288;;;;;;;;;;;;;;;;;46645:14;46686:18;:7;:16;:18::i;:::-;46731:14;46602:166;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46521:288;46501:308;;;46091:726;;;;:::o;47235:84::-;47280:4;47303:8;;;;;;;;;;;47296:15;;47235:84;:::o;47592:207::-;47643:7;47662:16;47700:3;47682:15;;;;;;;;;;;:21;;;;:::i;:::-;47662:41;;;;47715:18;47734:17;;;;;;;;;;;47715:36;;47780:11;47769:22;;:8;:22;;;;:::i;:::-;47762:29;;;;47592:207;:::o;41386:91::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41456:13:::1;;;;;;;;;;;41455:14;41439:13;;:30;;;;;;;;;;;;;;;;;;41386:91::o:0;37935:29::-;;;;;;;;;;;;;:::o;27171:164::-;27268:4;27292:18;:25;27311:5;27292:25;;;;;;;;;;;;;;;:35;27318:8;27292:35;;;;;;;;;;;;;;;;;;;;;;;;;27285:42;;27171:164;;;;:::o;38243:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;41564:126::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41667:15:::1;41650:14;:32;;;;;;;;;;;;:::i;:::-;;41564:126:::0;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;41696:105::-;41752:7;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41778:15:::1;;;;;;;;;;;41771:22;;;;41696:105:::0;:::o;39031:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39119:7:::1;39104:22;;:12;;:22;;;;;;;;;;;;;;;;;;39031:103:::0;:::o;16886:157::-;16971:4;17010:25;16995:40;;;:11;:40;;;;16988:47;;16886:157;;;:::o;29906:127::-;29971:4;30023:1;29995:30;;:7;:16;30003:7;29995:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29988:37;;29906:127;;;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;34052:174::-;34154:2;34127:15;:24;34143:7;34127:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34210:7;34206:2;34172:46;;34181:23;34196:7;34181:14;:23::i;:::-;34172:46;;;;;;;;;;;;34052:174;;:::o;30200:348::-;30293:4;30318:16;30326:7;30318;:16::i;:::-;30310:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30394:13;30410:23;30425:7;30410:14;:23::i;:::-;30394:39;;30463:5;30452:16;;:7;:16;;;:52;;;;30472:32;30489:5;30496:7;30472:16;:32::i;:::-;30452:52;:87;;;;30532:7;30508:31;;:20;30520:7;30508:11;:20::i;:::-;:31;;;30452:87;30444:96;;;30200:348;;;;:::o;33309:625::-;33468:4;33441:31;;:23;33456:7;33441:14;:23::i;:::-;:31;;;33433:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33547:1;33533:16;;:2;:16;;;;33525:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33603:39;33624:4;33630:2;33634:7;33603:20;:39::i;:::-;33707:29;33724:1;33728:7;33707:8;:29::i;:::-;33768:1;33749:9;:15;33759:4;33749:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33797:1;33780:9;:13;33790:2;33780:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33828:2;33809:7;:16;33817:7;33809:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33867:7;33863:2;33848:27;;33857:4;33848:27;;;;;;;;;;;;33888:38;33908:4;33914:2;33918:7;33888:19;:38::i;:::-;33309:625;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5349:191;;:::o;42056:782::-;42114:12;42129:10;42114:25;;42158:13;:19;42172:4;42158:19;;;;;;;;;;;;;;;;;;;;;;;;;42150:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;42212:18;42232:13;:25;42246:10;42232:25;;;;;;;;;;;;;;;:34;;:41;;;;42212:61;;42307:9;42296:10;:20;;;;:::i;:::-;42284:32;;42348:13;;;;;;;;;;42335:26;;:10;:26;;42327:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;42396:14;42413:17;;;;;;;;;;;42396:34;;;;42473:8;;;;;;;;;;;42449:32;;42459:9;42450:6;:18;;;;:::i;:::-;42449:32;;42441:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42530:9;42542:1;42530:13;;42525:306;42550:9;42545:1;:14;42525:306;;42581:11;42604:1;42595:6;:10;;;;:::i;:::-;42581:24;;42620:20;42630:4;42636:3;42620:9;:20::i;:::-;42655:17;;:19;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;42689:26;42718:13;:19;42732:4;42718:19;;;;;;;;;;;;;;;42689:48;;42771:4;42752:10;:16;;;:23;;;;;;;;;;;;;;;;;;42790:10;:19;;42815:3;42790:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42525:306;;42561:3;;;;;:::i;:::-;;;;42525:306;;;;42056:782;;;;:::o;8041:317::-;8156:6;8131:21;:31;;8123:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8210:12;8228:9;:14;;8250:6;8228:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8209:52;;;8280:7;8272:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8041:317;;;:::o;30890:110::-;30966:26;30976:2;30980:7;30966:26;;;;;;;;;;;;:9;:26::i;:::-;30890:110;;:::o;34368:315::-;34523:8;34514:17;;:5;:17;;;;34506:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;34610:8;34572:18;:25;34591:5;34572:25;;;;;;;;;;;;;;;:35;34598:8;34572:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34656:8;34634:41;;34649:5;34634:41;;;34666:8;34634:41;;;;;;:::i;:::-;;;;;;;;34368:315;;;:::o;29278:::-;29435:28;29445:4;29451:2;29455:7;29435:9;:28::i;:::-;29482:48;29505:4;29511:2;29515:7;29524:5;29482:22;:48::i;:::-;29474:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;29278:315;;;;:::o;41948:100::-;42000:13;42033:7;42026:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41948:100;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;36619:126::-;;;;:::o;37130:125::-;;;;:::o;31227:321::-;31357:18;31363:2;31367:7;31357:5;:18::i;:::-;31408:54;31439:1;31443:2;31447:7;31456:5;31408:22;:54::i;:::-;31386:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;31227:321;;;:::o;35248:799::-;35403:4;35424:15;:2;:13;;;:15::i;:::-;35420:620;;;35476:2;35460:36;;;35497:12;:10;:12::i;:::-;35511:4;35517:7;35526:5;35460:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35456:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35719:1;35702:6;:13;:18;35698:272;;;35745:60;;;;;;;;;;:::i;:::-;;;;;;;;35698:272;35920:6;35914:13;35905:6;35901:2;35897:15;35890:38;35456:529;35593:41;;;35583:51;;;:6;:51;;;;35576:58;;;;;35420:620;36024:4;36017:11;;35248:799;;;;;;;:::o;31884:439::-;31978:1;31964:16;;:2;:16;;;;31956:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32037:16;32045:7;32037;:16::i;:::-;32036:17;32028:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32099:45;32128:1;32132:2;32136:7;32099:20;:45::i;:::-;32174:1;32157:9;:13;32167:2;32157:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32205:2;32186:7;:16;32194:7;32186:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32250:7;32246:2;32225:33;;32242:1;32225:33;;;;;;;;;;;;32271:44;32299:1;32303:2;32307:7;32271:19;:44::i;:::-;31884:439;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655: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:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1547:303::-;1618:5;1667:3;1660:4;1652:6;1648:17;1644:27;1634:2;;1685:1;1682;1675:12;1634:2;1725:6;1712:20;1750:94;1840:3;1832:6;1825:4;1817:6;1813:17;1750:94;:::i;:::-;1741:103;;1624:226;;;;;:::o;1856:133::-;1899:5;1937:6;1924:20;1915:29;;1953:30;1977:5;1953:30;:::i;:::-;1905:84;;;;:::o;1995:137::-;2040:5;2078:6;2065:20;2056:29;;2094:32;2120:5;2094:32;:::i;:::-;2046:86;;;;:::o;2138:141::-;2194:5;2225:6;2219:13;2210:22;;2241:32;2267:5;2241:32;:::i;:::-;2200:79;;;;:::o;2298:271::-;2353:5;2402:3;2395:4;2387:6;2383:17;2379:27;2369:2;;2420:1;2417;2410:12;2369:2;2460:6;2447:20;2485:78;2559:3;2551:6;2544:4;2536:6;2532:17;2485:78;:::i;:::-;2476:87;;2359:210;;;;;:::o;2589:273::-;2645:5;2694:3;2687:4;2679:6;2675:17;2671:27;2661:2;;2712:1;2709;2702:12;2661:2;2752:6;2739:20;2777:79;2852:3;2844:6;2837:4;2829:6;2825:17;2777:79;:::i;:::-;2768:88;;2651:211;;;;;:::o;2868:139::-;2914:5;2952:6;2939:20;2930:29;;2968:33;2995:5;2968:33;:::i;:::-;2920:87;;;;:::o;3013:137::-;3058:5;3096:6;3083:20;3074:29;;3112:32;3138:5;3112:32;:::i;:::-;3064:86;;;;:::o;3156:135::-;3200:5;3238:6;3225:20;3216:29;;3254:31;3279:5;3254:31;:::i;:::-;3206:85;;;;:::o;3297:262::-;3356:6;3405:2;3393:9;3384:7;3380:23;3376:32;3373:2;;;3421:1;3418;3411:12;3373:2;3464:1;3489:53;3534:7;3525:6;3514:9;3510:22;3489:53;:::i;:::-;3479:63;;3435:117;3363:196;;;;:::o;3565:407::-;3633:6;3641;3690:2;3678:9;3669:7;3665:23;3661:32;3658:2;;;3706:1;3703;3696:12;3658:2;3749:1;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3720:117;3876:2;3902:53;3947:7;3938:6;3927:9;3923:22;3902:53;:::i;:::-;3892:63;;3847:118;3648:324;;;;;:::o;3978:552::-;4055:6;4063;4071;4120:2;4108:9;4099:7;4095:23;4091:32;4088:2;;;4136:1;4133;4126:12;4088:2;4179:1;4204:53;4249:7;4240:6;4229:9;4225:22;4204:53;:::i;:::-;4194:63;;4150:117;4306:2;4332:53;4377:7;4368:6;4357:9;4353:22;4332:53;:::i;:::-;4322:63;;4277:118;4434:2;4460:53;4505:7;4496:6;4485:9;4481:22;4460:53;:::i;:::-;4450:63;;4405:118;4078:452;;;;;:::o;4536:809::-;4631:6;4639;4647;4655;4704:3;4692:9;4683:7;4679:23;4675:33;4672:2;;;4721:1;4718;4711:12;4672:2;4764:1;4789:53;4834:7;4825:6;4814:9;4810:22;4789:53;:::i;:::-;4779:63;;4735:117;4891:2;4917:53;4962:7;4953:6;4942:9;4938:22;4917:53;:::i;:::-;4907:63;;4862:118;5019:2;5045:53;5090:7;5081:6;5070:9;5066:22;5045:53;:::i;:::-;5035:63;;4990:118;5175:2;5164:9;5160:18;5147:32;5206:18;5198:6;5195:30;5192:2;;;5238:1;5235;5228:12;5192:2;5266:62;5320:7;5311:6;5300:9;5296:22;5266:62;:::i;:::-;5256:72;;5118:220;4662:683;;;;;;;:::o;5351:401::-;5416:6;5424;5473:2;5461:9;5452:7;5448:23;5444:32;5441:2;;;5489:1;5486;5479:12;5441:2;5532:1;5557:53;5602:7;5593:6;5582:9;5578:22;5557:53;:::i;:::-;5547:63;;5503:117;5659:2;5685:50;5727:7;5718:6;5707:9;5703:22;5685:50;:::i;:::-;5675:60;;5630:115;5431:321;;;;;:::o;5758:407::-;5826:6;5834;5883:2;5871:9;5862:7;5858:23;5854:32;5851:2;;;5899:1;5896;5889:12;5851:2;5942:1;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5913:117;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;5841:324;;;;;:::o;6171:405::-;6255:6;6304:2;6292:9;6283:7;6279:23;6275:32;6272:2;;;6320:1;6317;6310:12;6272:2;6391:1;6380:9;6376:17;6363:31;6421:18;6413:6;6410:30;6407:2;;;6453:1;6450;6443:12;6407:2;6481:78;6551:7;6542:6;6531:9;6527:22;6481:78;:::i;:::-;6471:88;;6334:235;6262:314;;;;:::o;6582:260::-;6640:6;6689:2;6677:9;6668:7;6664:23;6660:32;6657:2;;;6705:1;6702;6695:12;6657:2;6748:1;6773:52;6817:7;6808:6;6797:9;6793:22;6773:52;:::i;:::-;6763:62;;6719:116;6647:195;;;;:::o;6848:282::-;6917:6;6966:2;6954:9;6945:7;6941:23;6937:32;6934:2;;;6982:1;6979;6972:12;6934:2;7025:1;7050:63;7105:7;7096:6;7085:9;7081:22;7050:63;:::i;:::-;7040:73;;6996:127;6924:206;;;;:::o;7136:375::-;7205:6;7254:2;7242:9;7233:7;7229:23;7225:32;7222:2;;;7270:1;7267;7260:12;7222:2;7341:1;7330:9;7326:17;7313:31;7371:18;7363:6;7360:30;7357:2;;;7403:1;7400;7393:12;7357:2;7431:63;7486:7;7477:6;7466:9;7462:22;7431:63;:::i;:::-;7421:73;;7284:220;7212:299;;;;:::o;7517:262::-;7576:6;7625:2;7613:9;7604:7;7600:23;7596:32;7593:2;;;7641:1;7638;7631:12;7593:2;7684:1;7709:53;7754:7;7745:6;7734:9;7730:22;7709:53;:::i;:::-;7699:63;;7655:117;7583:196;;;;:::o;7785:260::-;7843:6;7892:2;7880:9;7871:7;7867:23;7863:32;7860:2;;;7908:1;7905;7898:12;7860:2;7951:1;7976:52;8020:7;8011:6;8000:9;7996:22;7976:52;:::i;:::-;7966:62;;7922:116;7850:195;;;;:::o;8051:258::-;8108:6;8157:2;8145:9;8136:7;8132:23;8128:32;8125:2;;;8173:1;8170;8163:12;8125:2;8216:1;8241:51;8284:7;8275:6;8264:9;8260:22;8241:51;:::i;:::-;8231:61;;8187:115;8115:194;;;;:::o;8315:179::-;8384:10;8405:46;8447:3;8439:6;8405:46;:::i;:::-;8483:4;8478:3;8474:14;8460:28;;8395:99;;;;:::o;8500:118::-;8587:24;8605:5;8587:24;:::i;:::-;8582:3;8575:37;8565:53;;:::o;8654:732::-;8773:3;8802:54;8850:5;8802:54;:::i;:::-;8872:86;8951:6;8946:3;8872:86;:::i;:::-;8865:93;;8982:56;9032:5;8982:56;:::i;:::-;9061:7;9092:1;9077:284;9102:6;9099:1;9096:13;9077:284;;;9178:6;9172:13;9205:63;9264:3;9249:13;9205:63;:::i;:::-;9198:70;;9291:60;9344:6;9291:60;:::i;:::-;9281:70;;9137:224;9124:1;9121;9117:9;9112:14;;9077:284;;;9081:14;9377:3;9370:10;;8778:608;;;;;;;:::o;9392:109::-;9473:21;9488:5;9473:21;:::i;:::-;9468:3;9461:34;9451:50;;:::o;9507:360::-;9593:3;9621:38;9653:5;9621:38;:::i;:::-;9675:70;9738:6;9733:3;9675:70;:::i;:::-;9668:77;;9754:52;9799:6;9794:3;9787:4;9780:5;9776:16;9754:52;:::i;:::-;9831:29;9853:6;9831:29;:::i;:::-;9826:3;9822:39;9815:46;;9597:270;;;;;:::o;9873:364::-;9961:3;9989:39;10022:5;9989:39;:::i;:::-;10044:71;10108:6;10103:3;10044:71;:::i;:::-;10037:78;;10124:52;10169:6;10164:3;10157:4;10150:5;10146:16;10124:52;:::i;:::-;10201:29;10223:6;10201:29;:::i;:::-;10196:3;10192:39;10185:46;;9965:272;;;;;:::o;10243:377::-;10349:3;10377:39;10410:5;10377:39;:::i;:::-;10432:89;10514:6;10509:3;10432:89;:::i;:::-;10425:96;;10530:52;10575:6;10570:3;10563:4;10556:5;10552:16;10530:52;:::i;:::-;10607:6;10602:3;10598:16;10591:23;;10353:267;;;;;:::o;10650:845::-;10753:3;10790:5;10784:12;10819:36;10845:9;10819:36;:::i;:::-;10871:89;10953:6;10948:3;10871:89;:::i;:::-;10864:96;;10991:1;10980:9;10976:17;11007:1;11002:137;;;;11153:1;11148:341;;;;10969:520;;11002:137;11086:4;11082:9;11071;11067:25;11062:3;11055:38;11122:6;11117:3;11113:16;11106:23;;11002:137;;11148:341;11215:38;11247:5;11215:38;:::i;:::-;11275:1;11289:154;11303:6;11300:1;11297:13;11289:154;;;11377:7;11371:14;11367:1;11362:3;11358:11;11351:35;11427:1;11418:7;11414:15;11403:26;;11325:4;11322:1;11318:12;11313:17;;11289:154;;;11472:6;11467:3;11463:16;11456:23;;11155:334;;10969:520;;10757:738;;;;;;:::o;11501:366::-;11643:3;11664:67;11728:2;11723:3;11664:67;:::i;:::-;11657:74;;11740:93;11829:3;11740:93;:::i;:::-;11858:2;11853:3;11849:12;11842:19;;11647:220;;;:::o;11873:366::-;12015:3;12036:67;12100:2;12095:3;12036:67;:::i;:::-;12029:74;;12112:93;12201:3;12112:93;:::i;:::-;12230:2;12225:3;12221:12;12214:19;;12019:220;;;:::o;12245:366::-;12387:3;12408:67;12472:2;12467:3;12408:67;:::i;:::-;12401:74;;12484:93;12573:3;12484:93;:::i;:::-;12602:2;12597:3;12593:12;12586:19;;12391:220;;;:::o;12617:366::-;12759:3;12780:67;12844:2;12839:3;12780:67;:::i;:::-;12773:74;;12856:93;12945:3;12856:93;:::i;:::-;12974:2;12969:3;12965:12;12958:19;;12763:220;;;:::o;12989:366::-;13131:3;13152:67;13216:2;13211:3;13152:67;:::i;:::-;13145:74;;13228:93;13317:3;13228:93;:::i;:::-;13346:2;13341:3;13337:12;13330:19;;13135:220;;;:::o;13361:366::-;13503:3;13524:67;13588:2;13583:3;13524:67;:::i;:::-;13517:74;;13600:93;13689:3;13600:93;:::i;:::-;13718:2;13713:3;13709:12;13702:19;;13507:220;;;:::o;13733:366::-;13875:3;13896:67;13960:2;13955:3;13896:67;:::i;:::-;13889:74;;13972:93;14061:3;13972:93;:::i;:::-;14090:2;14085:3;14081:12;14074:19;;13879:220;;;:::o;14105:366::-;14247:3;14268:67;14332:2;14327:3;14268:67;:::i;:::-;14261:74;;14344:93;14433:3;14344:93;:::i;:::-;14462:2;14457:3;14453:12;14446:19;;14251:220;;;:::o;14477:366::-;14619:3;14640:67;14704:2;14699:3;14640:67;:::i;:::-;14633:74;;14716:93;14805:3;14716:93;:::i;:::-;14834:2;14829:3;14825:12;14818:19;;14623:220;;;:::o;14849:366::-;14991:3;15012:67;15076:2;15071:3;15012:67;:::i;:::-;15005:74;;15088:93;15177:3;15088:93;:::i;:::-;15206:2;15201:3;15197:12;15190:19;;14995:220;;;:::o;15221:366::-;15363:3;15384:67;15448:2;15443:3;15384:67;:::i;:::-;15377:74;;15460:93;15549:3;15460:93;:::i;:::-;15578:2;15573:3;15569:12;15562:19;;15367:220;;;:::o;15593:366::-;15735:3;15756:67;15820:2;15815:3;15756:67;:::i;:::-;15749:74;;15832:93;15921:3;15832:93;:::i;:::-;15950:2;15945:3;15941:12;15934:19;;15739:220;;;:::o;15965:366::-;16107:3;16128:67;16192:2;16187:3;16128:67;:::i;:::-;16121:74;;16204:93;16293:3;16204:93;:::i;:::-;16322:2;16317:3;16313:12;16306:19;;16111:220;;;:::o;16337:366::-;16479:3;16500:67;16564:2;16559:3;16500:67;:::i;:::-;16493:74;;16576:93;16665:3;16576:93;:::i;:::-;16694:2;16689:3;16685:12;16678:19;;16483:220;;;:::o;16709:366::-;16851:3;16872:67;16936:2;16931:3;16872:67;:::i;:::-;16865:74;;16948:93;17037:3;16948:93;:::i;:::-;17066:2;17061:3;17057:12;17050:19;;16855:220;;;:::o;17081:366::-;17223:3;17244:67;17308:2;17303:3;17244:67;:::i;:::-;17237:74;;17320:93;17409:3;17320:93;:::i;:::-;17438:2;17433:3;17429:12;17422:19;;17227:220;;;:::o;17453:366::-;17595:3;17616:67;17680:2;17675:3;17616:67;:::i;:::-;17609:74;;17692:93;17781:3;17692:93;:::i;:::-;17810:2;17805:3;17801:12;17794:19;;17599:220;;;:::o;17825:366::-;17967:3;17988:67;18052:2;18047:3;17988:67;:::i;:::-;17981:74;;18064:93;18153:3;18064:93;:::i;:::-;18182:2;18177:3;18173:12;18166:19;;17971:220;;;:::o;18197:366::-;18339:3;18360:67;18424:2;18419:3;18360:67;:::i;:::-;18353:74;;18436:93;18525:3;18436:93;:::i;:::-;18554:2;18549:3;18545:12;18538:19;;18343:220;;;:::o;18569:366::-;18711:3;18732:67;18796:2;18791:3;18732:67;:::i;:::-;18725:74;;18808:93;18897:3;18808:93;:::i;:::-;18926:2;18921:3;18917:12;18910:19;;18715:220;;;:::o;18941:366::-;19083:3;19104:67;19168:2;19163:3;19104:67;:::i;:::-;19097:74;;19180:93;19269:3;19180:93;:::i;:::-;19298:2;19293:3;19289:12;19282:19;;19087:220;;;:::o;19313:366::-;19455:3;19476:67;19540:2;19535:3;19476:67;:::i;:::-;19469:74;;19552:93;19641:3;19552:93;:::i;:::-;19670:2;19665:3;19661:12;19654:19;;19459:220;;;:::o;19685:366::-;19827:3;19848:67;19912:2;19907:3;19848:67;:::i;:::-;19841:74;;19924:93;20013:3;19924:93;:::i;:::-;20042:2;20037:3;20033:12;20026:19;;19831:220;;;:::o;20057:366::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20203:220;;;:::o;20429:366::-;20571:3;20592:67;20656:2;20651:3;20592:67;:::i;:::-;20585:74;;20668:93;20757:3;20668:93;:::i;:::-;20786:2;20781:3;20777:12;20770:19;;20575:220;;;:::o;20801:366::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20947:220;;;:::o;21173:366::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21319:220;;;:::o;21545:366::-;21687:3;21708:67;21772:2;21767:3;21708:67;:::i;:::-;21701:74;;21784:93;21873:3;21784:93;:::i;:::-;21902:2;21897:3;21893:12;21886:19;;21691:220;;;:::o;21917:366::-;22059:3;22080:67;22144:2;22139:3;22080:67;:::i;:::-;22073:74;;22156:93;22245:3;22156:93;:::i;:::-;22274:2;22269:3;22265:12;22258:19;;22063:220;;;:::o;22289:366::-;22431:3;22452:67;22516:2;22511:3;22452:67;:::i;:::-;22445:74;;22528:93;22617:3;22528:93;:::i;:::-;22646:2;22641:3;22637:12;22630:19;;22435:220;;;:::o;22661:398::-;22820:3;22841:83;22922:1;22917:3;22841:83;:::i;:::-;22834:90;;22933:93;23022:3;22933:93;:::i;:::-;23051:1;23046:3;23042:11;23035:18;;22824:235;;;:::o;23065:366::-;23207:3;23228:67;23292:2;23287:3;23228:67;:::i;:::-;23221:74;;23304:93;23393:3;23304:93;:::i;:::-;23422:2;23417:3;23413:12;23406:19;;23211:220;;;:::o;23437:366::-;23579:3;23600:67;23664:2;23659:3;23600:67;:::i;:::-;23593:74;;23676:93;23765:3;23676:93;:::i;:::-;23794:2;23789:3;23785:12;23778:19;;23583:220;;;:::o;23809:108::-;23886:24;23904:5;23886:24;:::i;:::-;23881:3;23874:37;23864:53;;:::o;23923:118::-;24010:24;24028:5;24010:24;:::i;:::-;24005:3;23998:37;23988:53;;:::o;24047:115::-;24132:23;24149:5;24132:23;:::i;:::-;24127:3;24120:36;24110:52;;:::o;24168:589::-;24393:3;24415:95;24506:3;24497:6;24415:95;:::i;:::-;24408:102;;24527:95;24618:3;24609:6;24527:95;:::i;:::-;24520:102;;24639:92;24727:3;24718:6;24639:92;:::i;:::-;24632:99;;24748:3;24741:10;;24397:360;;;;;;:::o;24763:379::-;24947:3;24969:147;25112:3;24969:147;:::i;:::-;24962:154;;25133:3;25126:10;;24951:191;;;:::o;25148:222::-;25241:4;25279:2;25268:9;25264:18;25256:26;;25292:71;25360:1;25349:9;25345:17;25336:6;25292:71;:::i;:::-;25246:124;;;;:::o;25376:640::-;25571:4;25609:3;25598:9;25594:19;25586:27;;25623:71;25691:1;25680:9;25676:17;25667:6;25623:71;:::i;:::-;25704:72;25772:2;25761:9;25757:18;25748:6;25704:72;:::i;:::-;25786;25854:2;25843:9;25839:18;25830:6;25786:72;:::i;:::-;25905:9;25899:4;25895:20;25890:2;25879:9;25875:18;25868:48;25933:76;26004:4;25995:6;25933:76;:::i;:::-;25925:84;;25576:440;;;;;;;:::o;26022:373::-;26165:4;26203:2;26192:9;26188:18;26180:26;;26252:9;26246:4;26242:20;26238:1;26227:9;26223:17;26216:47;26280:108;26383:4;26374:6;26280:108;:::i;:::-;26272:116;;26170:225;;;;:::o;26401:210::-;26488:4;26526:2;26515:9;26511:18;26503:26;;26539:65;26601:1;26590:9;26586:17;26577:6;26539:65;:::i;:::-;26493:118;;;;:::o;26617:313::-;26730:4;26768:2;26757:9;26753:18;26745:26;;26817:9;26811:4;26807:20;26803:1;26792:9;26788:17;26781:47;26845:78;26918:4;26909:6;26845:78;:::i;:::-;26837:86;;26735:195;;;;:::o;26936:419::-;27102:4;27140:2;27129:9;27125:18;27117:26;;27189:9;27183:4;27179:20;27175:1;27164:9;27160:17;27153:47;27217:131;27343:4;27217:131;:::i;:::-;27209:139;;27107:248;;;:::o;27361:419::-;27527:4;27565:2;27554:9;27550:18;27542:26;;27614:9;27608:4;27604:20;27600:1;27589:9;27585:17;27578:47;27642:131;27768:4;27642:131;:::i;:::-;27634:139;;27532:248;;;:::o;27786:419::-;27952:4;27990:2;27979:9;27975:18;27967:26;;28039:9;28033:4;28029:20;28025:1;28014:9;28010:17;28003:47;28067:131;28193:4;28067:131;:::i;:::-;28059:139;;27957:248;;;:::o;28211:419::-;28377:4;28415:2;28404:9;28400:18;28392:26;;28464:9;28458:4;28454:20;28450:1;28439:9;28435:17;28428:47;28492:131;28618:4;28492:131;:::i;:::-;28484:139;;28382:248;;;:::o;28636:419::-;28802:4;28840:2;28829:9;28825:18;28817:26;;28889:9;28883:4;28879:20;28875:1;28864:9;28860:17;28853:47;28917:131;29043:4;28917:131;:::i;:::-;28909:139;;28807:248;;;:::o;29061:419::-;29227:4;29265:2;29254:9;29250:18;29242:26;;29314:9;29308:4;29304:20;29300:1;29289:9;29285:17;29278:47;29342:131;29468:4;29342:131;:::i;:::-;29334:139;;29232:248;;;:::o;29486:419::-;29652:4;29690:2;29679:9;29675:18;29667:26;;29739:9;29733:4;29729:20;29725:1;29714:9;29710:17;29703:47;29767:131;29893:4;29767:131;:::i;:::-;29759:139;;29657:248;;;:::o;29911:419::-;30077:4;30115:2;30104:9;30100:18;30092:26;;30164:9;30158:4;30154:20;30150:1;30139:9;30135:17;30128:47;30192:131;30318:4;30192:131;:::i;:::-;30184:139;;30082:248;;;:::o;30336:419::-;30502:4;30540:2;30529:9;30525:18;30517:26;;30589:9;30583:4;30579:20;30575:1;30564:9;30560:17;30553:47;30617:131;30743:4;30617:131;:::i;:::-;30609:139;;30507:248;;;:::o;30761:419::-;30927:4;30965:2;30954:9;30950:18;30942:26;;31014:9;31008:4;31004:20;31000:1;30989:9;30985:17;30978:47;31042:131;31168:4;31042:131;:::i;:::-;31034:139;;30932:248;;;:::o;31186:419::-;31352:4;31390:2;31379:9;31375:18;31367:26;;31439:9;31433:4;31429:20;31425:1;31414:9;31410:17;31403:47;31467:131;31593:4;31467:131;:::i;:::-;31459:139;;31357:248;;;:::o;31611:419::-;31777:4;31815:2;31804:9;31800:18;31792:26;;31864:9;31858:4;31854:20;31850:1;31839:9;31835:17;31828:47;31892:131;32018:4;31892:131;:::i;:::-;31884:139;;31782:248;;;:::o;32036:419::-;32202:4;32240:2;32229:9;32225:18;32217:26;;32289:9;32283:4;32279:20;32275:1;32264:9;32260:17;32253:47;32317:131;32443:4;32317:131;:::i;:::-;32309:139;;32207:248;;;:::o;32461:419::-;32627:4;32665:2;32654:9;32650:18;32642:26;;32714:9;32708:4;32704:20;32700:1;32689:9;32685:17;32678:47;32742:131;32868:4;32742:131;:::i;:::-;32734:139;;32632:248;;;:::o;32886:419::-;33052:4;33090:2;33079:9;33075:18;33067:26;;33139:9;33133:4;33129:20;33125:1;33114:9;33110:17;33103:47;33167:131;33293:4;33167:131;:::i;:::-;33159:139;;33057:248;;;:::o;33311:419::-;33477:4;33515:2;33504:9;33500:18;33492:26;;33564:9;33558:4;33554:20;33550:1;33539:9;33535:17;33528:47;33592:131;33718:4;33592:131;:::i;:::-;33584:139;;33482:248;;;:::o;33736:419::-;33902:4;33940:2;33929:9;33925:18;33917:26;;33989:9;33983:4;33979:20;33975:1;33964:9;33960:17;33953:47;34017:131;34143:4;34017:131;:::i;:::-;34009:139;;33907:248;;;:::o;34161:419::-;34327:4;34365:2;34354:9;34350:18;34342:26;;34414:9;34408:4;34404:20;34400:1;34389:9;34385:17;34378:47;34442:131;34568:4;34442:131;:::i;:::-;34434:139;;34332:248;;;:::o;34586:419::-;34752:4;34790:2;34779:9;34775:18;34767:26;;34839:9;34833:4;34829:20;34825:1;34814:9;34810:17;34803:47;34867:131;34993:4;34867:131;:::i;:::-;34859:139;;34757:248;;;:::o;35011:419::-;35177:4;35215:2;35204:9;35200:18;35192:26;;35264:9;35258:4;35254:20;35250:1;35239:9;35235:17;35228:47;35292:131;35418:4;35292:131;:::i;:::-;35284:139;;35182:248;;;:::o;35436:419::-;35602:4;35640:2;35629:9;35625:18;35617:26;;35689:9;35683:4;35679:20;35675:1;35664:9;35660:17;35653:47;35717:131;35843:4;35717:131;:::i;:::-;35709:139;;35607:248;;;:::o;35861:419::-;36027:4;36065:2;36054:9;36050:18;36042:26;;36114:9;36108:4;36104:20;36100:1;36089:9;36085:17;36078:47;36142:131;36268:4;36142:131;:::i;:::-;36134:139;;36032:248;;;:::o;36286:419::-;36452:4;36490:2;36479:9;36475:18;36467:26;;36539:9;36533:4;36529:20;36525:1;36514:9;36510:17;36503:47;36567:131;36693:4;36567:131;:::i;:::-;36559:139;;36457:248;;;:::o;36711:419::-;36877:4;36915:2;36904:9;36900:18;36892:26;;36964:9;36958:4;36954:20;36950:1;36939:9;36935:17;36928:47;36992:131;37118:4;36992:131;:::i;:::-;36984:139;;36882:248;;;:::o;37136:419::-;37302:4;37340:2;37329:9;37325:18;37317:26;;37389:9;37383:4;37379:20;37375:1;37364:9;37360:17;37353:47;37417:131;37543:4;37417:131;:::i;:::-;37409:139;;37307:248;;;:::o;37561:419::-;37727:4;37765:2;37754:9;37750:18;37742:26;;37814:9;37808:4;37804:20;37800:1;37789:9;37785:17;37778:47;37842:131;37968:4;37842:131;:::i;:::-;37834:139;;37732:248;;;:::o;37986:419::-;38152:4;38190:2;38179:9;38175:18;38167:26;;38239:9;38233:4;38229:20;38225:1;38214:9;38210:17;38203:47;38267:131;38393:4;38267:131;:::i;:::-;38259:139;;38157:248;;;:::o;38411:419::-;38577:4;38615:2;38604:9;38600:18;38592:26;;38664:9;38658:4;38654:20;38650:1;38639:9;38635:17;38628:47;38692:131;38818:4;38692:131;:::i;:::-;38684:139;;38582:248;;;:::o;38836:419::-;39002:4;39040:2;39029:9;39025:18;39017:26;;39089:9;39083:4;39079:20;39075:1;39064:9;39060:17;39053:47;39117:131;39243:4;39117:131;:::i;:::-;39109:139;;39007:248;;;:::o;39261:419::-;39427:4;39465:2;39454:9;39450:18;39442:26;;39514:9;39508:4;39504:20;39500:1;39489:9;39485:17;39478:47;39542:131;39668:4;39542:131;:::i;:::-;39534:139;;39432:248;;;:::o;39686:419::-;39852:4;39890:2;39879:9;39875:18;39867:26;;39939:9;39933:4;39929:20;39925:1;39914:9;39910:17;39903:47;39967:131;40093:4;39967:131;:::i;:::-;39959:139;;39857:248;;;:::o;40111:419::-;40277:4;40315:2;40304:9;40300:18;40292:26;;40364:9;40358:4;40354:20;40350:1;40339:9;40335:17;40328:47;40392:131;40518:4;40392:131;:::i;:::-;40384:139;;40282:248;;;:::o;40536:222::-;40629:4;40667:2;40656:9;40652:18;40644:26;;40680:71;40748:1;40737:9;40733:17;40724:6;40680:71;:::i;:::-;40634:124;;;;:::o;40764:218::-;40855:4;40893:2;40882:9;40878:18;40870:26;;40906:69;40972:1;40961:9;40957:17;40948:6;40906:69;:::i;:::-;40860:122;;;;:::o;40988:129::-;41022:6;41049:20;;:::i;:::-;41039:30;;41078:33;41106:4;41098:6;41078:33;:::i;:::-;41029:88;;;:::o;41123:75::-;41156:6;41189:2;41183:9;41173:19;;41163:35;:::o;41204:311::-;41281:4;41371:18;41363:6;41360:30;41357:2;;;41393:18;;:::i;:::-;41357:2;41443:4;41435:6;41431:17;41423:25;;41503:4;41497;41493:15;41485:23;;41286:229;;;:::o;41521:307::-;41582:4;41672:18;41664:6;41661:30;41658:2;;;41694:18;;:::i;:::-;41658:2;41732:29;41754:6;41732:29;:::i;:::-;41724:37;;41816:4;41810;41806:15;41798:23;;41587:241;;;:::o;41834:308::-;41896:4;41986:18;41978:6;41975:30;41972:2;;;42008:18;;:::i;:::-;41972:2;42046:29;42068:6;42046:29;:::i;:::-;42038:37;;42130:4;42124;42120:15;42112:23;;41901:241;;;:::o;42148:132::-;42215:4;42238:3;42230:11;;42268:4;42263:3;42259:14;42251:22;;42220:60;;;:::o;42286:141::-;42335:4;42358:3;42350:11;;42381:3;42378:1;42371:14;42415:4;42412:1;42402:18;42394:26;;42340:87;;;:::o;42433:114::-;42500:6;42534:5;42528:12;42518:22;;42507:40;;;:::o;42553:98::-;42604:6;42638:5;42632:12;42622:22;;42611:40;;;:::o;42657:99::-;42709:6;42743:5;42737:12;42727:22;;42716:40;;;:::o;42762:113::-;42832:4;42864;42859:3;42855:14;42847:22;;42837:38;;;:::o;42881:184::-;42980:11;43014:6;43009:3;43002:19;43054:4;43049:3;43045:14;43030:29;;42992:73;;;;:::o;43071:168::-;43154:11;43188:6;43183:3;43176:19;43228:4;43223:3;43219:14;43204:29;;43166:73;;;;:::o;43245:147::-;43346:11;43383:3;43368:18;;43358:34;;;;:::o;43398:169::-;43482:11;43516:6;43511:3;43504:19;43556:4;43551:3;43547:14;43532:29;;43494:73;;;;:::o;43573:148::-;43675:11;43712:3;43697:18;;43687:34;;;;:::o;43727:305::-;43767:3;43786:20;43804:1;43786:20;:::i;:::-;43781:25;;43820:20;43838:1;43820:20;:::i;:::-;43815:25;;43974:1;43906:66;43902:74;43899:1;43896:81;43893:2;;;43980:18;;:::i;:::-;43893:2;44024:1;44021;44017:9;44010:16;;43771:261;;;;:::o;44038:185::-;44078:1;44095:20;44113:1;44095:20;:::i;:::-;44090:25;;44129:20;44147:1;44129:20;:::i;:::-;44124:25;;44168:1;44158:2;;44173:18;;:::i;:::-;44158:2;44215:1;44212;44208:9;44203:14;;44080:143;;;;:::o;44229:348::-;44269:7;44292:20;44310:1;44292:20;:::i;:::-;44287:25;;44326:20;44344:1;44326:20;:::i;:::-;44321:25;;44514:1;44446:66;44442:74;44439:1;44436:81;44431:1;44424:9;44417:17;44413:105;44410:2;;;44521:18;;:::i;:::-;44410:2;44569:1;44566;44562:9;44551:20;;44277:300;;;;:::o;44583:191::-;44623:4;44643:20;44661:1;44643:20;:::i;:::-;44638:25;;44677:20;44695:1;44677:20;:::i;:::-;44672:25;;44716:1;44713;44710:8;44707:2;;;44721:18;;:::i;:::-;44707:2;44766:1;44763;44759:9;44751:17;;44628:146;;;;:::o;44780:188::-;44819:4;44839:19;44856:1;44839:19;:::i;:::-;44834:24;;44872:19;44889:1;44872:19;:::i;:::-;44867:24;;44910:1;44907;44904:8;44901:2;;;44915:18;;:::i;:::-;44901:2;44960:1;44957;44953:9;44945:17;;44824:144;;;;:::o;44974:96::-;45011:7;45040:24;45058:5;45040:24;:::i;:::-;45029:35;;45019:51;;;:::o;45076:90::-;45110:7;45153:5;45146:13;45139:21;45128:32;;45118:48;;;:::o;45172:149::-;45208:7;45248:66;45241:5;45237:78;45226:89;;45216:105;;;:::o;45327:126::-;45364:7;45404:42;45397:5;45393:54;45382:65;;45372:81;;;:::o;45459:77::-;45496:7;45525:5;45514:16;;45504:32;;;:::o;45542:101::-;45578:7;45618:18;45611:5;45607:30;45596:41;;45586:57;;;:::o;45649:86::-;45684:7;45724:4;45717:5;45713:16;45702:27;;45692:43;;;:::o;45741:154::-;45825:6;45820:3;45815;45802:30;45887:1;45878:6;45873:3;45869:16;45862:27;45792:103;;;:::o;45901:307::-;45969:1;45979:113;45993:6;45990:1;45987:13;45979:113;;;46078:1;46073:3;46069:11;46063:18;46059:1;46054:3;46050:11;46043:39;46015:2;46012:1;46008:10;46003:15;;45979:113;;;46110:6;46107:1;46104:13;46101:2;;;46190:1;46181:6;46176:3;46172:16;46165:27;46101:2;45950:258;;;;:::o;46214:320::-;46258:6;46295:1;46289:4;46285:12;46275:22;;46342:1;46336:4;46332:12;46363:18;46353:2;;46419:4;46411:6;46407:17;46397:27;;46353:2;46481;46473:6;46470:14;46450:18;46447:38;46444:2;;;46500:18;;:::i;:::-;46444:2;46265:269;;;;:::o;46540:281::-;46623:27;46645:4;46623:27;:::i;:::-;46615:6;46611:40;46753:6;46741:10;46738:22;46717:18;46705:10;46702:34;46699:62;46696:2;;;46764:18;;:::i;:::-;46696:2;46804:10;46800:2;46793:22;46583:238;;;:::o;46827:233::-;46866:3;46889:24;46907:5;46889:24;:::i;:::-;46880:33;;46935:66;46928:5;46925:77;46922:2;;;47005:18;;:::i;:::-;46922:2;47052:1;47045:5;47041:13;47034:20;;46870:190;;;:::o;47066:183::-;47104:3;47127:23;47144:5;47127:23;:::i;:::-;47118:32;;47172:18;47165:5;47162:29;47159:2;;;47194:18;;:::i;:::-;47159:2;47241:1;47234:5;47230:13;47223:20;;47108:141;;;:::o;47255:176::-;47287:1;47304:20;47322:1;47304:20;:::i;:::-;47299:25;;47338:20;47356:1;47338:20;:::i;:::-;47333:25;;47377:1;47367:2;;47382:18;;:::i;:::-;47367:2;47423:1;47420;47416:9;47411:14;;47289:142;;;;:::o;47437:180::-;47485:77;47482:1;47475:88;47582:4;47579:1;47572:15;47606:4;47603:1;47596:15;47623:180;47671:77;47668:1;47661:88;47768:4;47765:1;47758:15;47792:4;47789:1;47782:15;47809:180;47857:77;47854:1;47847:88;47954:4;47951:1;47944:15;47978:4;47975:1;47968:15;47995:180;48043:77;48040:1;48033:88;48140:4;48137:1;48130:15;48164:4;48161:1;48154:15;48181:102;48222:6;48273:2;48269:7;48264:2;48257:5;48253:14;48249:28;48239:38;;48229:54;;;:::o;48289:178::-;48429:30;48425:1;48417:6;48413:14;48406:54;48395:72;:::o;48473:174::-;48613:26;48609:1;48601:6;48597:14;48590:50;48579:68;:::o;48653:170::-;48793:22;48789:1;48781:6;48777:14;48770:46;48759:64;:::o;48829:237::-;48969:34;48965:1;48957:6;48953:14;48946:58;49038:20;49033:2;49025:6;49021:15;49014:45;48935:131;:::o;49072:169::-;49212:21;49208:1;49200:6;49196:14;49189:45;49178:63;:::o;49247:225::-;49387:34;49383:1;49375:6;49371:14;49364:58;49456:8;49451:2;49443:6;49439:15;49432:33;49353:119;:::o;49478:173::-;49618:25;49614:1;49606:6;49602:14;49595:49;49584:67;:::o;49657:224::-;49797:34;49793:1;49785:6;49781:14;49774:58;49866:7;49861:2;49853:6;49849:15;49842:32;49763:118;:::o;49887:178::-;50027:30;50023:1;50015:6;50011:14;50004:54;49993:72;:::o;50071:180::-;50211:32;50207:1;50199:6;50195:14;50188:56;50177:74;:::o;50257:223::-;50397:34;50393:1;50385:6;50381:14;50374:58;50466:6;50461:2;50453:6;50449:15;50442:31;50363:117;:::o;50486:175::-;50626:27;50622:1;50614:6;50610:14;50603:51;50592:69;:::o;50667:179::-;50807:31;50803:1;50795:6;50791:14;50784:55;50773:73;:::o;50852:167::-;50992:19;50988:1;50980:6;50976:14;50969:43;50958:61;:::o;51025:245::-;51165:34;51161:1;51153:6;51149:14;51142:58;51234:28;51229:2;51221:6;51217:15;51210:53;51131:139;:::o;51276:179::-;51416:31;51412:1;51404:6;51400:14;51393:55;51382:73;:::o;51461:231::-;51601:34;51597:1;51589:6;51585:14;51578:58;51670:14;51665:2;51657:6;51653:15;51646:39;51567:125;:::o;51698:243::-;51838:34;51834:1;51826:6;51822:14;51815:58;51907:26;51902:2;51894:6;51890:15;51883:51;51804:137;:::o;51947:229::-;52087:34;52083:1;52075:6;52071:14;52064:58;52156:12;52151:2;52143:6;52139:15;52132:37;52053:123;:::o;52182:228::-;52322:34;52318:1;52310:6;52306:14;52299:58;52391:11;52386:2;52378:6;52374:15;52367:36;52288:122;:::o;52416:221::-;52556:34;52552:1;52544:6;52540:14;52533:58;52625:4;52620:2;52612:6;52608:15;52601:29;52522:115;:::o;52643:169::-;52783:21;52779:1;52771:6;52767:14;52760:45;52749:63;:::o;52818:178::-;52958:30;52954:1;52946:6;52942:14;52935:54;52924:72;:::o;53002:182::-;53142:34;53138:1;53130:6;53126:14;53119:58;53108:76;:::o;53190:231::-;53330:34;53326:1;53318:6;53314:14;53307:58;53399:14;53394:2;53386:6;53382:15;53375:39;53296:125;:::o;53427:182::-;53567:34;53563:1;53555:6;53551:14;53544:58;53533:76;:::o;53615:177::-;53755:29;53751:1;53743:6;53739:14;53732:53;53721:71;:::o;53798:234::-;53938:34;53934:1;53926:6;53922:14;53915:58;54007:17;54002:2;53994:6;53990:15;53983:42;53904:128;:::o;54038:226::-;54178:34;54174:1;54166:6;54162:14;54155:58;54247:9;54242:2;54234:6;54230:15;54223:34;54144:120;:::o;54270:220::-;54410:34;54406:1;54398:6;54394:14;54387:58;54479:3;54474:2;54466:6;54462:15;54455:28;54376:114;:::o;54496:::-;54602:8;:::o;54616:236::-;54756:34;54752:1;54744:6;54740:14;54733:58;54825:19;54820:2;54812:6;54808:15;54801:44;54722:130;:::o;54858:169::-;54998:21;54994:1;54986:6;54982:14;54975:45;54964:63;:::o;55033:122::-;55106:24;55124:5;55106:24;:::i;:::-;55099:5;55096:35;55086:2;;55145:1;55142;55135:12;55086:2;55076:79;:::o;55161:116::-;55231:21;55246:5;55231:21;:::i;:::-;55224:5;55221:32;55211:2;;55267:1;55264;55257:12;55211:2;55201:76;:::o;55283:120::-;55355:23;55372:5;55355:23;:::i;:::-;55348:5;55345:34;55335:2;;55393:1;55390;55383:12;55335:2;55325:78;:::o;55409:122::-;55482:24;55500:5;55482:24;:::i;:::-;55475:5;55472:35;55462:2;;55521:1;55518;55511:12;55462:2;55452:79;:::o;55537:120::-;55609:23;55626:5;55609:23;:::i;:::-;55602:5;55599:34;55589:2;;55647:1;55644;55637:12;55589:2;55579:78;:::o;55663:118::-;55734:22;55750:5;55734:22;:::i;:::-;55727:5;55724:33;55714:2;;55771:1;55768;55761:12;55714:2;55704:77;:::o

Swarm Source

ipfs://268e37fb068244bc748e9d48f907874b6d617aeab90f7b7234284da46c281145
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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