ETH Price: $3,286.81 (+1.21%)
Gas: 1 Gwei

Token

CryptoCityBoys (CCB)
 

Overview

Max Total Supply

26 CCB

Holders

6

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 CCB
0x9da500968598f76373da4441713642e04fcba5ff
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:
Win

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-22
*/

// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/access/Ownable.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;
    }
}

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.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.
 */
 
pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
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/utils/Strings.sol

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/ERC721.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/IERC721Receiver.sol





pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/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.
 */


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


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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/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}.
 */




pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: contracts/win4.sol




pragma solidity ^0.8.0;



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

  string public baseURI;
  string public baseExtension = ".json";
  uint256 public cost = 0.04 ether;
  uint256 public maxSupply = 10000;
  uint256 public maxMintAmount = 25;
  bool public paused = false;
  mapping(address => bool) public whitelisted;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    mint(msg.sender, 25);
  }

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

  // public
  function mint(address _to, uint256 _mintAmount) public payable {
    uint256 supply = totalSupply();
    require(!paused);
    require(_mintAmount > 0);
    require(_mintAmount <= maxMintAmount);
    require(supply + _mintAmount <= maxSupply);

    if (msg.sender != owner()) {
        if(whitelisted[msg.sender] != true) {
          require(msg.value >= cost * _mintAmount);
        }
    }

    for (uint256 i = 1; i <= _mintAmount; i++) {
      _safeMint(_to, supply + i);
    }
  }

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

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

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

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

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

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

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

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
 
 function whitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = true;
  }
 
  function removeWhitelistUser(address _user) public onlyOwner {
    whitelisted[_user] = false;
  }

  function withdraw() public payable onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeWhitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000eac565b50668e1bc9bf040000600d55612710600e556019600f556000601060006101000a81548160ff0219169083151502179055503480156200009057600080fd5b5060405162005a5d38038062005a5d8339818101604052810190620000b6919062001011565b82828160009080519060200190620000d092919062000eac565b508060019080519060200190620000e992919062000eac565b5050506200010c620001006200013960201b60201c565b6200014160201b60201c565b6200011d816200020760201b60201c565b62000130336019620002b260201b60201c565b50505062001712565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002176200013960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200023d6200042160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d9062001387565b60405180910390fd5b80600b9080519060200190620002ae92919062000eac565b5050565b6000620002c46200044b60201b60201c565b9050601060009054906101000a900460ff1615620002e157600080fd5b60008211620002ef57600080fd5b600f54821115620002ff57600080fd5b600e5482826200031091906200143d565b11156200031c57600080fd5b6200032c6200042160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620003d75760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514620003d65781600d54620003c891906200149a565b341015620003d557600080fd5b5b5b6000600190505b8281116200041b5762000405848284620003f991906200143d565b6200045860201b60201c565b808062000412906200160c565b915050620003de565b50505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600880549050905090565b6200047a8282604051806020016040528060008152506200047e60201b60201c565b5050565b620004908383620004ec60201b60201c565b620004a56000848484620006d260201b60201c565b620004e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004de90620012ff565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200055f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005569062001365565b60405180910390fd5b62000570816200088c60201b60201c565b15620005b3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005aa9062001321565b60405180910390fd5b620005c760008383620008f860201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200061991906200143d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620007008473ffffffffffffffffffffffffffffffffffffffff1662000a3f60201b62001c8b1760201c565b156200087f578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620007326200013960201b60201c565b8786866040518563ffffffff1660e01b8152600401620007569493929190620012ab565b602060405180830381600087803b1580156200077157600080fd5b505af1925050508015620007a557506040513d601f19601f82011682018060405250810190620007a2919062000fe5565b60015b6200082e573d8060008114620007d8576040519150601f19603f3d011682016040523d82523d6000602084013e620007dd565b606091505b5060008151141562000826576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200081d90620012ff565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000884565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200091083838362000a5260201b62001c9e1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200095d57620009578162000a5760201b60201c565b620009a5565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009a457620009a3838262000aa060201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009f257620009ec8162000c1d60201b60201c565b62000a3a565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000a395762000a38828262000d6560201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000aba8462000df160201b620014a61760201c565b62000ac69190620014fb565b905060006007600084815260200190815260200160002054905081811462000bac576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000c339190620014fb565b905060006009600084815260200190815260200160002054905060006008838154811062000c8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806008838154811062000cd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000d49577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000d7d8362000df160201b620014a61760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000e65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5c9062001343565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000eba90620015d6565b90600052602060002090601f01602090048101928262000ede576000855562000f2a565b82601f1062000ef957805160ff191683800117855562000f2a565b8280016001018555821562000f2a579182015b8281111562000f2957825182559160200191906001019062000f0c565b5b50905062000f39919062000f3d565b5090565b5b8082111562000f5857600081600090555060010162000f3e565b5090565b600062000f7362000f6d84620013dd565b620013a9565b90508281526020810184848401111562000f8c57600080fd5b62000f99848285620015a0565b509392505050565b60008151905062000fb281620016f8565b92915050565b600082601f83011262000fca57600080fd5b815162000fdc84826020860162000f5c565b91505092915050565b60006020828403121562000ff857600080fd5b6000620010088482850162000fa1565b91505092915050565b6000806000606084860312156200102757600080fd5b600084015167ffffffffffffffff8111156200104257600080fd5b620010508682870162000fb8565b935050602084015167ffffffffffffffff8111156200106e57600080fd5b6200107c8682870162000fb8565b925050604084015167ffffffffffffffff8111156200109a57600080fd5b620010a88682870162000fb8565b9150509250925092565b620010bd8162001536565b82525050565b6000620010d08262001410565b620010dc81856200141b565b9350620010ee818560208601620015a0565b620010f981620016e7565b840191505092915050565b6000620011136032836200142c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006200117b601c836200142c565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000620011bd602a836200142c565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000620012256020836200142c565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000620012676020836200142c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b620012a58162001596565b82525050565b6000608082019050620012c26000830187620010b2565b620012d16020830186620010b2565b620012e060408301856200129a565b8181036060830152620012f48184620010c3565b905095945050505050565b600060208201905081810360008301526200131a8162001104565b9050919050565b600060208201905081810360008301526200133c816200116c565b9050919050565b600060208201905081810360008301526200135e81620011ae565b9050919050565b60006020820190508181036000830152620013808162001216565b9050919050565b60006020820190508181036000830152620013a28162001258565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620013d357620013d2620016b8565b5b8060405250919050565b600067ffffffffffffffff821115620013fb57620013fa620016b8565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006200144a8262001596565b9150620014578362001596565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200148f576200148e6200165a565b5b828201905092915050565b6000620014a78262001596565b9150620014b48362001596565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620014f057620014ef6200165a565b5b828202905092915050565b6000620015088262001596565b9150620015158362001596565b9250828210156200152b576200152a6200165a565b5b828203905092915050565b6000620015438262001576565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b83811015620015c0578082015181840152602081019050620015a3565b83811115620015d0576000848401525b50505050565b60006002820490506001821680620015ef57607f821691505b6020821081141562001606576200160562001689565b5b50919050565b6000620016198262001596565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200164f576200164e6200165a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b62001703816200154a565b81146200170f57600080fd5b50565b61433b80620017226000396000f3fe60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131cd565b610876565b6040516102489190613bab565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131a4565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c9190613bc6565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190613260565b610a1b565b6040516102d99190613b22565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613168565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d9190613e28565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b6040516103589190613e28565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b6040516103839190613e28565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613062565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613168565b610c31565b6040516103e99190613e28565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612ffd565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a9190613168565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190613062565b610faf565b005b34801561047657600080fd5b50610491600480360381019061048c9190612ffd565b610fcf565b60405161049e9190613b89565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613260565b6110c9565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612ffd565b61114f565b005b34801561050557600080fd5b50610520600480360381019061051b9190613260565b611226565b60405161052d9190613e28565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061321f565b6112bd565b005b34801561056b57600080fd5b50610574611353565b6040516105819190613bab565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613260565b611366565b6040516105be9190613b22565b60405180910390f35b3480156105d357600080fd5b506105dc611418565b6040516105e99190613bc6565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190612ffd565b6114a6565b6040516106269190613e28565b60405180910390f35b34801561063b57600080fd5b5061064461155e565b005b34801561065257600080fd5b5061066d60048036038101906106689190613260565b6115e6565b005b34801561067b57600080fd5b5061068461166c565b6040516106919190613b22565b60405180910390f35b3480156106a657600080fd5b506106af611696565b6040516106bc9190613bc6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061312c565b611728565b005b3480156106fa57600080fd5b50610715600480360381019061071091906130b1565b6118a9565b005b34801561072357600080fd5b5061072c61190b565b6040516107399190613bc6565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613260565b611999565b6040516107769190613bc6565b60405180910390f35b34801561078b57600080fd5b50610794611a43565b6040516107a19190613e28565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190612ffd565b611a49565b6040516107de9190613bab565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061321f565b611a69565b005b34801561081c57600080fd5b5061083760048036038101906108329190613026565b611aff565b6040516108449190613bab565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190612ffd565b611b93565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611ca3565b5b9050919050565b6108f8611d85565b73ffffffffffffffffffffffffffffffffffffffff1661091661166c565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390613d68565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890614130565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490614130565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611d8d565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90613d48565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab82611366565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390613dc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611d85565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611d85565b611aff565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba090613cc8565b60405180910390fd5b610bb38383611df9565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611d85565b82611eb2565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613de8565b60405180910390fd5b610c2c838383611f90565b505050565b6000610c3c836114a6565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613be8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611d85565b73ffffffffffffffffffffffffffffffffffffffff16610cfc61166c565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613d68565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611d85565b73ffffffffffffffffffffffffffffffffffffffff16610dd361166c565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613d68565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613f65565b1115610ec557600080fd5b610ecd61166c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f735760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f725781600d54610f659190613fec565b341015610f7157600080fd5b5b5b6000600190505b828111610fa957610f96848284610f919190613f65565b6121ec565b8080610fa190614162565b915050610f7a565b50505050565b610fca838383604051806020016040528060008152506118a9565b505050565b60606000610fdc836114a6565b905060008167ffffffffffffffff811115611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561104e5781602001602082028036833780820191505090505b50905060005b828110156110be576110668582610c31565b82828151811061109f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110b690614162565b915050611054565b508092505050919050565b6110d1611d85565b73ffffffffffffffffffffffffffffffffffffffff166110ef61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613d68565b60405180910390fd5b80600d8190555050565b611157611d85565b73ffffffffffffffffffffffffffffffffffffffff1661117561166c565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613d68565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611230610bbe565b8210611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613e08565b60405180910390fd5b600882815481106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6112c5611d85565b73ffffffffffffffffffffffffffffffffffffffff166112e361166c565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613d68565b60405180910390fd5b80600b908051906020019061134f929190612e21565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d08565b60405180910390fd5b80915050919050565b600b805461142590614130565b80601f016020809104026020016040519081016040528092919081815260200182805461145190614130565b801561149e5780601f106114735761010080835404028352916020019161149e565b820191906000526020600020905b81548152906001019060200180831161148157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613ce8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611566611d85565b73ffffffffffffffffffffffffffffffffffffffff1661158461166c565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613d68565b60405180910390fd5b6115e4600061220a565b565b6115ee611d85565b73ffffffffffffffffffffffffffffffffffffffff1661160c61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613d68565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116a590614130565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190614130565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b611730611d85565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613c88565b60405180910390fd5b80600560006117ab611d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611858611d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161189d9190613bab565b60405180910390a35050565b6118ba6118b4611d85565b83611eb2565b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613de8565b60405180910390fd5b611905848484846122d0565b50505050565b600c805461191890614130565b80601f016020809104026020016040519081016040528092919081815260200182805461194490614130565b80156119915780601f1061196657610100808354040283529160200191611991565b820191906000526020600020905b81548152906001019060200180831161197457829003601f168201915b505050505081565b60606119a482611d8d565b6119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613da8565b60405180910390fd5b60006119ed61232c565b90506000815111611a0d5760405180602001604052806000815250611a3b565b80611a17846123be565b600c604051602001611a2b93929190613af1565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611a71611d85565b73ffffffffffffffffffffffffffffffffffffffff16611a8f61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613d68565b60405180910390fd5b80600c9080519060200190611afb929190612e21565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b9b611d85565b73ffffffffffffffffffffffffffffffffffffffff16611bb961166c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690613d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690613c28565b60405180910390fd5b611c888161220a565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d6e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d7e5750611d7d8261256b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e6c83611366565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ebd82611d8d565b611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613ca8565b60405180910390fd5b6000611f0783611366565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7657508373ffffffffffffffffffffffffffffffffffffffff16611f5e84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f875750611f868185611aff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb082611366565b73ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613c68565b60405180910390fd5b6120818383836125d5565b61208c600082611df9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120dc9190614046565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121339190613f65565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6122068282604051806020016040528060008152506126e9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122db848484611f90565b6122e784848484612744565b612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90613c08565b60405180910390fd5b50505050565b6060600b805461233b90614130565b80601f016020809104026020016040519081016040528092919081815260200182805461236790614130565b80156123b45780601f10612389576101008083540402835291602001916123b4565b820191906000526020600020905b81548152906001019060200180831161239757829003601f168201915b5050505050905090565b60606000821415612406576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612566565b600082905060005b6000821461243857808061242190614162565b915050600a826124319190613fbb565b915061240e565b60008167ffffffffffffffff81111561247a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124ac5781602001600182028036833780820191505090505b5090505b6000851461255f576001826124c59190614046565b9150600a856124d491906141ab565b60306124e09190613f65565b60f81b81838151811061251c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125589190613fbb565b94506124b0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125e0838383611c9e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126235761261e816128db565b612662565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612661576126608382612924565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a5576126a081612a91565b6126e4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126e3576126e28282612bd4565b5b5b505050565b6126f38383612c53565b6127006000848484612744565b61273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690613c08565b60405180910390fd5b505050565b60006127658473ffffffffffffffffffffffffffffffffffffffff16611c8b565b156128ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261278e611d85565b8786866040518563ffffffff1660e01b81526004016127b09493929190613b3d565b602060405180830381600087803b1580156127ca57600080fd5b505af19250505080156127fb57506040513d601f19601f820116820180604052508101906127f891906131f6565b60015b61287e573d806000811461282b576040519150601f19603f3d011682016040523d82523d6000602084013e612830565b606091505b50600081511415612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90613c08565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d3565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612931846114a6565b61293b9190614046565b9050600060076000848152602001908152602001600020549050818114612a20576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aa59190614046565b9050600060096000848152602001908152602001600020549050600060088381548110612afb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612bdf836114a6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba90613d28565b60405180910390fd5b612ccc81611d8d565b15612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613c48565b60405180910390fd5b612d18600083836125d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d689190613f65565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e2d90614130565b90600052602060002090601f016020900481019282612e4f5760008555612e96565b82601f10612e6857805160ff1916838001178555612e96565b82800160010185558215612e96579182015b82811115612e95578251825591602001919060010190612e7a565b5b509050612ea39190612ea7565b5090565b5b80821115612ec0576000816000905550600101612ea8565b5090565b6000612ed7612ed284613e74565b613e43565b905082815260208101848484011115612eef57600080fd5b612efa8482856140ee565b509392505050565b6000612f15612f1084613ea4565b613e43565b905082815260208101848484011115612f2d57600080fd5b612f388482856140ee565b509392505050565b600081359050612f4f816142a9565b92915050565b600081359050612f64816142c0565b92915050565b600081359050612f79816142d7565b92915050565b600081519050612f8e816142d7565b92915050565b600082601f830112612fa557600080fd5b8135612fb5848260208601612ec4565b91505092915050565b600082601f830112612fcf57600080fd5b8135612fdf848260208601612f02565b91505092915050565b600081359050612ff7816142ee565b92915050565b60006020828403121561300f57600080fd5b600061301d84828501612f40565b91505092915050565b6000806040838503121561303957600080fd5b600061304785828601612f40565b925050602061305885828601612f40565b9150509250929050565b60008060006060848603121561307757600080fd5b600061308586828701612f40565b935050602061309686828701612f40565b92505060406130a786828701612fe8565b9150509250925092565b600080600080608085870312156130c757600080fd5b60006130d587828801612f40565b94505060206130e687828801612f40565b93505060406130f787828801612fe8565b925050606085013567ffffffffffffffff81111561311457600080fd5b61312087828801612f94565b91505092959194509250565b6000806040838503121561313f57600080fd5b600061314d85828601612f40565b925050602061315e85828601612f55565b9150509250929050565b6000806040838503121561317b57600080fd5b600061318985828601612f40565b925050602061319a85828601612fe8565b9150509250929050565b6000602082840312156131b657600080fd5b60006131c484828501612f55565b91505092915050565b6000602082840312156131df57600080fd5b60006131ed84828501612f6a565b91505092915050565b60006020828403121561320857600080fd5b600061321684828501612f7f565b91505092915050565b60006020828403121561323157600080fd5b600082013567ffffffffffffffff81111561324b57600080fd5b61325784828501612fbe565b91505092915050565b60006020828403121561327257600080fd5b600061328084828501612fe8565b91505092915050565b60006132958383613ad3565b60208301905092915050565b6132aa8161407a565b82525050565b60006132bb82613ef9565b6132c58185613f27565b93506132d083613ed4565b8060005b838110156133015781516132e88882613289565b97506132f383613f1a565b9250506001810190506132d4565b5085935050505092915050565b6133178161408c565b82525050565b600061332882613f04565b6133328185613f38565b93506133428185602086016140fd565b61334b81614298565b840191505092915050565b600061336182613f0f565b61336b8185613f49565b935061337b8185602086016140fd565b61338481614298565b840191505092915050565b600061339a82613f0f565b6133a48185613f5a565b93506133b48185602086016140fd565b80840191505092915050565b600081546133cd81614130565b6133d78186613f5a565b945060018216600081146133f2576001811461340357613436565b60ff19831686528186019350613436565b61340c85613ee4565b60005b8381101561342e5781548189015260018201915060208101905061340f565b838801955050505b50505092915050565b600061344c602b83613f49565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134b2603283613f49565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613518602683613f49565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061357e601c83613f49565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135be602483613f49565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613624601983613f49565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613664602c83613f49565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006136ca603883613f49565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613730602a83613f49565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613796602983613f49565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137fc602083613f49565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061383c602c83613f49565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138a2602083613f49565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006138e2602983613f49565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613948602f83613f49565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006139ae602183613f49565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a14603183613f49565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a7a602c83613f49565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613adc816140e4565b82525050565b613aeb816140e4565b82525050565b6000613afd828661338f565b9150613b09828561338f565b9150613b1582846133c0565b9150819050949350505050565b6000602082019050613b3760008301846132a1565b92915050565b6000608082019050613b5260008301876132a1565b613b5f60208301866132a1565b613b6c6040830185613ae2565b8181036060830152613b7e818461331d565b905095945050505050565b60006020820190508181036000830152613ba381846132b0565b905092915050565b6000602082019050613bc0600083018461330e565b92915050565b60006020820190508181036000830152613be08184613356565b905092915050565b60006020820190508181036000830152613c018161343f565b9050919050565b60006020820190508181036000830152613c21816134a5565b9050919050565b60006020820190508181036000830152613c418161350b565b9050919050565b60006020820190508181036000830152613c6181613571565b9050919050565b60006020820190508181036000830152613c81816135b1565b9050919050565b60006020820190508181036000830152613ca181613617565b9050919050565b60006020820190508181036000830152613cc181613657565b9050919050565b60006020820190508181036000830152613ce1816136bd565b9050919050565b60006020820190508181036000830152613d0181613723565b9050919050565b60006020820190508181036000830152613d2181613789565b9050919050565b60006020820190508181036000830152613d41816137ef565b9050919050565b60006020820190508181036000830152613d618161382f565b9050919050565b60006020820190508181036000830152613d8181613895565b9050919050565b60006020820190508181036000830152613da1816138d5565b9050919050565b60006020820190508181036000830152613dc18161393b565b9050919050565b60006020820190508181036000830152613de1816139a1565b9050919050565b60006020820190508181036000830152613e0181613a07565b9050919050565b60006020820190508181036000830152613e2181613a6d565b9050919050565b6000602082019050613e3d6000830184613ae2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e6a57613e69614269565b5b8060405250919050565b600067ffffffffffffffff821115613e8f57613e8e614269565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613ebf57613ebe614269565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f70826140e4565b9150613f7b836140e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fb057613faf6141dc565b5b828201905092915050565b6000613fc6826140e4565b9150613fd1836140e4565b925082613fe157613fe061420b565b5b828204905092915050565b6000613ff7826140e4565b9150614002836140e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561403b5761403a6141dc565b5b828202905092915050565b6000614051826140e4565b915061405c836140e4565b92508282101561406f5761406e6141dc565b5b828203905092915050565b6000614085826140c4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561411b578082015181840152602081019050614100565b8381111561412a576000848401525b50505050565b6000600282049050600182168061414857607f821691505b6020821081141561415c5761415b61423a565b5b50919050565b600061416d826140e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a05761419f6141dc565b5b600182019050919050565b60006141b6826140e4565b91506141c1836140e4565b9250826141d1576141d061420b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6142b28161407a565b81146142bd57600080fd5b50565b6142c98161408c565b81146142d457600080fd5b50565b6142e081614098565b81146142eb57600080fd5b50565b6142f7816140e4565b811461430257600080fd5b5056fea26469706673582212204c8b907bcaf3ec5f2a65da219f0d4ec0bd2ab6e5665bd245888d5dce6adc00d864736f6c63430008000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e43727970746f43697479426f7973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343434200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806355f804b311610118578063a22cb465116100a0578063d5abeb011161006f578063d5abeb011461077f578063d936547e146107aa578063da3ef23f146107e7578063e985e9c514610810578063f2fde38b1461084d5761020f565b8063a22cb465146106c5578063b88d4fde146106ee578063c668286214610717578063c87b56dd146107425761020f565b806370a08231116100e757806370a08231146105f2578063715018a61461062f5780637f00c7a6146106465780638da5cb5b1461066f57806395d89b411461069a5761020f565b806355f804b3146105365780635c975abb1461055f5780636352211e1461058a5780636c0360eb146105c75761020f565b80632f745c591161019b57806342842e0e1161016a57806342842e0e14610441578063438b63001461046a57806344a0d68a146104a75780634a4c560d146104d05780634f6ccce7146104f95761020f565b80632f745c59146103b557806330cc7ae0146103f25780633ccfd60b1461041b57806340c10f19146104255761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806313faede61461030b57806318160ddd14610336578063239c70ae1461036157806323b872dd1461038c5761020f565b806301ffc9a71461021457806302329a291461025157806306fdde031461027a578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906131cd565b610876565b6040516102489190613bab565b60405180910390f35b34801561025d57600080fd5b50610278600480360381019061027391906131a4565b6108f0565b005b34801561028657600080fd5b5061028f610989565b60405161029c9190613bc6565b60405180910390f35b3480156102b157600080fd5b506102cc60048036038101906102c79190613260565b610a1b565b6040516102d99190613b22565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613168565b610aa0565b005b34801561031757600080fd5b50610320610bb8565b60405161032d9190613e28565b60405180910390f35b34801561034257600080fd5b5061034b610bbe565b6040516103589190613e28565b60405180910390f35b34801561036d57600080fd5b50610376610bcb565b6040516103839190613e28565b60405180910390f35b34801561039857600080fd5b506103b360048036038101906103ae9190613062565b610bd1565b005b3480156103c157600080fd5b506103dc60048036038101906103d79190613168565b610c31565b6040516103e99190613e28565b60405180910390f35b3480156103fe57600080fd5b5061041960048036038101906104149190612ffd565b610cd6565b005b610423610dad565b005b61043f600480360381019061043a9190613168565b610e69565b005b34801561044d57600080fd5b5061046860048036038101906104639190613062565b610faf565b005b34801561047657600080fd5b50610491600480360381019061048c9190612ffd565b610fcf565b60405161049e9190613b89565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c99190613260565b6110c9565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612ffd565b61114f565b005b34801561050557600080fd5b50610520600480360381019061051b9190613260565b611226565b60405161052d9190613e28565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061321f565b6112bd565b005b34801561056b57600080fd5b50610574611353565b6040516105819190613bab565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac9190613260565b611366565b6040516105be9190613b22565b60405180910390f35b3480156105d357600080fd5b506105dc611418565b6040516105e99190613bc6565b60405180910390f35b3480156105fe57600080fd5b5061061960048036038101906106149190612ffd565b6114a6565b6040516106269190613e28565b60405180910390f35b34801561063b57600080fd5b5061064461155e565b005b34801561065257600080fd5b5061066d60048036038101906106689190613260565b6115e6565b005b34801561067b57600080fd5b5061068461166c565b6040516106919190613b22565b60405180910390f35b3480156106a657600080fd5b506106af611696565b6040516106bc9190613bc6565b60405180910390f35b3480156106d157600080fd5b506106ec60048036038101906106e7919061312c565b611728565b005b3480156106fa57600080fd5b50610715600480360381019061071091906130b1565b6118a9565b005b34801561072357600080fd5b5061072c61190b565b6040516107399190613bc6565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190613260565b611999565b6040516107769190613bc6565b60405180910390f35b34801561078b57600080fd5b50610794611a43565b6040516107a19190613e28565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc9190612ffd565b611a49565b6040516107de9190613bab565b60405180910390f35b3480156107f357600080fd5b5061080e6004803603810190610809919061321f565b611a69565b005b34801561081c57600080fd5b5061083760048036038101906108329190613026565b611aff565b6040516108449190613bab565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190612ffd565b611b93565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108e957506108e882611ca3565b5b9050919050565b6108f8611d85565b73ffffffffffffffffffffffffffffffffffffffff1661091661166c565b73ffffffffffffffffffffffffffffffffffffffff161461096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096390613d68565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b60606000805461099890614130565b80601f01602080910402602001604051908101604052809291908181526020018280546109c490614130565b8015610a115780601f106109e657610100808354040283529160200191610a11565b820191906000526020600020905b8154815290600101906020018083116109f457829003601f168201915b5050505050905090565b6000610a2682611d8d565b610a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5c90613d48565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610aab82611366565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390613dc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b3b611d85565b73ffffffffffffffffffffffffffffffffffffffff161480610b6a5750610b6981610b64611d85565b611aff565b5b610ba9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba090613cc8565b60405180910390fd5b610bb38383611df9565b505050565b600d5481565b6000600880549050905090565b600f5481565b610be2610bdc611d85565b82611eb2565b610c21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1890613de8565b60405180910390fd5b610c2c838383611f90565b505050565b6000610c3c836114a6565b8210610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613be8565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cde611d85565b73ffffffffffffffffffffffffffffffffffffffff16610cfc61166c565b73ffffffffffffffffffffffffffffffffffffffff1614610d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4990613d68565b60405180910390fd5b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610db5611d85565b73ffffffffffffffffffffffffffffffffffffffff16610dd361166c565b73ffffffffffffffffffffffffffffffffffffffff1614610e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2090613d68565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610e6757600080fd5b565b6000610e73610bbe565b9050601060009054906101000a900460ff1615610e8f57600080fd5b60008211610e9c57600080fd5b600f54821115610eab57600080fd5b600e548282610eba9190613f65565b1115610ec557600080fd5b610ecd61166c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f735760011515601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610f725781600d54610f659190613fec565b341015610f7157600080fd5b5b5b6000600190505b828111610fa957610f96848284610f919190613f65565b6121ec565b8080610fa190614162565b915050610f7a565b50505050565b610fca838383604051806020016040528060008152506118a9565b505050565b60606000610fdc836114a6565b905060008167ffffffffffffffff811115611020577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561104e5781602001602082028036833780820191505090505b50905060005b828110156110be576110668582610c31565b82828151811061109f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110b690614162565b915050611054565b508092505050919050565b6110d1611d85565b73ffffffffffffffffffffffffffffffffffffffff166110ef61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90613d68565b60405180910390fd5b80600d8190555050565b611157611d85565b73ffffffffffffffffffffffffffffffffffffffff1661117561166c565b73ffffffffffffffffffffffffffffffffffffffff16146111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c290613d68565b60405180910390fd5b6001601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611230610bbe565b8210611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613e08565b60405180910390fd5b600882815481106112ab577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6112c5611d85565b73ffffffffffffffffffffffffffffffffffffffff166112e361166c565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613d68565b60405180910390fd5b80600b908051906020019061134f929190612e21565b5050565b601060009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561140f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140690613d08565b60405180910390fd5b80915050919050565b600b805461142590614130565b80601f016020809104026020016040519081016040528092919081815260200182805461145190614130565b801561149e5780601f106114735761010080835404028352916020019161149e565b820191906000526020600020905b81548152906001019060200180831161148157829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613ce8565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611566611d85565b73ffffffffffffffffffffffffffffffffffffffff1661158461166c565b73ffffffffffffffffffffffffffffffffffffffff16146115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d190613d68565b60405180910390fd5b6115e4600061220a565b565b6115ee611d85565b73ffffffffffffffffffffffffffffffffffffffff1661160c61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990613d68565b60405180910390fd5b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546116a590614130565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190614130565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b611730611d85565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561179e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179590613c88565b60405180910390fd5b80600560006117ab611d85565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611858611d85565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161189d9190613bab565b60405180910390a35050565b6118ba6118b4611d85565b83611eb2565b6118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090613de8565b60405180910390fd5b611905848484846122d0565b50505050565b600c805461191890614130565b80601f016020809104026020016040519081016040528092919081815260200182805461194490614130565b80156119915780601f1061196657610100808354040283529160200191611991565b820191906000526020600020905b81548152906001019060200180831161197457829003601f168201915b505050505081565b60606119a482611d8d565b6119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613da8565b60405180910390fd5b60006119ed61232c565b90506000815111611a0d5760405180602001604052806000815250611a3b565b80611a17846123be565b600c604051602001611a2b93929190613af1565b6040516020818303038152906040525b915050919050565b600e5481565b60116020528060005260406000206000915054906101000a900460ff1681565b611a71611d85565b73ffffffffffffffffffffffffffffffffffffffff16611a8f61166c565b73ffffffffffffffffffffffffffffffffffffffff1614611ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adc90613d68565b60405180910390fd5b80600c9080519060200190611afb929190612e21565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611b9b611d85565b73ffffffffffffffffffffffffffffffffffffffff16611bb961166c565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690613d68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690613c28565b60405180910390fd5b611c888161220a565b50565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d6e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d7e5750611d7d8261256b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e6c83611366565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611ebd82611d8d565b611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613ca8565b60405180910390fd5b6000611f0783611366565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f7657508373ffffffffffffffffffffffffffffffffffffffff16611f5e84610a1b565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f875750611f868185611aff565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611fb082611366565b73ffffffffffffffffffffffffffffffffffffffff1614612006576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffd90613d88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90613c68565b60405180910390fd5b6120818383836125d5565b61208c600082611df9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120dc9190614046565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121339190613f65565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6122068282604051806020016040528060008152506126e9565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6122db848484611f90565b6122e784848484612744565b612326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231d90613c08565b60405180910390fd5b50505050565b6060600b805461233b90614130565b80601f016020809104026020016040519081016040528092919081815260200182805461236790614130565b80156123b45780601f10612389576101008083540402835291602001916123b4565b820191906000526020600020905b81548152906001019060200180831161239757829003601f168201915b5050505050905090565b60606000821415612406576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612566565b600082905060005b6000821461243857808061242190614162565b915050600a826124319190613fbb565b915061240e565b60008167ffffffffffffffff81111561247a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156124ac5781602001600182028036833780820191505090505b5090505b6000851461255f576001826124c59190614046565b9150600a856124d491906141ab565b60306124e09190613f65565b60f81b81838151811061251c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856125589190613fbb565b94506124b0565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125e0838383611c9e565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126235761261e816128db565b612662565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612661576126608382612924565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126a5576126a081612a91565b6126e4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126e3576126e28282612bd4565b5b5b505050565b6126f38383612c53565b6127006000848484612744565b61273f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273690613c08565b60405180910390fd5b505050565b60006127658473ffffffffffffffffffffffffffffffffffffffff16611c8b565b156128ce578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261278e611d85565b8786866040518563ffffffff1660e01b81526004016127b09493929190613b3d565b602060405180830381600087803b1580156127ca57600080fd5b505af19250505080156127fb57506040513d601f19601f820116820180604052508101906127f891906131f6565b60015b61287e573d806000811461282b576040519150601f19603f3d011682016040523d82523d6000602084013e612830565b606091505b50600081511415612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286d90613c08565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d3565b600190505b949350505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612931846114a6565b61293b9190614046565b9050600060076000848152602001908152602001600020549050818114612a20576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612aa59190614046565b9050600060096000848152602001908152602001600020549050600060088381548110612afb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612b43577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612bb8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612bdf836114a6565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cba90613d28565b60405180910390fd5b612ccc81611d8d565b15612d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0390613c48565b60405180910390fd5b612d18600083836125d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612d689190613f65565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612e2d90614130565b90600052602060002090601f016020900481019282612e4f5760008555612e96565b82601f10612e6857805160ff1916838001178555612e96565b82800160010185558215612e96579182015b82811115612e95578251825591602001919060010190612e7a565b5b509050612ea39190612ea7565b5090565b5b80821115612ec0576000816000905550600101612ea8565b5090565b6000612ed7612ed284613e74565b613e43565b905082815260208101848484011115612eef57600080fd5b612efa8482856140ee565b509392505050565b6000612f15612f1084613ea4565b613e43565b905082815260208101848484011115612f2d57600080fd5b612f388482856140ee565b509392505050565b600081359050612f4f816142a9565b92915050565b600081359050612f64816142c0565b92915050565b600081359050612f79816142d7565b92915050565b600081519050612f8e816142d7565b92915050565b600082601f830112612fa557600080fd5b8135612fb5848260208601612ec4565b91505092915050565b600082601f830112612fcf57600080fd5b8135612fdf848260208601612f02565b91505092915050565b600081359050612ff7816142ee565b92915050565b60006020828403121561300f57600080fd5b600061301d84828501612f40565b91505092915050565b6000806040838503121561303957600080fd5b600061304785828601612f40565b925050602061305885828601612f40565b9150509250929050565b60008060006060848603121561307757600080fd5b600061308586828701612f40565b935050602061309686828701612f40565b92505060406130a786828701612fe8565b9150509250925092565b600080600080608085870312156130c757600080fd5b60006130d587828801612f40565b94505060206130e687828801612f40565b93505060406130f787828801612fe8565b925050606085013567ffffffffffffffff81111561311457600080fd5b61312087828801612f94565b91505092959194509250565b6000806040838503121561313f57600080fd5b600061314d85828601612f40565b925050602061315e85828601612f55565b9150509250929050565b6000806040838503121561317b57600080fd5b600061318985828601612f40565b925050602061319a85828601612fe8565b9150509250929050565b6000602082840312156131b657600080fd5b60006131c484828501612f55565b91505092915050565b6000602082840312156131df57600080fd5b60006131ed84828501612f6a565b91505092915050565b60006020828403121561320857600080fd5b600061321684828501612f7f565b91505092915050565b60006020828403121561323157600080fd5b600082013567ffffffffffffffff81111561324b57600080fd5b61325784828501612fbe565b91505092915050565b60006020828403121561327257600080fd5b600061328084828501612fe8565b91505092915050565b60006132958383613ad3565b60208301905092915050565b6132aa8161407a565b82525050565b60006132bb82613ef9565b6132c58185613f27565b93506132d083613ed4565b8060005b838110156133015781516132e88882613289565b97506132f383613f1a565b9250506001810190506132d4565b5085935050505092915050565b6133178161408c565b82525050565b600061332882613f04565b6133328185613f38565b93506133428185602086016140fd565b61334b81614298565b840191505092915050565b600061336182613f0f565b61336b8185613f49565b935061337b8185602086016140fd565b61338481614298565b840191505092915050565b600061339a82613f0f565b6133a48185613f5a565b93506133b48185602086016140fd565b80840191505092915050565b600081546133cd81614130565b6133d78186613f5a565b945060018216600081146133f2576001811461340357613436565b60ff19831686528186019350613436565b61340c85613ee4565b60005b8381101561342e5781548189015260018201915060208101905061340f565b838801955050505b50505092915050565b600061344c602b83613f49565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b60006134b2603283613f49565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000613518602683613f49565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061357e601c83613f49565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b60006135be602483613f49565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613624601983613f49565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000613664602c83613f49565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006136ca603883613f49565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613730602a83613f49565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613796602983613f49565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006137fc602083613f49565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061383c602c83613f49565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006138a2602083613f49565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006138e2602983613f49565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613948602f83613f49565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006139ae602183613f49565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a14603183613f49565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613a7a602c83613f49565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b613adc816140e4565b82525050565b613aeb816140e4565b82525050565b6000613afd828661338f565b9150613b09828561338f565b9150613b1582846133c0565b9150819050949350505050565b6000602082019050613b3760008301846132a1565b92915050565b6000608082019050613b5260008301876132a1565b613b5f60208301866132a1565b613b6c6040830185613ae2565b8181036060830152613b7e818461331d565b905095945050505050565b60006020820190508181036000830152613ba381846132b0565b905092915050565b6000602082019050613bc0600083018461330e565b92915050565b60006020820190508181036000830152613be08184613356565b905092915050565b60006020820190508181036000830152613c018161343f565b9050919050565b60006020820190508181036000830152613c21816134a5565b9050919050565b60006020820190508181036000830152613c418161350b565b9050919050565b60006020820190508181036000830152613c6181613571565b9050919050565b60006020820190508181036000830152613c81816135b1565b9050919050565b60006020820190508181036000830152613ca181613617565b9050919050565b60006020820190508181036000830152613cc181613657565b9050919050565b60006020820190508181036000830152613ce1816136bd565b9050919050565b60006020820190508181036000830152613d0181613723565b9050919050565b60006020820190508181036000830152613d2181613789565b9050919050565b60006020820190508181036000830152613d41816137ef565b9050919050565b60006020820190508181036000830152613d618161382f565b9050919050565b60006020820190508181036000830152613d8181613895565b9050919050565b60006020820190508181036000830152613da1816138d5565b9050919050565b60006020820190508181036000830152613dc18161393b565b9050919050565b60006020820190508181036000830152613de1816139a1565b9050919050565b60006020820190508181036000830152613e0181613a07565b9050919050565b60006020820190508181036000830152613e2181613a6d565b9050919050565b6000602082019050613e3d6000830184613ae2565b92915050565b6000604051905081810181811067ffffffffffffffff82111715613e6a57613e69614269565b5b8060405250919050565b600067ffffffffffffffff821115613e8f57613e8e614269565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115613ebf57613ebe614269565b5b601f19601f8301169050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f70826140e4565b9150613f7b836140e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fb057613faf6141dc565b5b828201905092915050565b6000613fc6826140e4565b9150613fd1836140e4565b925082613fe157613fe061420b565b5b828204905092915050565b6000613ff7826140e4565b9150614002836140e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561403b5761403a6141dc565b5b828202905092915050565b6000614051826140e4565b915061405c836140e4565b92508282101561406f5761406e6141dc565b5b828203905092915050565b6000614085826140c4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561411b578082015181840152602081019050614100565b8381111561412a576000848401525b50505050565b6000600282049050600182168061414857607f821691505b6020821081141561415c5761415b61423a565b5b50919050565b600061416d826140e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141a05761419f6141dc565b5b600182019050919050565b60006141b6826140e4565b91506141c1836140e4565b9250826141d1576141d061420b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6142b28161407a565b81146142bd57600080fd5b50565b6142c98161408c565b81146142d457600080fd5b50565b6142e081614098565b81146142eb57600080fd5b50565b6142f7816140e4565b811461430257600080fd5b5056fea26469706673582212204c8b907bcaf3ec5f2a65da219f0d4ec0bd2ab6e5665bd245888d5dce6adc00d864736f6c63430008000033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000e43727970746f43697479426f7973000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000343434200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007697066733a2f2f00000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): CryptoCityBoys
Arg [1] : _symbol (string): CCB
Arg [2] : _initBaseURI (string): ipfs://

-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [4] : 43727970746f43697479426f7973000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4343420000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [8] : 697066733a2f2f00000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44153:2825:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37937:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46576:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25829:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27388:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26911:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44300:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38577:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44374:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28278:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38245:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46755:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46861:114;;;:::i;:::-;;44826:501;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28688:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45333:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46132:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46655:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38767:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46344:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44412:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25523:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44232:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25253:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2463:94;;;;;;;;;;;;;:::i;:::-;;46220:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1812:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25998:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27681:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28944:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44258:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45687:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44337:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44443:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46448:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28047:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2712:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37937:224;38039:4;38078:35;38063:50;;;:11;:50;;;;:90;;;;38117:36;38141:11;38117:23;:36::i;:::-;38063:90;38056:97;;37937:224;;;:::o;46576:73::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46637:6:::1;46628;;:15;;;;;;;;;;;;;;;;;;46576:73:::0;:::o;25829:100::-;25883:13;25916:5;25909:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25829:100;:::o;27388:221::-;27464:7;27492:16;27500:7;27492;:16::i;:::-;27484:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27577:15;:24;27593:7;27577:24;;;;;;;;;;;;;;;;;;;;;27570:31;;27388:221;;;:::o;26911:411::-;26992:13;27008:23;27023:7;27008:14;:23::i;:::-;26992:39;;27056:5;27050:11;;:2;:11;;;;27042:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27150:5;27134:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27159:37;27176:5;27183:12;:10;:12::i;:::-;27159:16;:37::i;:::-;27134:62;27112:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27293:21;27302:2;27306:7;27293:8;:21::i;:::-;26911:411;;;:::o;44300:32::-;;;;:::o;38577:113::-;38638:7;38665:10;:17;;;;38658:24;;38577:113;:::o;44374:33::-;;;;:::o;28278:339::-;28473:41;28492:12;:10;:12::i;:::-;28506:7;28473:18;:41::i;:::-;28465:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28581:28;28591:4;28597:2;28601:7;28581:9;:28::i;:::-;28278:339;;;:::o;38245:256::-;38342:7;38378:23;38395:5;38378:16;:23::i;:::-;38370:5;:31;38362:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38467:12;:19;38480:5;38467:19;;;;;;;;;;;;;;;:26;38487:5;38467:26;;;;;;;;;;;;38460:33;;38245:256;;;;:::o;46755:100::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46844:5:::1;46823:11;:18;46835:5;46823:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;46755:100:::0;:::o;46861:114::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46929:10:::1;46921:24;;:47;46946:21;46921:47;;;;;;;;;;;;;;;;;;;;;;;46913:56;;;::::0;::::1;;46861:114::o:0;44826:501::-;44896:14;44913:13;:11;:13::i;:::-;44896:30;;44942:6;;;;;;;;;;;44941:7;44933:16;;;;;;44978:1;44964:11;:15;44956:24;;;;;;45010:13;;44995:11;:28;;44987:37;;;;;;45063:9;;45048:11;45039:6;:20;;;;:::i;:::-;:33;;45031:42;;;;;;45100:7;:5;:7::i;:::-;45086:21;;:10;:21;;;45082:146;;45150:4;45123:31;;:11;:23;45135:10;45123:23;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;45120:101;;45197:11;45190:4;;:18;;;;:::i;:::-;45177:9;:31;;45169:40;;;;;;45120:101;45082:146;45241:9;45253:1;45241:13;;45236:86;45261:11;45256:1;:16;45236:86;;45288:26;45298:3;45312:1;45303:6;:10;;;;:::i;:::-;45288:9;:26::i;:::-;45274:3;;;;;:::i;:::-;;;;45236:86;;;;44826:501;;;:::o;28688:185::-;28826:39;28843:4;28849:2;28853:7;28826:39;;;;;;;;;;;;:16;:39::i;:::-;28688:185;;;:::o;45333:348::-;45408:16;45436:23;45462:17;45472:6;45462:9;:17::i;:::-;45436:43;;45486:25;45528:15;45514:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45486:58;;45556:9;45551:103;45571:15;45567:1;:19;45551:103;;;45616:30;45636:6;45644:1;45616:19;:30::i;:::-;45602:8;45611:1;45602:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;45588:3;;;;;:::i;:::-;;;;45551:103;;;;45667:8;45660:15;;;;45333:348;;;:::o;46132:82::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46200:8:::1;46193:4;:15;;;;46132:82:::0;:::o;46655:93::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46738:4:::1;46717:11;:18;46729:5;46717:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;46655:93:::0;:::o;38767:233::-;38842:7;38878:30;:28;:30::i;:::-;38870:5;:38;38862:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38975:10;38986:5;38975:17;;;;;;;;;;;;;;;;;;;;;;;;38968:24;;38767:233;;;:::o;46344:98::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46425:11:::1;46415:7;:21;;;;;;;;;;;;:::i;:::-;;46344:98:::0;:::o;44412:26::-;;;;;;;;;;;;;:::o;25523:239::-;25595:7;25615:13;25631:7;:16;25639:7;25631:16;;;;;;;;;;;;;;;;;;;;;25615:32;;25683:1;25666:19;;:5;:19;;;;25658:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25749:5;25742:12;;;25523:239;;;:::o;44232:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25253:208::-;25325:7;25370:1;25353:19;;:5;:19;;;;25345:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25437:9;:16;25447:5;25437:16;;;;;;;;;;;;;;;;25430:23;;25253:208;;;:::o;2463:94::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2528:21:::1;2546:1;2528:9;:21::i;:::-;2463:94::o:0;46220:118::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46315:17:::1;46299:13;:33;;;;46220:118:::0;:::o;1812:87::-;1858:7;1885:6;;;;;;;;;;;1878:13;;1812:87;:::o;25998:104::-;26054:13;26087:7;26080:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25998:104;:::o;27681:295::-;27796:12;:10;:12::i;:::-;27784:24;;:8;:24;;;;27776:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27896:8;27851:18;:32;27870:12;:10;:12::i;:::-;27851:32;;;;;;;;;;;;;;;:42;27884:8;27851:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27949:8;27920:48;;27935:12;:10;:12::i;:::-;27920:48;;;27959:8;27920:48;;;;;;:::i;:::-;;;;;;;;27681:295;;:::o;28944:328::-;29119:41;29138:12;:10;:12::i;:::-;29152:7;29119:18;:41::i;:::-;29111:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29225:39;29239:4;29245:2;29249:7;29258:5;29225:13;:39::i;:::-;28944:328;;;;:::o;44258:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45687:423::-;45785:13;45826:16;45834:7;45826;:16::i;:::-;45810:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;45916:28;45947:10;:8;:10::i;:::-;45916:41;;46002:1;45977:14;45971:28;:32;:133;;;;;;;;;;;;;;;;;46039:14;46055:18;:7;:16;:18::i;:::-;46075:13;46022:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45971:133;45964:140;;;45687:423;;;:::o;44337:32::-;;;;:::o;44443:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;46448:122::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46547:17:::1;46531:13;:33;;;;;;;;;;;;:::i;:::-;;46448:122:::0;:::o;28047:164::-;28144:4;28168:18;:25;28187:5;28168:25;;;;;;;;;;;;;;;:35;28194:8;28168:35;;;;;;;;;;;;;;;;;;;;;;;;;28161:42;;28047:164;;;;:::o;2712:192::-;2043:12;:10;:12::i;:::-;2032:23;;:7;:5;:7::i;:::-;:23;;;2024:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2821:1:::1;2801:22;;:8;:22;;;;2793:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2877:19;2887:8;2877:9;:19::i;:::-;2712:192:::0;:::o;14914:387::-;14974:4;15182:12;15249:7;15237:20;15229:28;;15292:1;15285:4;:8;15278:15;;;14914:387;;;:::o;36874:126::-;;;;:::o;24884:305::-;24986:4;25038:25;25023:40;;;:11;:40;;;;:105;;;;25095:33;25080:48;;;:11;:48;;;;25023:105;:158;;;;25145:36;25169:11;25145:23;:36::i;:::-;25023:158;25003:178;;24884:305;;;:::o;661:98::-;714:7;741:10;734:17;;661:98;:::o;30782:127::-;30847:4;30899:1;30871:30;;:7;:16;30879:7;30871:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30864:37;;30782:127;;;:::o;34764:174::-;34866:2;34839:15;:24;34855:7;34839:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34922:7;34918:2;34884:46;;34893:23;34908:7;34893:14;:23::i;:::-;34884:46;;;;;;;;;;;;34764:174;;:::o;31076:348::-;31169:4;31194:16;31202:7;31194;:16::i;:::-;31186:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31270:13;31286:23;31301:7;31286:14;:23::i;:::-;31270:39;;31339:5;31328:16;;:7;:16;;;:51;;;;31372:7;31348:31;;:20;31360:7;31348:11;:20::i;:::-;:31;;;31328:51;:87;;;;31383:32;31400:5;31407:7;31383:16;:32::i;:::-;31328:87;31320:96;;;31076:348;;;;:::o;34068:578::-;34227:4;34200:31;;:23;34215:7;34200:14;:23::i;:::-;:31;;;34192:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34310:1;34296:16;;:2;:16;;;;34288:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34366:39;34387:4;34393:2;34397:7;34366:20;:39::i;:::-;34470:29;34487:1;34491:7;34470:8;:29::i;:::-;34531:1;34512:9;:15;34522:4;34512:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34560:1;34543:9;:13;34553:2;34543:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34591:2;34572:7;:16;34580:7;34572:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34630:7;34626:2;34611:27;;34620:4;34611:27;;;;;;;;;;;;34068:578;;;:::o;31766:110::-;31842:26;31852:2;31856:7;31842:26;;;;;;;;;;;;:9;:26::i;:::-;31766:110;;:::o;2912:173::-;2968:16;2987:6;;;;;;;;;;;2968:25;;3013:8;3004:6;;:17;;;;;;;;;;;;;;;;;;3068:8;3037:40;;3058:8;3037:40;;;;;;;;;;;;2912:173;;:::o;30154:315::-;30311:28;30321:4;30327:2;30331:7;30311:9;:28::i;:::-;30358:48;30381:4;30387:2;30391:7;30400:5;30358:22;:48::i;:::-;30350:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30154:315;;;;:::o;44705:102::-;44765:13;44794:7;44787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44705:102;:::o;12333:723::-;12389:13;12619:1;12610:5;:10;12606:53;;;12637:10;;;;;;;;;;;;;;;;;;;;;12606:53;12669:12;12684:5;12669:20;;12700:14;12725:78;12740:1;12732:4;:9;12725:78;;12758:8;;;;;:::i;:::-;;;;12789:2;12781:10;;;;;:::i;:::-;;;12725:78;;;12813:19;12845:6;12835:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12813:39;;12863:154;12879:1;12870:5;:10;12863:154;;12907:1;12897:11;;;;;:::i;:::-;;;12974:2;12966:5;:10;;;;:::i;:::-;12953:2;:24;;;;:::i;:::-;12940:39;;12923:6;12930;12923:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;13003:2;12994:11;;;;;:::i;:::-;;;12863:154;;;13041:6;13027:21;;;;;12333:723;;;;:::o;4738:157::-;4823:4;4862:25;4847:40;;;:11;:40;;;;4840:47;;4738:157;;;:::o;39613:589::-;39757:45;39784:4;39790:2;39794:7;39757:26;:45::i;:::-;39835:1;39819:18;;:4;:18;;;39815:187;;;39854:40;39886:7;39854:31;:40::i;:::-;39815:187;;;39924:2;39916:10;;:4;:10;;;39912:90;;39943:47;39976:4;39982:7;39943:32;:47::i;:::-;39912:90;39815:187;40030:1;40016:16;;:2;:16;;;40012:183;;;40049:45;40086:7;40049:36;:45::i;:::-;40012:183;;;40122:4;40116:10;;:2;:10;;;40112:83;;40143:40;40171:2;40175:7;40143:27;:40::i;:::-;40112:83;40012:183;39613:589;;;:::o;32103:321::-;32233:18;32239:2;32243:7;32233:5;:18::i;:::-;32284:54;32315:1;32319:2;32323:7;32332:5;32284:22;:54::i;:::-;32262:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32103:321;;;:::o;35503:799::-;35658:4;35679:15;:2;:13;;;:15::i;:::-;35675:620;;;35731:2;35715:36;;;35752:12;:10;:12::i;:::-;35766:4;35772:7;35781:5;35715:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35711:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35974:1;35957:6;:13;:18;35953:272;;;36000:60;;;;;;;;;;:::i;:::-;;;;;;;;35953:272;36175:6;36169:13;36160:6;36156:2;36152:15;36145:38;35711:529;35848:41;;;35838:51;;;:6;:51;;;;35831:58;;;;;35675:620;36279:4;36272:11;;35503:799;;;;;;;:::o;40925:164::-;41029:10;:17;;;;41002:15;:24;41018:7;41002:24;;;;;;;;;;;:44;;;;41057:10;41073:7;41057:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40925:164;:::o;41716:988::-;41982:22;42032:1;42007:22;42024:4;42007:16;:22::i;:::-;:26;;;;:::i;:::-;41982:51;;42044:18;42065:17;:26;42083:7;42065:26;;;;;;;;;;;;42044:47;;42212:14;42198:10;:28;42194:328;;42243:19;42265:12;:18;42278:4;42265:18;;;;;;;;;;;;;;;:34;42284:14;42265:34;;;;;;;;;;;;42243:56;;42349:11;42316:12;:18;42329:4;42316:18;;;;;;;;;;;;;;;:30;42335:10;42316:30;;;;;;;;;;;:44;;;;42466:10;42433:17;:30;42451:11;42433:30;;;;;;;;;;;:43;;;;42194:328;;42618:17;:26;42636:7;42618:26;;;;;;;;;;;42611:33;;;42662:12;:18;42675:4;42662:18;;;;;;;;;;;;;;;:34;42681:14;42662:34;;;;;;;;;;;42655:41;;;41716:988;;;;:::o;42999:1079::-;43252:22;43297:1;43277:10;:17;;;;:21;;;;:::i;:::-;43252:46;;43309:18;43330:15;:24;43346:7;43330:24;;;;;;;;;;;;43309:45;;43681:19;43703:10;43714:14;43703:26;;;;;;;;;;;;;;;;;;;;;;;;43681:48;;43767:11;43742:10;43753;43742:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;43878:10;43847:15;:28;43863:11;43847:28;;;;;;;;;;;:41;;;;44019:15;:24;44035:7;44019:24;;;;;;;;;;;44012:31;;;44054:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42999:1079;;;;:::o;40503:221::-;40588:14;40605:20;40622:2;40605:16;:20::i;:::-;40588:37;;40663:7;40636:12;:16;40649:2;40636:16;;;;;;;;;;;;;;;:24;40653:6;40636:24;;;;;;;;;;;:34;;;;40710:6;40681:17;:26;40699:7;40681:26;;;;;;;;;;;:35;;;;40503:221;;;:::o;32760:382::-;32854:1;32840:16;;:2;:16;;;;32832:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32913:16;32921:7;32913;:16::i;:::-;32912:17;32904:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32975:45;33004:1;33008:2;33012:7;32975:20;:45::i;:::-;33050:1;33033:9;:13;33043:2;33033:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33081:2;33062:7;:16;33070:7;33062:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33126:7;33122:2;33101:33;;33118:1;33101:33;;;;;;;;;;;;32760:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:344::-;;458:65;473:49;515:6;473:49;:::i;:::-;458:65;:::i;:::-;449:74;;546:6;539:5;532:21;584:4;577:5;573:16;622:3;613:6;608:3;604:16;601:25;598:2;;;639:1;636;629:12;598:2;652:41;686:6;681:3;676;652:41;:::i;:::-;439:260;;;;;;:::o;705:139::-;;789:6;776:20;767:29;;805:33;832:5;805:33;:::i;:::-;757:87;;;;:::o;850:133::-;;931:6;918:20;909:29;;947:30;971:5;947:30;:::i;:::-;899:84;;;;:::o;989:137::-;;1072:6;1059:20;1050:29;;1088:32;1114:5;1088:32;:::i;:::-;1040:86;;;;:::o;1132:141::-;;1219:6;1213:13;1204:22;;1235:32;1261:5;1235:32;:::i;:::-;1194:79;;;;:::o;1292:271::-;;1396:3;1389:4;1381:6;1377:17;1373:27;1363:2;;1414:1;1411;1404:12;1363:2;1454:6;1441:20;1479:78;1553:3;1545:6;1538:4;1530:6;1526:17;1479:78;:::i;:::-;1470:87;;1353:210;;;;;:::o;1583:273::-;;1688:3;1681:4;1673:6;1669:17;1665:27;1655:2;;1706:1;1703;1696:12;1655:2;1746:6;1733:20;1771:79;1846:3;1838:6;1831:4;1823:6;1819:17;1771:79;:::i;:::-;1762:88;;1645:211;;;;;:::o;1862:139::-;;1946:6;1933:20;1924:29;;1962:33;1989:5;1962:33;:::i;:::-;1914:87;;;;:::o;2007:262::-;;2115:2;2103:9;2094:7;2090:23;2086:32;2083:2;;;2131:1;2128;2121:12;2083:2;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2073:196;;;;:::o;2275:407::-;;;2400:2;2388:9;2379:7;2375:23;2371:32;2368:2;;;2416:1;2413;2406:12;2368:2;2459:1;2484:53;2529:7;2520:6;2509:9;2505:22;2484:53;:::i;:::-;2474:63;;2430:117;2586:2;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2557:118;2358:324;;;;;:::o;2688:552::-;;;;2830:2;2818:9;2809:7;2805:23;2801:32;2798:2;;;2846:1;2843;2836:12;2798:2;2889:1;2914:53;2959:7;2950:6;2939:9;2935:22;2914:53;:::i;:::-;2904:63;;2860:117;3016:2;3042:53;3087:7;3078:6;3067:9;3063:22;3042:53;:::i;:::-;3032:63;;2987:118;3144:2;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3115:118;2788:452;;;;;:::o;3246:809::-;;;;;3414:3;3402:9;3393:7;3389:23;3385:33;3382:2;;;3431:1;3428;3421:12;3382:2;3474:1;3499:53;3544:7;3535:6;3524:9;3520:22;3499:53;:::i;:::-;3489:63;;3445:117;3601:2;3627:53;3672:7;3663:6;3652:9;3648:22;3627:53;:::i;:::-;3617:63;;3572:118;3729:2;3755:53;3800:7;3791:6;3780:9;3776:22;3755:53;:::i;:::-;3745:63;;3700:118;3885:2;3874:9;3870:18;3857:32;3916:18;3908:6;3905:30;3902:2;;;3948:1;3945;3938:12;3902:2;3976:62;4030:7;4021:6;4010:9;4006:22;3976:62;:::i;:::-;3966:72;;3828:220;3372:683;;;;;;;:::o;4061:401::-;;;4183:2;4171:9;4162:7;4158:23;4154:32;4151:2;;;4199:1;4196;4189:12;4151:2;4242:1;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4213:117;4369:2;4395:50;4437:7;4428:6;4417:9;4413:22;4395:50;:::i;:::-;4385:60;;4340:115;4141:321;;;;;:::o;4468:407::-;;;4593:2;4581:9;4572:7;4568:23;4564:32;4561:2;;;4609:1;4606;4599:12;4561:2;4652:1;4677:53;4722:7;4713:6;4702:9;4698:22;4677:53;:::i;:::-;4667:63;;4623:117;4779:2;4805:53;4850:7;4841:6;4830:9;4826:22;4805:53;:::i;:::-;4795:63;;4750:118;4551:324;;;;;:::o;4881:256::-;;4986:2;4974:9;4965:7;4961:23;4957:32;4954:2;;;5002:1;4999;4992:12;4954:2;5045:1;5070:50;5112:7;5103:6;5092:9;5088:22;5070:50;:::i;:::-;5060:60;;5016:114;4944:193;;;;:::o;5143:260::-;;5250:2;5238:9;5229:7;5225:23;5221:32;5218:2;;;5266:1;5263;5256:12;5218:2;5309:1;5334:52;5378:7;5369:6;5358:9;5354:22;5334:52;:::i;:::-;5324:62;;5280:116;5208:195;;;;:::o;5409:282::-;;5527:2;5515:9;5506:7;5502:23;5498:32;5495:2;;;5543:1;5540;5533:12;5495:2;5586:1;5611:63;5666:7;5657:6;5646:9;5642:22;5611:63;:::i;:::-;5601:73;;5557:127;5485:206;;;;:::o;5697:375::-;;5815:2;5803:9;5794:7;5790:23;5786:32;5783:2;;;5831:1;5828;5821:12;5783:2;5902:1;5891:9;5887:17;5874:31;5932:18;5924:6;5921:30;5918:2;;;5964:1;5961;5954:12;5918:2;5992:63;6047:7;6038:6;6027:9;6023:22;5992:63;:::i;:::-;5982:73;;5845:220;5773:299;;;;:::o;6078:262::-;;6186:2;6174:9;6165:7;6161:23;6157:32;6154:2;;;6202:1;6199;6192:12;6154:2;6245:1;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6216:117;6144:196;;;;:::o;6346:179::-;;6436:46;6478:3;6470:6;6436:46;:::i;:::-;6514:4;6509:3;6505:14;6491:28;;6426:99;;;;:::o;6531:118::-;6618:24;6636:5;6618:24;:::i;:::-;6613:3;6606:37;6596:53;;:::o;6685:732::-;;6833:54;6881:5;6833:54;:::i;:::-;6903:86;6982:6;6977:3;6903:86;:::i;:::-;6896:93;;7013:56;7063:5;7013:56;:::i;:::-;7092:7;7123:1;7108:284;7133:6;7130:1;7127:13;7108:284;;;7209:6;7203:13;7236:63;7295:3;7280:13;7236:63;:::i;:::-;7229:70;;7322:60;7375:6;7322:60;:::i;:::-;7312:70;;7168:224;7155:1;7152;7148:9;7143:14;;7108:284;;;7112:14;7408:3;7401:10;;6809:608;;;;;;;:::o;7423:109::-;7504:21;7519:5;7504:21;:::i;:::-;7499:3;7492:34;7482:50;;:::o;7538:360::-;;7652:38;7684:5;7652:38;:::i;:::-;7706:70;7769:6;7764:3;7706:70;:::i;:::-;7699:77;;7785:52;7830:6;7825:3;7818:4;7811:5;7807:16;7785:52;:::i;:::-;7862:29;7884:6;7862:29;:::i;:::-;7857:3;7853:39;7846:46;;7628:270;;;;;:::o;7904:364::-;;8020:39;8053:5;8020:39;:::i;:::-;8075:71;8139:6;8134:3;8075:71;:::i;:::-;8068:78;;8155:52;8200:6;8195:3;8188:4;8181:5;8177:16;8155:52;:::i;:::-;8232:29;8254:6;8232:29;:::i;:::-;8227:3;8223:39;8216:46;;7996:272;;;;;:::o;8274:377::-;;8408:39;8441:5;8408:39;:::i;:::-;8463:89;8545:6;8540:3;8463:89;:::i;:::-;8456:96;;8561:52;8606:6;8601:3;8594:4;8587:5;8583:16;8561:52;:::i;:::-;8638:6;8633:3;8629:16;8622:23;;8384:267;;;;;:::o;8681:845::-;;8821:5;8815:12;8850:36;8876:9;8850:36;:::i;:::-;8902:89;8984:6;8979:3;8902:89;:::i;:::-;8895:96;;9022:1;9011:9;9007:17;9038:1;9033:137;;;;9184:1;9179:341;;;;9000:520;;9033:137;9117:4;9113:9;9102;9098:25;9093:3;9086:38;9153:6;9148:3;9144:16;9137:23;;9033:137;;9179:341;9246:38;9278:5;9246:38;:::i;:::-;9306:1;9320:154;9334:6;9331:1;9328:13;9320:154;;;9408:7;9402:14;9398:1;9393:3;9389:11;9382:35;9458:1;9449:7;9445:15;9434:26;;9356:4;9353:1;9349:12;9344:17;;9320:154;;;9503:6;9498:3;9494:16;9487:23;;9186:334;;9000:520;;8788:738;;;;;;:::o;9532:375::-;;9695:67;9759:2;9754:3;9695:67;:::i;:::-;9688:74;;9792:34;9788:1;9783:3;9779:11;9772:55;9858:13;9853:2;9848:3;9844:12;9837:35;9898:2;9893:3;9889:12;9882:19;;9678:229;;;:::o;9913:382::-;;10076:67;10140:2;10135:3;10076:67;:::i;:::-;10069:74;;10173:34;10169:1;10164:3;10160:11;10153:55;10239:20;10234:2;10229:3;10225:12;10218:42;10286:2;10281:3;10277:12;10270:19;;10059:236;;;:::o;10301:370::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:8;10622:2;10617:3;10613:12;10606:30;10662:2;10657:3;10653:12;10646:19;;10447:224;;;:::o;10677:326::-;;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10937:30;10933:1;10928:3;10924:11;10917:51;10994:2;10989:3;10985:12;10978:19;;10823:180;;;:::o;11009:368::-;;11172:67;11236:2;11231:3;11172:67;:::i;:::-;11165:74;;11269:34;11265:1;11260:3;11256:11;11249:55;11335:6;11330:2;11325:3;11321:12;11314:28;11368:2;11363:3;11359:12;11352:19;;11155:222;;;:::o;11383:323::-;;11546:67;11610:2;11605:3;11546:67;:::i;:::-;11539:74;;11643:27;11639:1;11634:3;11630:11;11623:48;11697:2;11692:3;11688:12;11681:19;;11529:177;;;:::o;11712:376::-;;11875:67;11939:2;11934:3;11875:67;:::i;:::-;11868:74;;11972:34;11968:1;11963:3;11959:11;11952:55;12038:14;12033:2;12028:3;12024:12;12017:36;12079:2;12074:3;12070:12;12063:19;;11858:230;;;:::o;12094:388::-;;12257:67;12321:2;12316:3;12257:67;:::i;:::-;12250:74;;12354:34;12350:1;12345:3;12341:11;12334:55;12420:26;12415:2;12410:3;12406:12;12399:48;12473:2;12468:3;12464:12;12457:19;;12240:242;;;:::o;12488:374::-;;12651:67;12715:2;12710:3;12651:67;:::i;:::-;12644:74;;12748:34;12744:1;12739:3;12735:11;12728:55;12814:12;12809:2;12804:3;12800:12;12793:34;12853:2;12848:3;12844:12;12837:19;;12634:228;;;:::o;12868:373::-;;13031:67;13095:2;13090:3;13031:67;:::i;:::-;13024:74;;13128:34;13124:1;13119:3;13115:11;13108:55;13194:11;13189:2;13184:3;13180:12;13173:33;13232:2;13227:3;13223:12;13216:19;;13014:227;;;:::o;13247:330::-;;13410:67;13474:2;13469:3;13410:67;:::i;:::-;13403:74;;13507:34;13503:1;13498:3;13494:11;13487:55;13568:2;13563:3;13559:12;13552:19;;13393:184;;;:::o;13583:376::-;;13746:67;13810:2;13805:3;13746:67;:::i;:::-;13739:74;;13843:34;13839:1;13834:3;13830:11;13823:55;13909:14;13904:2;13899:3;13895:12;13888:36;13950:2;13945:3;13941:12;13934:19;;13729:230;;;:::o;13965:330::-;;14128:67;14192:2;14187:3;14128:67;:::i;:::-;14121:74;;14225:34;14221:1;14216:3;14212:11;14205:55;14286:2;14281:3;14277:12;14270:19;;14111:184;;;:::o;14301:373::-;;14464:67;14528:2;14523:3;14464:67;:::i;:::-;14457:74;;14561:34;14557:1;14552:3;14548:11;14541:55;14627:11;14622:2;14617:3;14613:12;14606:33;14665:2;14660:3;14656:12;14649:19;;14447:227;;;:::o;14680:379::-;;14843:67;14907:2;14902:3;14843:67;:::i;:::-;14836:74;;14940:34;14936:1;14931:3;14927:11;14920:55;15006:17;15001:2;14996:3;14992:12;14985:39;15050:2;15045:3;15041:12;15034:19;;14826:233;;;:::o;15065:365::-;;15228:67;15292:2;15287:3;15228:67;:::i;:::-;15221:74;;15325:34;15321:1;15316:3;15312:11;15305:55;15391:3;15386:2;15381:3;15377:12;15370:25;15421:2;15416:3;15412:12;15405:19;;15211:219;;;:::o;15436:381::-;;15599:67;15663:2;15658:3;15599:67;:::i;:::-;15592:74;;15696:34;15692:1;15687:3;15683:11;15676:55;15762:19;15757:2;15752:3;15748:12;15741:41;15808:2;15803:3;15799:12;15792:19;;15582:235;;;:::o;15823:376::-;;15986:67;16050:2;16045:3;15986:67;:::i;:::-;15979:74;;16083:34;16079:1;16074:3;16070:11;16063:55;16149:14;16144:2;16139:3;16135:12;16128:36;16190:2;16185:3;16181:12;16174:19;;15969:230;;;:::o;16205:108::-;16282:24;16300:5;16282:24;:::i;:::-;16277:3;16270:37;16260:53;;:::o;16319:118::-;16406:24;16424:5;16406:24;:::i;:::-;16401:3;16394:37;16384:53;;:::o;16443:589::-;;16690:95;16781:3;16772:6;16690:95;:::i;:::-;16683:102;;16802:95;16893:3;16884:6;16802:95;:::i;:::-;16795:102;;16914:92;17002:3;16993:6;16914:92;:::i;:::-;16907:99;;17023:3;17016:10;;16672:360;;;;;;:::o;17038:222::-;;17169:2;17158:9;17154:18;17146:26;;17182:71;17250:1;17239:9;17235:17;17226:6;17182:71;:::i;:::-;17136:124;;;;:::o;17266:640::-;;17499:3;17488:9;17484:19;17476:27;;17513:71;17581:1;17570:9;17566:17;17557:6;17513:71;:::i;:::-;17594:72;17662:2;17651:9;17647:18;17638:6;17594:72;:::i;:::-;17676;17744:2;17733:9;17729:18;17720:6;17676:72;:::i;:::-;17795:9;17789:4;17785:20;17780:2;17769:9;17765:18;17758:48;17823:76;17894:4;17885:6;17823:76;:::i;:::-;17815:84;;17466:440;;;;;;;:::o;17912:373::-;;18093:2;18082:9;18078:18;18070:26;;18142:9;18136:4;18132:20;18128:1;18117:9;18113:17;18106:47;18170:108;18273:4;18264:6;18170:108;:::i;:::-;18162:116;;18060:225;;;;:::o;18291:210::-;;18416:2;18405:9;18401:18;18393:26;;18429:65;18491:1;18480:9;18476:17;18467:6;18429:65;:::i;:::-;18383:118;;;;:::o;18507:313::-;;18658:2;18647:9;18643:18;18635:26;;18707:9;18701:4;18697:20;18693:1;18682:9;18678:17;18671:47;18735:78;18808:4;18799:6;18735:78;:::i;:::-;18727:86;;18625:195;;;;:::o;18826:419::-;;19030:2;19019:9;19015:18;19007:26;;19079:9;19073:4;19069:20;19065:1;19054:9;19050:17;19043:47;19107:131;19233:4;19107:131;:::i;:::-;19099:139;;18997:248;;;:::o;19251:419::-;;19455:2;19444:9;19440:18;19432:26;;19504:9;19498:4;19494:20;19490:1;19479:9;19475:17;19468:47;19532:131;19658:4;19532:131;:::i;:::-;19524:139;;19422:248;;;:::o;19676:419::-;;19880:2;19869:9;19865:18;19857:26;;19929:9;19923:4;19919:20;19915:1;19904:9;19900:17;19893:47;19957:131;20083:4;19957:131;:::i;:::-;19949:139;;19847:248;;;:::o;20101:419::-;;20305:2;20294:9;20290:18;20282:26;;20354:9;20348:4;20344:20;20340:1;20329:9;20325:17;20318:47;20382:131;20508:4;20382:131;:::i;:::-;20374:139;;20272:248;;;:::o;20526:419::-;;20730:2;20719:9;20715:18;20707:26;;20779:9;20773:4;20769:20;20765:1;20754:9;20750:17;20743:47;20807:131;20933:4;20807:131;:::i;:::-;20799:139;;20697:248;;;:::o;20951:419::-;;21155:2;21144:9;21140:18;21132:26;;21204:9;21198:4;21194:20;21190:1;21179:9;21175:17;21168:47;21232:131;21358:4;21232:131;:::i;:::-;21224:139;;21122:248;;;:::o;21376:419::-;;21580:2;21569:9;21565:18;21557:26;;21629:9;21623:4;21619:20;21615:1;21604:9;21600:17;21593:47;21657:131;21783:4;21657:131;:::i;:::-;21649:139;;21547:248;;;:::o;21801:419::-;;22005:2;21994:9;21990:18;21982:26;;22054:9;22048:4;22044:20;22040:1;22029:9;22025:17;22018:47;22082:131;22208:4;22082:131;:::i;:::-;22074:139;;21972:248;;;:::o;22226:419::-;;22430:2;22419:9;22415:18;22407:26;;22479:9;22473:4;22469:20;22465:1;22454:9;22450:17;22443:47;22507:131;22633:4;22507:131;:::i;:::-;22499:139;;22397:248;;;:::o;22651:419::-;;22855:2;22844:9;22840:18;22832:26;;22904:9;22898:4;22894:20;22890:1;22879:9;22875:17;22868:47;22932:131;23058:4;22932:131;:::i;:::-;22924:139;;22822:248;;;:::o;23076:419::-;;23280:2;23269:9;23265:18;23257:26;;23329:9;23323:4;23319:20;23315:1;23304:9;23300:17;23293:47;23357:131;23483:4;23357:131;:::i;:::-;23349:139;;23247:248;;;:::o;23501:419::-;;23705:2;23694:9;23690:18;23682:26;;23754:9;23748:4;23744:20;23740:1;23729:9;23725:17;23718:47;23782:131;23908:4;23782:131;:::i;:::-;23774:139;;23672:248;;;:::o;23926:419::-;;24130:2;24119:9;24115:18;24107:26;;24179:9;24173:4;24169:20;24165:1;24154:9;24150:17;24143:47;24207:131;24333:4;24207:131;:::i;:::-;24199:139;;24097:248;;;:::o;24351:419::-;;24555:2;24544:9;24540:18;24532:26;;24604:9;24598:4;24594:20;24590:1;24579:9;24575:17;24568:47;24632:131;24758:4;24632:131;:::i;:::-;24624:139;;24522:248;;;:::o;24776:419::-;;24980:2;24969:9;24965:18;24957:26;;25029:9;25023:4;25019:20;25015:1;25004:9;25000:17;24993:47;25057:131;25183:4;25057:131;:::i;:::-;25049:139;;24947:248;;;:::o;25201:419::-;;25405:2;25394:9;25390:18;25382:26;;25454:9;25448:4;25444:20;25440:1;25429:9;25425:17;25418:47;25482:131;25608:4;25482:131;:::i;:::-;25474:139;;25372:248;;;:::o;25626:419::-;;25830:2;25819:9;25815:18;25807:26;;25879:9;25873:4;25869:20;25865:1;25854:9;25850:17;25843:47;25907:131;26033:4;25907:131;:::i;:::-;25899:139;;25797:248;;;:::o;26051:419::-;;26255:2;26244:9;26240:18;26232:26;;26304:9;26298:4;26294:20;26290:1;26279:9;26275:17;26268:47;26332:131;26458:4;26332:131;:::i;:::-;26324:139;;26222:248;;;:::o;26476:222::-;;26607:2;26596:9;26592:18;26584:26;;26620:71;26688:1;26677:9;26673:17;26664:6;26620:71;:::i;:::-;26574:124;;;;:::o;26704:283::-;;26770:2;26764:9;26754:19;;26812:4;26804:6;26800:17;26919:6;26907:10;26904:22;26883:18;26871:10;26868:34;26865:62;26862:2;;;26930:18;;:::i;:::-;26862:2;26970:10;26966:2;26959:22;26744:243;;;;:::o;26993:331::-;;27144:18;27136:6;27133:30;27130:2;;;27166:18;;:::i;:::-;27130:2;27251:4;27247:9;27240:4;27232:6;27228:17;27224:33;27216:41;;27312:4;27306;27302:15;27294:23;;27059:265;;;:::o;27330:332::-;;27482:18;27474:6;27471:30;27468:2;;;27504:18;;:::i;:::-;27468:2;27589:4;27585:9;27578:4;27570:6;27566:17;27562:33;27554:41;;27650:4;27644;27640:15;27632:23;;27397:265;;;:::o;27668:132::-;;27758:3;27750:11;;27788:4;27783:3;27779:14;27771:22;;27740:60;;;:::o;27806:141::-;;27878:3;27870:11;;27901:3;27898:1;27891:14;27935:4;27932:1;27922:18;27914:26;;27860:87;;;:::o;27953:114::-;;28054:5;28048:12;28038:22;;28027:40;;;:::o;28073:98::-;;28158:5;28152:12;28142:22;;28131:40;;;:::o;28177:99::-;;28263:5;28257:12;28247:22;;28236:40;;;:::o;28282:113::-;;28384:4;28379:3;28375:14;28367:22;;28357:38;;;:::o;28401:184::-;;28534:6;28529:3;28522:19;28574:4;28569:3;28565:14;28550:29;;28512:73;;;;:::o;28591:168::-;;28708:6;28703:3;28696:19;28748:4;28743:3;28739:14;28724:29;;28686:73;;;;:::o;28765:169::-;;28883:6;28878:3;28871:19;28923:4;28918:3;28914:14;28899:29;;28861:73;;;;:::o;28940:148::-;;29079:3;29064:18;;29054:34;;;;:::o;29094:305::-;;29153:20;29171:1;29153:20;:::i;:::-;29148:25;;29187:20;29205:1;29187:20;:::i;:::-;29182:25;;29341:1;29273:66;29269:74;29266:1;29263:81;29260:2;;;29347:18;;:::i;:::-;29260:2;29391:1;29388;29384:9;29377:16;;29138:261;;;;:::o;29405:185::-;;29462:20;29480:1;29462:20;:::i;:::-;29457:25;;29496:20;29514:1;29496:20;:::i;:::-;29491:25;;29535:1;29525:2;;29540:18;;:::i;:::-;29525:2;29582:1;29579;29575:9;29570:14;;29447:143;;;;:::o;29596:348::-;;29659:20;29677:1;29659:20;:::i;:::-;29654:25;;29693:20;29711:1;29693:20;:::i;:::-;29688:25;;29881:1;29813:66;29809:74;29806:1;29803:81;29798:1;29791:9;29784:17;29780:105;29777:2;;;29888:18;;:::i;:::-;29777:2;29936:1;29933;29929:9;29918:20;;29644:300;;;;:::o;29950:191::-;;30010:20;30028:1;30010:20;:::i;:::-;30005:25;;30044:20;30062:1;30044:20;:::i;:::-;30039:25;;30083:1;30080;30077:8;30074:2;;;30088:18;;:::i;:::-;30074:2;30133:1;30130;30126:9;30118:17;;29995:146;;;;:::o;30147:96::-;;30213:24;30231:5;30213:24;:::i;:::-;30202:35;;30192:51;;;:::o;30249:90::-;;30326:5;30319:13;30312:21;30301:32;;30291:48;;;:::o;30345:149::-;;30421:66;30414:5;30410:78;30399:89;;30389:105;;;:::o;30500:126::-;;30577:42;30570:5;30566:54;30555:65;;30545:81;;;:::o;30632:77::-;;30698:5;30687:16;;30677:32;;;:::o;30715:154::-;30799:6;30794:3;30789;30776:30;30861:1;30852:6;30847:3;30843:16;30836:27;30766:103;;;:::o;30875:307::-;30943:1;30953:113;30967:6;30964:1;30961:13;30953:113;;;31052:1;31047:3;31043:11;31037:18;31033:1;31028:3;31024:11;31017:39;30989:2;30986:1;30982:10;30977:15;;30953:113;;;31084:6;31081:1;31078:13;31075:2;;;31164:1;31155:6;31150:3;31146:16;31139:27;31075:2;30924:258;;;;:::o;31188:320::-;;31269:1;31263:4;31259:12;31249:22;;31316:1;31310:4;31306:12;31337:18;31327:2;;31393:4;31385:6;31381:17;31371:27;;31327:2;31455;31447:6;31444:14;31424:18;31421:38;31418:2;;;31474:18;;:::i;:::-;31418:2;31239:269;;;;:::o;31514:233::-;;31576:24;31594:5;31576:24;:::i;:::-;31567:33;;31622:66;31615:5;31612:77;31609:2;;;31692:18;;:::i;:::-;31609:2;31739:1;31732:5;31728:13;31721:20;;31557:190;;;:::o;31753:176::-;;31802:20;31820:1;31802:20;:::i;:::-;31797:25;;31836:20;31854:1;31836:20;:::i;:::-;31831:25;;31875:1;31865:2;;31880:18;;:::i;:::-;31865:2;31921:1;31918;31914:9;31909:14;;31787:142;;;;:::o;31935:180::-;31983:77;31980:1;31973:88;32080:4;32077:1;32070:15;32104:4;32101:1;32094:15;32121:180;32169:77;32166:1;32159:88;32266:4;32263:1;32256:15;32290:4;32287:1;32280:15;32307:180;32355:77;32352:1;32345:88;32452:4;32449:1;32442:15;32476:4;32473:1;32466:15;32493:180;32541:77;32538:1;32531:88;32638:4;32635:1;32628:15;32662:4;32659:1;32652:15;32679:102;;32771:2;32767:7;32762:2;32755:5;32751:14;32747:28;32737:38;;32727:54;;;:::o;32787:122::-;32860:24;32878:5;32860:24;:::i;:::-;32853:5;32850:35;32840:2;;32899:1;32896;32889:12;32840:2;32830:79;:::o;32915:116::-;32985:21;33000:5;32985:21;:::i;:::-;32978:5;32975:32;32965:2;;33021:1;33018;33011:12;32965:2;32955:76;:::o;33037:120::-;33109:23;33126:5;33109:23;:::i;:::-;33102:5;33099:34;33089:2;;33147:1;33144;33137:12;33089:2;33079:78;:::o;33163:122::-;33236:24;33254:5;33236:24;:::i;:::-;33229:5;33226:35;33216:2;;33275:1;33272;33265:12;33216:2;33206:79;:::o

Swarm Source

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