ETH Price: $2,667.72 (+0.52%)
Gas: 5 Gwei

Token

pxMAYCpastel (pxMAYCpastel)
 

Overview

Max Total Supply

1,724 pxMAYCpastel

Holders

320

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 pxMAYCpastel
0xb248b86d1fefb525f26a9324b49379af7b949309
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:
pxMAYCpastel

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 2022-01-24
*/

//pxMAYCpastel - A community driven project.  First 1,000 free. - pxConcord

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
//
pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer 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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/main.sol


pragma solidity ^0.8.0;



contract pxMAYCpastel is ERC721, Ownable {
  bool public paused = true;
  bool public isFlipState = true;
  string private _baseTokenURI;
  uint256 public totalSupply = 0;
  uint256 public price = 0.01 ether;
  uint256 public maxSupply = 6666;
  uint256 public maxFreeMints = 1000;
  mapping(address => uint256) private freeWallets;

  constructor(string memory baseURI)
    ERC721("pxMAYCpastel", "pxMAYCpastel")
  {
    setBaseURI(baseURI);
  }

  function Mint(uint256 num) public payable {
    uint256 supply = totalSupply;

    require(!paused, "MINTING PAUSED");
    require(totalSupply + num <= maxSupply, "EXCEEDS MAX SUPPLY");

    if (totalSupply + num > maxFreeMints && isFlipState) {
      require(num < 31, "MAX PER TRANSACTION IS 30");
      require(msg.value >= price * num, "NOT ENOUGH ETH");
    } else {
      require(
        freeWallets[msg.sender] + num < 11,
        "MAX FREE MINTS PER WALLET IS 10"
      );

      freeWallets[msg.sender] += num;
    }

    totalSupply += num;

    for (uint256 i; i < num; i++) {
      _mint(msg.sender, supply + i);
    }
  }

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

  function setBaseURI(string memory baseUri) public onlyOwner {
    _baseTokenURI = baseUri;
  }
//price should be set ie 10000000000000000
  function setPrice(uint256 newPrice) public onlyOwner {
    price = newPrice;
  }

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

  function setMaxFreeMints(uint256 newMaxFreeMints) public onlyOwner {
    maxFreeMints = newMaxFreeMints;
  }

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

  function FlipState(bool state) public onlyOwner {
    isFlipState = state;
  }

  function withdrawAll() public onlyOwner {
    require(
      payable(owner()).send(address(this).balance),
      "WITHDRAW UNSUCCESSFUL"
    );
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","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":"bool","name":"state","type":"bool"}],"name":"FlipState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"Mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"isFlipState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxFreeMints","type":"uint256"}],"name":"setMaxFreeMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600660146101000a81548160ff0219169083151502179055506001600660156101000a81548160ff0219169083151502179055506000600855662386f26fc10000600955611a0a600a556103e8600b553480156200006357600080fd5b5060405162003f6e38038062003f6e833981810160405281019062000089919062000426565b6040518060400160405280600c81526020017f70784d41594370617374656c00000000000000000000000000000000000000008152506040518060400160405280600c81526020017f70784d41594370617374656c000000000000000000000000000000000000000081525081600090805190602001906200010d92919062000304565b5080600190805190602001906200012692919062000304565b505050620001496200013d6200016160201b60201c565b6200016960201b60201c565b6200015a816200022f60201b60201c565b5062000611565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200023f6200016160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000265620002da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002b590620004ad565b60405180910390fd5b8060079080519060200190620002d692919062000304565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000312906200057d565b90600052602060002090601f01602090048101928262000336576000855562000382565b82601f106200035157805160ff191683800117855562000382565b8280016001018555821562000382579182015b828111156200038157825182559160200191906001019062000364565b5b50905062000391919062000395565b5090565b5b80821115620003b057600081600090555060010162000396565b5090565b6000620003cb620003c58462000503565b620004cf565b905082815260208101848484011115620003e457600080fd5b620003f184828562000547565b509392505050565b600082601f8301126200040b57600080fd5b81516200041d848260208601620003b4565b91505092915050565b6000602082840312156200043957600080fd5b600082015167ffffffffffffffff8111156200045457600080fd5b6200046284828501620003f9565b91505092915050565b60006200047a60208362000536565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006020820190508181036000830152620004c8816200046b565b9050919050565b6000604051905081810181811067ffffffffffffffff82111715620004f957620004f8620005e2565b5b8060405250919050565b600067ffffffffffffffff821115620005215762000520620005e2565b5b601f19601f8301169050602081019050919050565b600082825260208201905092915050565b60005b83811015620005675780820151818401526020810190506200054a565b8381111562000577576000848401525b50505050565b600060028204905060018216806200059657607f821691505b60208210811415620005ad57620005ac620005b3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61394d80620006216000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f7578063a035b1fe11610095578063d5abeb0111610064578063d5abeb011461063d578063e985e9c514610668578063f2fde38b146106a5578063f56ccb5b146106ce576101cd565b8063a035b1fe14610583578063a22cb465146105ae578063b88d4fde146105d7578063c87b56dd14610600576101cd565b8063853828b6116100d1578063853828b6146104ed5780638da5cb5b1461050457806391b7f5ed1461052f57806395d89b4114610558576101cd565b806370a082311461046e578063715018a6146104ab578063732496c9146104c2576101cd565b806323b872dd1161016f57806355f804b31161013e57806355f804b3146103b45780635c975abb146103dd5780636352211e146104085780636f8b44b014610445576101cd565b806323b872dd14610310578063407043fc1461033957806342842e0e1461036257806353f9c7f91461038b576101cd565b806307883703116101ab5780630788370314610263578063081812fc1461027f578063095ea7b3146102bc57806318160ddd146102e5576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906127e1565b6106f9565b604051610206919061318b565b60405180910390f35b34801561021b57600080fd5b50610236600480360381019061023191906127b8565b6107db565b005b34801561024457600080fd5b5061024d610874565b60405161025a91906131a6565b60405180910390f35b61027d60048036038101906102789190612874565b610906565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612874565b610bab565b6040516102b39190613124565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de919061277c565b610c30565b005b3480156102f157600080fd5b506102fa610d48565b6040516103079190613488565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612676565b610d4e565b005b34801561034557600080fd5b50610360600480360381019061035b9190612874565b610dae565b005b34801561036e57600080fd5b5061038960048036038101906103849190612676565b610e34565b005b34801561039757600080fd5b506103b260048036038101906103ad91906127b8565b610e54565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612833565b610eed565b005b3480156103e957600080fd5b506103f2610f83565b6040516103ff919061318b565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190612874565b610f96565b60405161043c9190613124565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190612874565b611048565b005b34801561047a57600080fd5b5061049560048036038101906104909190612611565b6110ce565b6040516104a29190613488565b60405180910390f35b3480156104b757600080fd5b506104c0611186565b005b3480156104ce57600080fd5b506104d761120e565b6040516104e49190613488565b60405180910390f35b3480156104f957600080fd5b50610502611214565b005b34801561051057600080fd5b5061051961130d565b6040516105269190613124565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190612874565b611337565b005b34801561056457600080fd5b5061056d6113bd565b60405161057a91906131a6565b60405180910390f35b34801561058f57600080fd5b5061059861144f565b6040516105a59190613488565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190612740565b611455565b005b3480156105e357600080fd5b506105fe60048036038101906105f991906126c5565b61146b565b005b34801561060c57600080fd5b5061062760048036038101906106229190612874565b6114cd565b60405161063491906131a6565b60405180910390f35b34801561064957600080fd5b50610652611574565b60405161065f9190613488565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061263a565b61157a565b60405161069c919061318b565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612611565b61160e565b005b3480156106da57600080fd5b506106e3611706565b6040516106f0919061318b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d382611719565b5b9050919050565b6107e3611783565b73ffffffffffffffffffffffffffffffffffffffff1661080161130d565b73ffffffffffffffffffffffffffffffffffffffff1614610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906133c8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461088390613742565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90613742565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b60006008549050600660149054906101000a900460ff161561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490613208565b60405180910390fd5b600a548260085461096e9190613577565b11156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906131c8565b60405180910390fd5b600b54826008546109c09190613577565b1180156109d95750600660159054906101000a900460ff165b15610a7657601f8210610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890613248565b60405180910390fd5b81600954610a2f91906135fe565b341015610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890613328565b60405180910390fd5b610b5a565b600b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ac39190613577565b10610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613428565b60405180910390fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b529190613577565b925050819055505b8160086000828254610b6c9190613577565b9250508190555060005b82811015610ba657610b93338284610b8e9190613577565b61178b565b8080610b9e90613774565b915050610b76565b505050565b6000610bb682611959565b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec906133a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c3b82610f96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613448565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ccb611783565b73ffffffffffffffffffffffffffffffffffffffff161480610cfa5750610cf981610cf4611783565b61157a565b5b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613308565b60405180910390fd5b610d4383836119c5565b505050565b60085481565b610d5f610d59611783565b82611a7e565b610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613468565b60405180910390fd5b610da9838383611b5c565b505050565b610db6611783565b73ffffffffffffffffffffffffffffffffffffffff16610dd461130d565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906133c8565b60405180910390fd5b80600b8190555050565b610e4f8383836040518060200160405280600081525061146b565b505050565b610e5c611783565b73ffffffffffffffffffffffffffffffffffffffff16610e7a61130d565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906133c8565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610ef5611783565b73ffffffffffffffffffffffffffffffffffffffff16610f1361130d565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f60906133c8565b60405180910390fd5b8060079080519060200190610f7f929190612435565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613368565b60405180910390fd5b80915050919050565b611050611783565b73ffffffffffffffffffffffffffffffffffffffff1661106e61130d565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906133c8565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613348565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118e611783565b73ffffffffffffffffffffffffffffffffffffffff166111ac61130d565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906133c8565b60405180910390fd5b61120c6000611db8565b565b600b5481565b61121c611783565b73ffffffffffffffffffffffffffffffffffffffff1661123a61130d565b73ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906133c8565b60405180910390fd5b61129861130d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906131e8565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133f611783565b73ffffffffffffffffffffffffffffffffffffffff1661135d61130d565b73ffffffffffffffffffffffffffffffffffffffff16146113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa906133c8565b60405180910390fd5b8060098190555050565b6060600180546113cc90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546113f890613742565b80156114455780601f1061141a57610100808354040283529160200191611445565b820191906000526020600020905b81548152906001019060200180831161142857829003601f168201915b5050505050905090565b60095481565b611467611460611783565b8383611e7e565b5050565b61147c611476611783565b83611a7e565b6114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613468565b60405180910390fd5b6114c784848484611feb565b50505050565b60606114d882611959565b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613408565b60405180910390fd5b6000611521612047565b90506000815111611541576040518060200160405280600081525061156c565b8061154b846120d9565b60405160200161155c9291906130f5565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611616611783565b73ffffffffffffffffffffffffffffffffffffffff1661163461130d565b73ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906133c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613268565b60405180910390fd5b61170381611db8565b50565b600660159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613388565b60405180910390fd5b61180481611959565b15611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90613288565b60405180910390fd5b61185060008383612286565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a09190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a3883610f96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a8982611959565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf906132e8565b60405180910390fd5b6000611ad383610f96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b4257508373ffffffffffffffffffffffffffffffffffffffff16611b2a84610bab565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b535750611b52818561157a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b7c82610f96565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906133e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906132a8565b60405180910390fd5b611c4d838383612286565b611c586000826119c5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca89190613658565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cff9190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906132c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fde919061318b565b60405180910390a3505050565b611ff6848484611b5c565b6120028484848461228b565b612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613228565b60405180910390fd5b50505050565b60606007805461205690613742565b80601f016020809104026020016040519081016040528092919081815260200182805461208290613742565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b60606000821415612121576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612281565b600082905060005b6000821461215357808061213c90613774565b915050600a8261214c91906135cd565b9150612129565b60008167ffffffffffffffff811115612195577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121c75781602001600182028036833780820191505090505b5090505b6000851461227a576001826121e09190613658565b9150600a856121ef91906137bd565b60306121fb9190613577565b60f81b818381518110612237577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561227391906135cd565b94506121cb565b8093505050505b919050565b505050565b60006122ac8473ffffffffffffffffffffffffffffffffffffffff16612422565b15612415578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d5611783565b8786866040518563ffffffff1660e01b81526004016122f7949392919061313f565b602060405180830381600087803b15801561231157600080fd5b505af192505050801561234257506040513d601f19601f8201168201806040525081019061233f919061280a565b60015b6123c5573d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b506000815114156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613228565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241a565b600190505b949350505050565b600080823b905060008111915050919050565b82805461244190613742565b90600052602060002090601f01602090048101928261246357600085556124aa565b82601f1061247c57805160ff19168380011785556124aa565b828001600101855582156124aa579182015b828111156124a957825182559160200191906001019061248e565b5b5090506124b791906124bb565b5090565b5b808211156124d45760008160009055506001016124bc565b5090565b60006124eb6124e6846134d4565b6134a3565b90508281526020810184848401111561250357600080fd5b61250e848285613700565b509392505050565b600061252961252484613504565b6134a3565b90508281526020810184848401111561254157600080fd5b61254c848285613700565b509392505050565b600081359050612563816138bb565b92915050565b600081359050612578816138d2565b92915050565b60008135905061258d816138e9565b92915050565b6000815190506125a2816138e9565b92915050565b600082601f8301126125b957600080fd5b81356125c98482602086016124d8565b91505092915050565b600082601f8301126125e357600080fd5b81356125f3848260208601612516565b91505092915050565b60008135905061260b81613900565b92915050565b60006020828403121561262357600080fd5b600061263184828501612554565b91505092915050565b6000806040838503121561264d57600080fd5b600061265b85828601612554565b925050602061266c85828601612554565b9150509250929050565b60008060006060848603121561268b57600080fd5b600061269986828701612554565b93505060206126aa86828701612554565b92505060406126bb868287016125fc565b9150509250925092565b600080600080608085870312156126db57600080fd5b60006126e987828801612554565b94505060206126fa87828801612554565b935050604061270b878288016125fc565b925050606085013567ffffffffffffffff81111561272857600080fd5b612734878288016125a8565b91505092959194509250565b6000806040838503121561275357600080fd5b600061276185828601612554565b925050602061277285828601612569565b9150509250929050565b6000806040838503121561278f57600080fd5b600061279d85828601612554565b92505060206127ae858286016125fc565b9150509250929050565b6000602082840312156127ca57600080fd5b60006127d884828501612569565b91505092915050565b6000602082840312156127f357600080fd5b60006128018482850161257e565b91505092915050565b60006020828403121561281c57600080fd5b600061282a84828501612593565b91505092915050565b60006020828403121561284557600080fd5b600082013567ffffffffffffffff81111561285f57600080fd5b61286b848285016125d2565b91505092915050565b60006020828403121561288657600080fd5b6000612894848285016125fc565b91505092915050565b6128a68161368c565b82525050565b6128b58161369e565b82525050565b60006128c682613534565b6128d0818561354a565b93506128e081856020860161370f565b6128e9816138aa565b840191505092915050565b60006128ff8261353f565b612909818561355b565b935061291981856020860161370f565b612922816138aa565b840191505092915050565b60006129388261353f565b612942818561356c565b935061295281856020860161370f565b80840191505092915050565b600061296b60128361355b565b91507f45584345454453204d415820535550504c5900000000000000000000000000006000830152602082019050919050565b60006129ab60158361355b565b91507f574954484452415720554e5355434345535346554c00000000000000000000006000830152602082019050919050565b60006129eb600e8361355b565b91507f4d494e54494e47205041555345440000000000000000000000000000000000006000830152602082019050919050565b6000612a2b60328361355b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612a9160198361355b565b91507f4d415820504552205452414e53414354494f4e204953203330000000000000006000830152602082019050919050565b6000612ad160268361355b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b37601c8361355b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612b7760248361355b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdd60198361355b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612c1d602c8361355b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c8360388361355b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612ce9600e8361355b565b91507f4e4f5420454e4f554748204554480000000000000000000000000000000000006000830152602082019050919050565b6000612d29602a8361355b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8f60298361355b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df560208361355b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612e35602c8361355b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e9b60058361356c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612edb60208361355b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612f1b60298361355b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f81602f8361355b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612fe7601f8361355b565b91507f4d41582046524545204d494e5453205045522057414c4c4554204953203130006000830152602082019050919050565b600061302760218361355b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308d60318361355b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6130ef816136f6565b82525050565b6000613101828561292d565b915061310d828461292d565b915061311882612e8e565b91508190509392505050565b6000602082019050613139600083018461289d565b92915050565b6000608082019050613154600083018761289d565b613161602083018661289d565b61316e60408301856130e6565b818103606083015261318081846128bb565b905095945050505050565b60006020820190506131a060008301846128ac565b92915050565b600060208201905081810360008301526131c081846128f4565b905092915050565b600060208201905081810360008301526131e18161295e565b9050919050565b600060208201905081810360008301526132018161299e565b9050919050565b60006020820190508181036000830152613221816129de565b9050919050565b6000602082019050818103600083015261324181612a1e565b9050919050565b6000602082019050818103600083015261326181612a84565b9050919050565b6000602082019050818103600083015261328181612ac4565b9050919050565b600060208201905081810360008301526132a181612b2a565b9050919050565b600060208201905081810360008301526132c181612b6a565b9050919050565b600060208201905081810360008301526132e181612bd0565b9050919050565b6000602082019050818103600083015261330181612c10565b9050919050565b6000602082019050818103600083015261332181612c76565b9050919050565b6000602082019050818103600083015261334181612cdc565b9050919050565b6000602082019050818103600083015261336181612d1c565b9050919050565b6000602082019050818103600083015261338181612d82565b9050919050565b600060208201905081810360008301526133a181612de8565b9050919050565b600060208201905081810360008301526133c181612e28565b9050919050565b600060208201905081810360008301526133e181612ece565b9050919050565b6000602082019050818103600083015261340181612f0e565b9050919050565b6000602082019050818103600083015261342181612f74565b9050919050565b6000602082019050818103600083015261344181612fda565b9050919050565b600060208201905081810360008301526134618161301a565b9050919050565b6000602082019050818103600083015261348181613080565b9050919050565b600060208201905061349d60008301846130e6565b92915050565b6000604051905081810181811067ffffffffffffffff821117156134ca576134c961387b565b5b8060405250919050565b600067ffffffffffffffff8211156134ef576134ee61387b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561351f5761351e61387b565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613582826136f6565b915061358d836136f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c2576135c16137ee565b5b828201905092915050565b60006135d8826136f6565b91506135e3836136f6565b9250826135f3576135f261381d565b5b828204905092915050565b6000613609826136f6565b9150613614836136f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364d5761364c6137ee565b5b828202905092915050565b6000613663826136f6565b915061366e836136f6565b925082821015613681576136806137ee565b5b828203905092915050565b6000613697826136d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372d578082015181840152602081019050613712565b8381111561373c576000848401525b50505050565b6000600282049050600182168061375a57607f821691505b6020821081141561376e5761376d61384c565b5b50919050565b600061377f826136f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b2576137b16137ee565b5b600182019050919050565b60006137c8826136f6565b91506137d3836136f6565b9250826137e3576137e261381d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6138c48161368c565b81146138cf57600080fd5b50565b6138db8161369e565b81146138e657600080fd5b50565b6138f2816136aa565b81146138fd57600080fd5b50565b613909816136f6565b811461391457600080fd5b5056fea2646970667358221220874b6fc0ea777acfa2d3f4de80ff958b984984a809e0796bc77610fb131c7d3b64736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f7578063a035b1fe11610095578063d5abeb0111610064578063d5abeb011461063d578063e985e9c514610668578063f2fde38b146106a5578063f56ccb5b146106ce576101cd565b8063a035b1fe14610583578063a22cb465146105ae578063b88d4fde146105d7578063c87b56dd14610600576101cd565b8063853828b6116100d1578063853828b6146104ed5780638da5cb5b1461050457806391b7f5ed1461052f57806395d89b4114610558576101cd565b806370a082311461046e578063715018a6146104ab578063732496c9146104c2576101cd565b806323b872dd1161016f57806355f804b31161013e57806355f804b3146103b45780635c975abb146103dd5780636352211e146104085780636f8b44b014610445576101cd565b806323b872dd14610310578063407043fc1461033957806342842e0e1461036257806353f9c7f91461038b576101cd565b806307883703116101ab5780630788370314610263578063081812fc1461027f578063095ea7b3146102bc57806318160ddd146102e5576101cd565b806301ffc9a7146101d257806302329a291461020f57806306fdde0314610238575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f491906127e1565b6106f9565b604051610206919061318b565b60405180910390f35b34801561021b57600080fd5b50610236600480360381019061023191906127b8565b6107db565b005b34801561024457600080fd5b5061024d610874565b60405161025a91906131a6565b60405180910390f35b61027d60048036038101906102789190612874565b610906565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612874565b610bab565b6040516102b39190613124565b60405180910390f35b3480156102c857600080fd5b506102e360048036038101906102de919061277c565b610c30565b005b3480156102f157600080fd5b506102fa610d48565b6040516103079190613488565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612676565b610d4e565b005b34801561034557600080fd5b50610360600480360381019061035b9190612874565b610dae565b005b34801561036e57600080fd5b5061038960048036038101906103849190612676565b610e34565b005b34801561039757600080fd5b506103b260048036038101906103ad91906127b8565b610e54565b005b3480156103c057600080fd5b506103db60048036038101906103d69190612833565b610eed565b005b3480156103e957600080fd5b506103f2610f83565b6040516103ff919061318b565b60405180910390f35b34801561041457600080fd5b5061042f600480360381019061042a9190612874565b610f96565b60405161043c9190613124565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190612874565b611048565b005b34801561047a57600080fd5b5061049560048036038101906104909190612611565b6110ce565b6040516104a29190613488565b60405180910390f35b3480156104b757600080fd5b506104c0611186565b005b3480156104ce57600080fd5b506104d761120e565b6040516104e49190613488565b60405180910390f35b3480156104f957600080fd5b50610502611214565b005b34801561051057600080fd5b5061051961130d565b6040516105269190613124565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190612874565b611337565b005b34801561056457600080fd5b5061056d6113bd565b60405161057a91906131a6565b60405180910390f35b34801561058f57600080fd5b5061059861144f565b6040516105a59190613488565b60405180910390f35b3480156105ba57600080fd5b506105d560048036038101906105d09190612740565b611455565b005b3480156105e357600080fd5b506105fe60048036038101906105f991906126c5565b61146b565b005b34801561060c57600080fd5b5061062760048036038101906106229190612874565b6114cd565b60405161063491906131a6565b60405180910390f35b34801561064957600080fd5b50610652611574565b60405161065f9190613488565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061263a565b61157a565b60405161069c919061318b565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c79190612611565b61160e565b005b3480156106da57600080fd5b506106e3611706565b6040516106f0919061318b565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107c457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107d457506107d382611719565b5b9050919050565b6107e3611783565b73ffffffffffffffffffffffffffffffffffffffff1661080161130d565b73ffffffffffffffffffffffffffffffffffffffff1614610857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084e906133c8565b60405180910390fd5b80600660146101000a81548160ff02191690831515021790555050565b60606000805461088390613742565b80601f01602080910402602001604051908101604052809291908181526020018280546108af90613742565b80156108fc5780601f106108d1576101008083540402835291602001916108fc565b820191906000526020600020905b8154815290600101906020018083116108df57829003601f168201915b5050505050905090565b60006008549050600660149054906101000a900460ff161561095d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095490613208565b60405180910390fd5b600a548260085461096e9190613577565b11156109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a6906131c8565b60405180910390fd5b600b54826008546109c09190613577565b1180156109d95750600660159054906101000a900460ff165b15610a7657601f8210610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890613248565b60405180910390fd5b81600954610a2f91906135fe565b341015610a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6890613328565b60405180910390fd5b610b5a565b600b82600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ac39190613577565b10610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa90613428565b60405180910390fd5b81600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610b529190613577565b925050819055505b8160086000828254610b6c9190613577565b9250508190555060005b82811015610ba657610b93338284610b8e9190613577565b61178b565b8080610b9e90613774565b915050610b76565b505050565b6000610bb682611959565b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec906133a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c3b82610f96565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca390613448565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ccb611783565b73ffffffffffffffffffffffffffffffffffffffff161480610cfa5750610cf981610cf4611783565b61157a565b5b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090613308565b60405180910390fd5b610d4383836119c5565b505050565b60085481565b610d5f610d59611783565b82611a7e565b610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590613468565b60405180910390fd5b610da9838383611b5c565b505050565b610db6611783565b73ffffffffffffffffffffffffffffffffffffffff16610dd461130d565b73ffffffffffffffffffffffffffffffffffffffff1614610e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e21906133c8565b60405180910390fd5b80600b8190555050565b610e4f8383836040518060200160405280600081525061146b565b505050565b610e5c611783565b73ffffffffffffffffffffffffffffffffffffffff16610e7a61130d565b73ffffffffffffffffffffffffffffffffffffffff1614610ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec7906133c8565b60405180910390fd5b80600660156101000a81548160ff02191690831515021790555050565b610ef5611783565b73ffffffffffffffffffffffffffffffffffffffff16610f1361130d565b73ffffffffffffffffffffffffffffffffffffffff1614610f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f60906133c8565b60405180910390fd5b8060079080519060200190610f7f929190612435565b5050565b600660149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613368565b60405180910390fd5b80915050919050565b611050611783565b73ffffffffffffffffffffffffffffffffffffffff1661106e61130d565b73ffffffffffffffffffffffffffffffffffffffff16146110c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bb906133c8565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690613348565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61118e611783565b73ffffffffffffffffffffffffffffffffffffffff166111ac61130d565b73ffffffffffffffffffffffffffffffffffffffff1614611202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f9906133c8565b60405180910390fd5b61120c6000611db8565b565b600b5481565b61121c611783565b73ffffffffffffffffffffffffffffffffffffffff1661123a61130d565b73ffffffffffffffffffffffffffffffffffffffff1614611290576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611287906133c8565b60405180910390fd5b61129861130d565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505061130b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611302906131e8565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133f611783565b73ffffffffffffffffffffffffffffffffffffffff1661135d61130d565b73ffffffffffffffffffffffffffffffffffffffff16146113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa906133c8565b60405180910390fd5b8060098190555050565b6060600180546113cc90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546113f890613742565b80156114455780601f1061141a57610100808354040283529160200191611445565b820191906000526020600020905b81548152906001019060200180831161142857829003601f168201915b5050505050905090565b60095481565b611467611460611783565b8383611e7e565b5050565b61147c611476611783565b83611a7e565b6114bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b290613468565b60405180910390fd5b6114c784848484611feb565b50505050565b60606114d882611959565b611517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150e90613408565b60405180910390fd5b6000611521612047565b90506000815111611541576040518060200160405280600081525061156c565b8061154b846120d9565b60405160200161155c9291906130f5565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611616611783565b73ffffffffffffffffffffffffffffffffffffffff1661163461130d565b73ffffffffffffffffffffffffffffffffffffffff161461168a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611681906133c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f190613268565b60405180910390fd5b61170381611db8565b50565b600660159054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f290613388565b60405180910390fd5b61180481611959565b15611844576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183b90613288565b60405180910390fd5b61185060008383612286565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118a09190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a3883610f96565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a8982611959565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf906132e8565b60405180910390fd5b6000611ad383610f96565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b4257508373ffffffffffffffffffffffffffffffffffffffff16611b2a84610bab565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b535750611b52818561157a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b7c82610f96565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc9906133e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c39906132a8565b60405180910390fd5b611c4d838383612286565b611c586000826119c5565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ca89190613658565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cff9190613577565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee4906132c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fde919061318b565b60405180910390a3505050565b611ff6848484611b5c565b6120028484848461228b565b612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890613228565b60405180910390fd5b50505050565b60606007805461205690613742565b80601f016020809104026020016040519081016040528092919081815260200182805461208290613742565b80156120cf5780601f106120a4576101008083540402835291602001916120cf565b820191906000526020600020905b8154815290600101906020018083116120b257829003601f168201915b5050505050905090565b60606000821415612121576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612281565b600082905060005b6000821461215357808061213c90613774565b915050600a8261214c91906135cd565b9150612129565b60008167ffffffffffffffff811115612195577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156121c75781602001600182028036833780820191505090505b5090505b6000851461227a576001826121e09190613658565b9150600a856121ef91906137bd565b60306121fb9190613577565b60f81b818381518110612237577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561227391906135cd565b94506121cb565b8093505050505b919050565b505050565b60006122ac8473ffffffffffffffffffffffffffffffffffffffff16612422565b15612415578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122d5611783565b8786866040518563ffffffff1660e01b81526004016122f7949392919061313f565b602060405180830381600087803b15801561231157600080fd5b505af192505050801561234257506040513d601f19601f8201168201806040525081019061233f919061280a565b60015b6123c5573d8060008114612372576040519150601f19603f3d011682016040523d82523d6000602084013e612377565b606091505b506000815114156123bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b490613228565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061241a565b600190505b949350505050565b600080823b905060008111915050919050565b82805461244190613742565b90600052602060002090601f01602090048101928261246357600085556124aa565b82601f1061247c57805160ff19168380011785556124aa565b828001600101855582156124aa579182015b828111156124a957825182559160200191906001019061248e565b5b5090506124b791906124bb565b5090565b5b808211156124d45760008160009055506001016124bc565b5090565b60006124eb6124e6846134d4565b6134a3565b90508281526020810184848401111561250357600080fd5b61250e848285613700565b509392505050565b600061252961252484613504565b6134a3565b90508281526020810184848401111561254157600080fd5b61254c848285613700565b509392505050565b600081359050612563816138bb565b92915050565b600081359050612578816138d2565b92915050565b60008135905061258d816138e9565b92915050565b6000815190506125a2816138e9565b92915050565b600082601f8301126125b957600080fd5b81356125c98482602086016124d8565b91505092915050565b600082601f8301126125e357600080fd5b81356125f3848260208601612516565b91505092915050565b60008135905061260b81613900565b92915050565b60006020828403121561262357600080fd5b600061263184828501612554565b91505092915050565b6000806040838503121561264d57600080fd5b600061265b85828601612554565b925050602061266c85828601612554565b9150509250929050565b60008060006060848603121561268b57600080fd5b600061269986828701612554565b93505060206126aa86828701612554565b92505060406126bb868287016125fc565b9150509250925092565b600080600080608085870312156126db57600080fd5b60006126e987828801612554565b94505060206126fa87828801612554565b935050604061270b878288016125fc565b925050606085013567ffffffffffffffff81111561272857600080fd5b612734878288016125a8565b91505092959194509250565b6000806040838503121561275357600080fd5b600061276185828601612554565b925050602061277285828601612569565b9150509250929050565b6000806040838503121561278f57600080fd5b600061279d85828601612554565b92505060206127ae858286016125fc565b9150509250929050565b6000602082840312156127ca57600080fd5b60006127d884828501612569565b91505092915050565b6000602082840312156127f357600080fd5b60006128018482850161257e565b91505092915050565b60006020828403121561281c57600080fd5b600061282a84828501612593565b91505092915050565b60006020828403121561284557600080fd5b600082013567ffffffffffffffff81111561285f57600080fd5b61286b848285016125d2565b91505092915050565b60006020828403121561288657600080fd5b6000612894848285016125fc565b91505092915050565b6128a68161368c565b82525050565b6128b58161369e565b82525050565b60006128c682613534565b6128d0818561354a565b93506128e081856020860161370f565b6128e9816138aa565b840191505092915050565b60006128ff8261353f565b612909818561355b565b935061291981856020860161370f565b612922816138aa565b840191505092915050565b60006129388261353f565b612942818561356c565b935061295281856020860161370f565b80840191505092915050565b600061296b60128361355b565b91507f45584345454453204d415820535550504c5900000000000000000000000000006000830152602082019050919050565b60006129ab60158361355b565b91507f574954484452415720554e5355434345535346554c00000000000000000000006000830152602082019050919050565b60006129eb600e8361355b565b91507f4d494e54494e47205041555345440000000000000000000000000000000000006000830152602082019050919050565b6000612a2b60328361355b565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b6000612a9160198361355b565b91507f4d415820504552205452414e53414354494f4e204953203330000000000000006000830152602082019050919050565b6000612ad160268361355b565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612b37601c8361355b565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612b7760248361355b565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612bdd60198361355b565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612c1d602c8361355b565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612c8360388361355b565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000612ce9600e8361355b565b91507f4e4f5420454e4f554748204554480000000000000000000000000000000000006000830152602082019050919050565b6000612d29602a8361355b565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612d8f60298361355b565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612df560208361355b565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000612e35602c8361355b565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000612e9b60058361356c565b91507f2e6a736f6e0000000000000000000000000000000000000000000000000000006000830152600582019050919050565b6000612edb60208361355b565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000612f1b60298361355b565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000612f81602f8361355b565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000612fe7601f8361355b565b91507f4d41582046524545204d494e5453205045522057414c4c4554204953203130006000830152602082019050919050565b600061302760218361355b565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061308d60318361355b565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6130ef816136f6565b82525050565b6000613101828561292d565b915061310d828461292d565b915061311882612e8e565b91508190509392505050565b6000602082019050613139600083018461289d565b92915050565b6000608082019050613154600083018761289d565b613161602083018661289d565b61316e60408301856130e6565b818103606083015261318081846128bb565b905095945050505050565b60006020820190506131a060008301846128ac565b92915050565b600060208201905081810360008301526131c081846128f4565b905092915050565b600060208201905081810360008301526131e18161295e565b9050919050565b600060208201905081810360008301526132018161299e565b9050919050565b60006020820190508181036000830152613221816129de565b9050919050565b6000602082019050818103600083015261324181612a1e565b9050919050565b6000602082019050818103600083015261326181612a84565b9050919050565b6000602082019050818103600083015261328181612ac4565b9050919050565b600060208201905081810360008301526132a181612b2a565b9050919050565b600060208201905081810360008301526132c181612b6a565b9050919050565b600060208201905081810360008301526132e181612bd0565b9050919050565b6000602082019050818103600083015261330181612c10565b9050919050565b6000602082019050818103600083015261332181612c76565b9050919050565b6000602082019050818103600083015261334181612cdc565b9050919050565b6000602082019050818103600083015261336181612d1c565b9050919050565b6000602082019050818103600083015261338181612d82565b9050919050565b600060208201905081810360008301526133a181612de8565b9050919050565b600060208201905081810360008301526133c181612e28565b9050919050565b600060208201905081810360008301526133e181612ece565b9050919050565b6000602082019050818103600083015261340181612f0e565b9050919050565b6000602082019050818103600083015261342181612f74565b9050919050565b6000602082019050818103600083015261344181612fda565b9050919050565b600060208201905081810360008301526134618161301a565b9050919050565b6000602082019050818103600083015261348181613080565b9050919050565b600060208201905061349d60008301846130e6565b92915050565b6000604051905081810181811067ffffffffffffffff821117156134ca576134c961387b565b5b8060405250919050565b600067ffffffffffffffff8211156134ef576134ee61387b565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff82111561351f5761351e61387b565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613582826136f6565b915061358d836136f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135c2576135c16137ee565b5b828201905092915050565b60006135d8826136f6565b91506135e3836136f6565b9250826135f3576135f261381d565b5b828204905092915050565b6000613609826136f6565b9150613614836136f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561364d5761364c6137ee565b5b828202905092915050565b6000613663826136f6565b915061366e836136f6565b925082821015613681576136806137ee565b5b828203905092915050565b6000613697826136d6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561372d578082015181840152602081019050613712565b8381111561373c576000848401525b50505050565b6000600282049050600182168061375a57607f821691505b6020821081141561376e5761376d61384c565b5b50919050565b600061377f826136f6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137b2576137b16137ee565b5b600182019050919050565b60006137c8826136f6565b91506137d3836136f6565b9250826137e3576137e261381d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6138c48161368c565b81146138cf57600080fd5b50565b6138db8161369e565b81146138e657600080fd5b50565b6138f2816136aa565b81146138fd57600080fd5b50565b613909816136f6565b811461391457600080fd5b5056fea2646970667358221220874b6fc0ea777acfa2d3f4de80ff958b984984a809e0796bc77610fb131c7d3b64736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

36487:2014:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21326:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38183:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22271:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36953:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23957:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23480:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36631:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24707:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38067:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25117:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38260:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37731:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36533:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21965:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37963:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21695:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35606:103;;;;;;;;;;;;;:::i;:::-;;36740:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38346:152;;;;;;;;;;;;;:::i;:::-;;34955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37875:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22440:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36666:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24250:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25373:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22615:461;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36704:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24476:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36563:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21326:305;21428:4;21480:25;21465:40;;;:11;:40;;;;:105;;;;21537:33;21522:48;;;:11;:48;;;;21465:105;:158;;;;21587:36;21611:11;21587:23;:36::i;:::-;21465:158;21445:178;;21326:305;;;:::o;38183:71::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38243:5:::1;38234:6;;:14;;;;;;;;;;;;;;;;;;38183:71:::0;:::o;22271:100::-;22325:13;22358:5;22351:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22271:100;:::o;36953:658::-;37002:14;37019:11;;37002:28;;37048:6;;;;;;;;;;;37047:7;37039:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;37109:9;;37102:3;37088:11;;:17;;;;:::i;:::-;:30;;37080:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37174:12;;37168:3;37154:11;;:17;;;;:::i;:::-;:32;:47;;;;;37190:11;;;;;;;;;;;37154:47;37150:345;;;37226:2;37220:3;:8;37212:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;37296:3;37288:5;;:11;;;;:::i;:::-;37275:9;:24;;37267:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37150:345;;;37391:2;37385:3;37359:11;:23;37371:10;37359:23;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:34;37341:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;37484:3;37457:11;:23;37469:10;37457:23;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;37150:345;37518:3;37503:11;;:18;;;;;;;:::i;:::-;;;;;;;;37535:9;37530:76;37550:3;37546:1;:7;37530:76;;;37569:29;37575:10;37596:1;37587:6;:10;;;;:::i;:::-;37569:5;:29::i;:::-;37555:3;;;;;:::i;:::-;;;;37530:76;;;;36953:658;;:::o;23957:221::-;24033:7;24061:16;24069:7;24061;:16::i;:::-;24053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24146:15;:24;24162:7;24146:24;;;;;;;;;;;;;;;;;;;;;24139:31;;23957:221;;;:::o;23480:411::-;23561:13;23577:23;23592:7;23577:14;:23::i;:::-;23561:39;;23625:5;23619:11;;:2;:11;;;;23611:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23719:5;23703:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23728:37;23745:5;23752:12;:10;:12::i;:::-;23728:16;:37::i;:::-;23703:62;23681:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23862:21;23871:2;23875:7;23862:8;:21::i;:::-;23480:411;;;:::o;36631:30::-;;;;:::o;24707:339::-;24902:41;24921:12;:10;:12::i;:::-;24935:7;24902:18;:41::i;:::-;24894:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25010:28;25020:4;25026:2;25030:7;25010:9;:28::i;:::-;24707:339;;;:::o;38067:110::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38156:15:::1;38141:12;:30;;;;38067:110:::0;:::o;25117:185::-;25255:39;25272:4;25278:2;25282:7;25255:39;;;;;;;;;;;;:16;:39::i;:::-;25117:185;;;:::o;38260:80::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38329:5:::1;38315:11;;:19;;;;;;;;;;;;;;;;;;38260:80:::0;:::o;37731:96::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37814:7:::1;37798:13;:23;;;;;;;;;;;;:::i;:::-;;37731:96:::0;:::o;36533:25::-;;;;;;;;;;;;;:::o;21965:239::-;22037:7;22057:13;22073:7;:16;22081:7;22073:16;;;;;;;;;;;;;;;;;;;;;22057:32;;22125:1;22108:19;;:5;:19;;;;22100:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22191:5;22184:12;;;21965:239;;;:::o;37963:98::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38043:12:::1;38031:9;:24;;;;37963:98:::0;:::o;21695:208::-;21767:7;21812:1;21795:19;;:5;:19;;;;21787:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21879:9;:16;21889:5;21879:16;;;;;;;;;;;;;;;;21872:23;;21695:208;;;:::o;35606:103::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35671:30:::1;35698:1;35671:18;:30::i;:::-;35606:103::o:0;36740:34::-;;;;:::o;38346:152::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38417:7:::1;:5;:7::i;:::-;38409:21;;:44;38431:21;38409:44;;;;;;;;;;;;;;;;;;;;;;;38393:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;38346:152::o:0;34955:87::-;35001:7;35028:6;;;;;;;;;;;35021:13;;34955:87;:::o;37875:82::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37943:8:::1;37935:5;:16;;;;37875:82:::0;:::o;22440:104::-;22496:13;22529:7;22522:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22440:104;:::o;36666:33::-;;;;:::o;24250:155::-;24345:52;24364:12;:10;:12::i;:::-;24378:8;24388;24345:18;:52::i;:::-;24250:155;;:::o;25373:328::-;25548:41;25567:12;:10;:12::i;:::-;25581:7;25548:18;:41::i;:::-;25540:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25654:39;25668:4;25674:2;25678:7;25687:5;25654:13;:39::i;:::-;25373:328;;;;:::o;22615:461::-;22688:13;22722:16;22730:7;22722;:16::i;:::-;22714:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22803:21;22827:10;:8;:10::i;:::-;22803:34;;22997:1;22979:7;22973:21;:25;:95;;;;;;;;;;;;;;;;;23025:7;23034:18;:7;:16;:18::i;:::-;23008:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22973:95;22966:102;;;22615:461;;;:::o;36704:31::-;;;;:::o;24476:164::-;24573:4;24597:18;:25;24616:5;24597:25;;;;;;;;;;;;;;;:35;24623:8;24597:35;;;;;;;;;;;;;;;;;;;;;;;;;24590:42;;24476:164;;;;:::o;35864:201::-;35186:12;:10;:12::i;:::-;35175:23;;:7;:5;:7::i;:::-;:23;;;35167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35973:1:::1;35953:22;;:8;:22;;;;35945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36029:28;36048:8;36029:18;:28::i;:::-;35864:201:::0;:::o;36563:30::-;;;;;;;;;;;;;:::o;13202:157::-;13287:4;13326:25;13311:40;;;:11;:40;;;;13304:47;;13202:157;;;:::o;19720:98::-;19773:7;19800:10;19793:17;;19720:98;:::o;29189:382::-;29283:1;29269:16;;:2;:16;;;;29261:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29342:16;29350:7;29342;:16::i;:::-;29341:17;29333:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29404:45;29433:1;29437:2;29441:7;29404:20;:45::i;:::-;29479:1;29462:9;:13;29472:2;29462:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29510:2;29491:7;:16;29499:7;29491:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29555:7;29551:2;29530:33;;29547:1;29530:33;;;;;;;;;;;;29189:382;;:::o;27211:127::-;27276:4;27328:1;27300:30;;:7;:16;27308:7;27300:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27293:37;;27211:127;;;:::o;31193:174::-;31295:2;31268:15;:24;31284:7;31268:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31351:7;31347:2;31313:46;;31322:23;31337:7;31322:14;:23::i;:::-;31313:46;;;;;;;;;;;;31193:174;;:::o;27505:348::-;27598:4;27623:16;27631:7;27623;:16::i;:::-;27615:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27699:13;27715:23;27730:7;27715:14;:23::i;:::-;27699:39;;27768:5;27757:16;;:7;:16;;;:51;;;;27801:7;27777:31;;:20;27789:7;27777:11;:20::i;:::-;:31;;;27757:51;:87;;;;27812:32;27829:5;27836:7;27812:16;:32::i;:::-;27757:87;27749:96;;;27505:348;;;;:::o;30497:578::-;30656:4;30629:31;;:23;30644:7;30629:14;:23::i;:::-;:31;;;30621:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30739:1;30725:16;;:2;:16;;;;30717:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30795:39;30816:4;30822:2;30826:7;30795:20;:39::i;:::-;30899:29;30916:1;30920:7;30899:8;:29::i;:::-;30960:1;30941:9;:15;30951:4;30941:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30989:1;30972:9;:13;30982:2;30972:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31020:2;31001:7;:16;31009:7;31001:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31059:7;31055:2;31040:27;;31049:4;31040:27;;;;;;;;;;;;30497:578;;;:::o;36225:191::-;36299:16;36318:6;;;;;;;;;;;36299:25;;36344:8;36335:6;;:17;;;;;;;;;;;;;;;;;;36399:8;36368:40;;36389:8;36368:40;;;;;;;;;;;;36225:191;;:::o;31509:315::-;31664:8;31655:17;;:5;:17;;;;31647:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31751:8;31713:18;:25;31732:5;31713:25;;;;;;;;;;;;;;;:35;31739:8;31713:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31797:8;31775:41;;31790:5;31775:41;;;31807:8;31775:41;;;;;;:::i;:::-;;;;;;;;31509:315;;;:::o;26583:::-;26740:28;26750:4;26756:2;26760:7;26740:9;:28::i;:::-;26787:48;26810:4;26816:2;26820:7;26829:5;26787:22;:48::i;:::-;26779:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26583:315;;;;:::o;37617:108::-;37677:13;37706;37699:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37617:108;:::o;479:723::-;535:13;765:1;756:5;:10;752:53;;;783:10;;;;;;;;;;;;;;;;;;;;;752:53;815:12;830:5;815:20;;846:14;871:78;886:1;878:4;:9;871:78;;904:8;;;;;:::i;:::-;;;;935:2;927:10;;;;;:::i;:::-;;;871:78;;;959:19;991:6;981:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;959:39;;1009:154;1025:1;1016:5;:10;1009:154;;1053:1;1043:11;;;;;:::i;:::-;;;1120:2;1112:5;:10;;;;:::i;:::-;1099:2;:24;;;;:::i;:::-;1086:39;;1069:6;1076;1069:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1149:2;1140:11;;;;;:::i;:::-;;;1009:154;;;1187:6;1173:21;;;;;479:723;;;;:::o;33760:126::-;;;;:::o;32389:799::-;32544:4;32565:15;:2;:13;;;:15::i;:::-;32561:620;;;32617:2;32601:36;;;32638:12;:10;:12::i;:::-;32652:4;32658:7;32667:5;32601:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32597:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32860:1;32843:6;:13;:18;32839:272;;;32886:60;;;;;;;;;;:::i;:::-;;;;;;;;32839:272;33061:6;33055:13;33046:6;33042:2;33038:15;33031:38;32597:529;32734:41;;;32724:51;;;:6;:51;;;;32717:58;;;;;32561:620;33165:4;33158:11;;32389:799;;;;;;;:::o;3058:387::-;3118:4;3326:12;3393:7;3381:20;3373:28;;3436:1;3429:4;:8;3422:15;;;3058:387;;;:::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:118::-;6433:24;6451:5;6433:24;:::i;:::-;6428:3;6421:37;6411:53;;:::o;6470:109::-;6551:21;6566:5;6551:21;:::i;:::-;6546:3;6539:34;6529:50;;:::o;6585:360::-;;6699:38;6731:5;6699:38;:::i;:::-;6753:70;6816:6;6811:3;6753:70;:::i;:::-;6746:77;;6832:52;6877:6;6872:3;6865:4;6858:5;6854:16;6832:52;:::i;:::-;6909:29;6931:6;6909:29;:::i;:::-;6904:3;6900:39;6893:46;;6675:270;;;;;:::o;6951:364::-;;7067:39;7100:5;7067:39;:::i;:::-;7122:71;7186:6;7181:3;7122:71;:::i;:::-;7115:78;;7202:52;7247:6;7242:3;7235:4;7228:5;7224:16;7202:52;:::i;:::-;7279:29;7301:6;7279:29;:::i;:::-;7274:3;7270:39;7263:46;;7043:272;;;;;:::o;7321:377::-;;7455:39;7488:5;7455:39;:::i;:::-;7510:89;7592:6;7587:3;7510:89;:::i;:::-;7503:96;;7608:52;7653:6;7648:3;7641:4;7634:5;7630:16;7608:52;:::i;:::-;7685:6;7680:3;7676:16;7669:23;;7431:267;;;;;:::o;7704:316::-;;7867:67;7931:2;7926:3;7867:67;:::i;:::-;7860:74;;7964:20;7960:1;7955:3;7951:11;7944:41;8011:2;8006:3;8002:12;7995:19;;7850:170;;;:::o;8026:319::-;;8189:67;8253:2;8248:3;8189:67;:::i;:::-;8182:74;;8286:23;8282:1;8277:3;8273:11;8266:44;8336:2;8331:3;8327:12;8320:19;;8172:173;;;:::o;8351:312::-;;8514:67;8578:2;8573:3;8514:67;:::i;:::-;8507:74;;8611:16;8607:1;8602:3;8598:11;8591:37;8654:2;8649:3;8645:12;8638:19;;8497:166;;;:::o;8669:382::-;;8832:67;8896:2;8891:3;8832:67;:::i;:::-;8825:74;;8929:34;8925:1;8920:3;8916:11;8909:55;8995:20;8990:2;8985:3;8981:12;8974:42;9042:2;9037:3;9033:12;9026:19;;8815:236;;;:::o;9057:323::-;;9220:67;9284:2;9279:3;9220:67;:::i;:::-;9213:74;;9317:27;9313:1;9308:3;9304:11;9297:48;9371:2;9366:3;9362:12;9355:19;;9203:177;;;:::o;9386:370::-;;9549:67;9613:2;9608:3;9549:67;:::i;:::-;9542:74;;9646:34;9642:1;9637:3;9633:11;9626:55;9712:8;9707:2;9702:3;9698:12;9691:30;9747:2;9742:3;9738:12;9731:19;;9532:224;;;:::o;9762:326::-;;9925:67;9989:2;9984:3;9925:67;:::i;:::-;9918:74;;10022:30;10018:1;10013:3;10009:11;10002:51;10079:2;10074:3;10070:12;10063:19;;9908:180;;;:::o;10094:368::-;;10257:67;10321:2;10316:3;10257:67;:::i;:::-;10250:74;;10354:34;10350:1;10345:3;10341:11;10334:55;10420:6;10415:2;10410:3;10406:12;10399:28;10453:2;10448:3;10444:12;10437:19;;10240:222;;;:::o;10468:323::-;;10631:67;10695:2;10690:3;10631:67;:::i;:::-;10624:74;;10728:27;10724:1;10719:3;10715:11;10708:48;10782:2;10777:3;10773:12;10766:19;;10614:177;;;:::o;10797:376::-;;10960:67;11024:2;11019:3;10960:67;:::i;:::-;10953:74;;11057:34;11053:1;11048:3;11044:11;11037:55;11123:14;11118:2;11113:3;11109:12;11102:36;11164:2;11159:3;11155:12;11148:19;;10943:230;;;:::o;11179:388::-;;11342:67;11406:2;11401:3;11342:67;:::i;:::-;11335:74;;11439:34;11435:1;11430:3;11426:11;11419:55;11505:26;11500:2;11495:3;11491:12;11484:48;11558:2;11553:3;11549:12;11542:19;;11325:242;;;:::o;11573:312::-;;11736:67;11800:2;11795:3;11736:67;:::i;:::-;11729:74;;11833:16;11829:1;11824:3;11820:11;11813:37;11876:2;11871:3;11867:12;11860:19;;11719:166;;;:::o;11891:374::-;;12054:67;12118:2;12113:3;12054:67;:::i;:::-;12047:74;;12151:34;12147:1;12142:3;12138:11;12131:55;12217:12;12212:2;12207:3;12203:12;12196:34;12256:2;12251:3;12247:12;12240:19;;12037:228;;;:::o;12271:373::-;;12434:67;12498:2;12493:3;12434:67;:::i;:::-;12427:74;;12531:34;12527:1;12522:3;12518:11;12511:55;12597:11;12592:2;12587:3;12583:12;12576:33;12635:2;12630:3;12626:12;12619:19;;12417:227;;;:::o;12650:330::-;;12813:67;12877:2;12872:3;12813:67;:::i;:::-;12806:74;;12910:34;12906:1;12901:3;12897:11;12890:55;12971:2;12966:3;12962:12;12955:19;;12796:184;;;:::o;12986:376::-;;13149:67;13213:2;13208:3;13149:67;:::i;:::-;13142:74;;13246:34;13242:1;13237:3;13233:11;13226:55;13312:14;13307:2;13302:3;13298:12;13291:36;13353:2;13348:3;13344:12;13337:19;;13132:230;;;:::o;13368:337::-;;13549:84;13631:1;13626:3;13549:84;:::i;:::-;13542:91;;13663:7;13659:1;13654:3;13650:11;13643:28;13697:1;13692:3;13688:11;13681:18;;13532:173;;;:::o;13711:330::-;;13874:67;13938:2;13933:3;13874:67;:::i;:::-;13867:74;;13971:34;13967:1;13962:3;13958:11;13951:55;14032:2;14027:3;14023:12;14016:19;;13857:184;;;:::o;14047:373::-;;14210:67;14274:2;14269:3;14210:67;:::i;:::-;14203:74;;14307:34;14303:1;14298:3;14294:11;14287:55;14373:11;14368:2;14363:3;14359:12;14352:33;14411:2;14406:3;14402:12;14395:19;;14193:227;;;:::o;14426:379::-;;14589:67;14653:2;14648:3;14589:67;:::i;:::-;14582:74;;14686:34;14682:1;14677:3;14673:11;14666:55;14752:17;14747:2;14742:3;14738:12;14731:39;14796:2;14791:3;14787:12;14780:19;;14572:233;;;:::o;14811:329::-;;14974:67;15038:2;15033:3;14974:67;:::i;:::-;14967:74;;15071:33;15067:1;15062:3;15058:11;15051:54;15131:2;15126:3;15122:12;15115:19;;14957:183;;;:::o;15146:365::-;;15309:67;15373:2;15368:3;15309:67;:::i;:::-;15302:74;;15406:34;15402:1;15397:3;15393:11;15386:55;15472:3;15467:2;15462:3;15458:12;15451:25;15502:2;15497:3;15493:12;15486:19;;15292:219;;;:::o;15517:381::-;;15680:67;15744:2;15739:3;15680:67;:::i;:::-;15673:74;;15777:34;15773:1;15768:3;15764:11;15757:55;15843:19;15838:2;15833:3;15829:12;15822:41;15889:2;15884:3;15880:12;15873:19;;15663:235;;;:::o;15904:118::-;15991:24;16009:5;15991:24;:::i;:::-;15986:3;15979:37;15969:53;;:::o;16028:701::-;;16331:95;16422:3;16413:6;16331:95;:::i;:::-;16324:102;;16443:95;16534:3;16525:6;16443:95;:::i;:::-;16436:102;;16555:148;16699:3;16555:148;:::i;:::-;16548:155;;16720:3;16713:10;;16313:416;;;;;:::o;16735:222::-;;16866:2;16855:9;16851:18;16843:26;;16879:71;16947:1;16936:9;16932:17;16923:6;16879:71;:::i;:::-;16833:124;;;;:::o;16963:640::-;;17196:3;17185:9;17181:19;17173:27;;17210:71;17278:1;17267:9;17263:17;17254:6;17210:71;:::i;:::-;17291:72;17359:2;17348:9;17344:18;17335:6;17291:72;:::i;:::-;17373;17441:2;17430:9;17426:18;17417:6;17373:72;:::i;:::-;17492:9;17486:4;17482:20;17477:2;17466:9;17462:18;17455:48;17520:76;17591:4;17582:6;17520:76;:::i;:::-;17512:84;;17163:440;;;;;;;:::o;17609:210::-;;17734:2;17723:9;17719:18;17711:26;;17747:65;17809:1;17798:9;17794:17;17785:6;17747:65;:::i;:::-;17701:118;;;;:::o;17825:313::-;;17976:2;17965:9;17961:18;17953:26;;18025:9;18019:4;18015:20;18011:1;18000:9;17996:17;17989:47;18053:78;18126:4;18117:6;18053:78;:::i;:::-;18045:86;;17943:195;;;;:::o;18144:419::-;;18348:2;18337:9;18333:18;18325:26;;18397:9;18391:4;18387:20;18383:1;18372:9;18368:17;18361:47;18425:131;18551:4;18425:131;:::i;:::-;18417:139;;18315:248;;;:::o;18569:419::-;;18773:2;18762:9;18758:18;18750:26;;18822:9;18816:4;18812:20;18808:1;18797:9;18793:17;18786:47;18850:131;18976:4;18850:131;:::i;:::-;18842:139;;18740:248;;;:::o;18994:419::-;;19198:2;19187:9;19183:18;19175:26;;19247:9;19241:4;19237:20;19233:1;19222:9;19218:17;19211:47;19275:131;19401:4;19275:131;:::i;:::-;19267:139;;19165:248;;;:::o;19419:419::-;;19623:2;19612:9;19608:18;19600:26;;19672:9;19666:4;19662:20;19658:1;19647:9;19643:17;19636:47;19700:131;19826:4;19700:131;:::i;:::-;19692:139;;19590:248;;;:::o;19844:419::-;;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;20015:248;;;:::o;20269:419::-;;20473:2;20462:9;20458:18;20450:26;;20522:9;20516:4;20512:20;20508:1;20497:9;20493:17;20486:47;20550:131;20676:4;20550:131;:::i;:::-;20542:139;;20440:248;;;:::o;20694:419::-;;20898:2;20887:9;20883:18;20875:26;;20947:9;20941:4;20937:20;20933:1;20922:9;20918:17;20911:47;20975:131;21101:4;20975:131;:::i;:::-;20967:139;;20865:248;;;:::o;21119:419::-;;21323:2;21312:9;21308:18;21300:26;;21372:9;21366:4;21362:20;21358:1;21347:9;21343:17;21336:47;21400:131;21526:4;21400:131;:::i;:::-;21392:139;;21290:248;;;:::o;21544:419::-;;21748:2;21737:9;21733:18;21725:26;;21797:9;21791:4;21787:20;21783:1;21772:9;21768:17;21761:47;21825:131;21951:4;21825:131;:::i;:::-;21817:139;;21715:248;;;:::o;21969:419::-;;22173:2;22162:9;22158:18;22150:26;;22222:9;22216:4;22212:20;22208:1;22197:9;22193:17;22186:47;22250:131;22376:4;22250:131;:::i;:::-;22242:139;;22140:248;;;:::o;22394:419::-;;22598:2;22587:9;22583:18;22575:26;;22647:9;22641:4;22637:20;22633:1;22622:9;22618:17;22611:47;22675:131;22801:4;22675:131;:::i;:::-;22667:139;;22565:248;;;:::o;22819:419::-;;23023:2;23012:9;23008:18;23000:26;;23072:9;23066:4;23062:20;23058:1;23047:9;23043:17;23036:47;23100:131;23226:4;23100:131;:::i;:::-;23092:139;;22990:248;;;:::o;23244:419::-;;23448:2;23437:9;23433:18;23425:26;;23497:9;23491:4;23487:20;23483:1;23472:9;23468:17;23461:47;23525:131;23651:4;23525:131;:::i;:::-;23517:139;;23415:248;;;:::o;23669:419::-;;23873:2;23862:9;23858:18;23850:26;;23922:9;23916:4;23912:20;23908:1;23897:9;23893:17;23886:47;23950:131;24076:4;23950:131;:::i;:::-;23942:139;;23840:248;;;:::o;24094:419::-;;24298:2;24287:9;24283:18;24275:26;;24347:9;24341:4;24337:20;24333:1;24322:9;24318:17;24311:47;24375:131;24501:4;24375:131;:::i;:::-;24367:139;;24265:248;;;:::o;24519:419::-;;24723:2;24712:9;24708:18;24700:26;;24772:9;24766:4;24762:20;24758:1;24747:9;24743:17;24736:47;24800:131;24926:4;24800:131;:::i;:::-;24792:139;;24690:248;;;:::o;24944:419::-;;25148:2;25137:9;25133:18;25125:26;;25197:9;25191:4;25187:20;25183:1;25172:9;25168:17;25161:47;25225:131;25351:4;25225:131;:::i;:::-;25217:139;;25115:248;;;:::o;25369:419::-;;25573:2;25562:9;25558:18;25550:26;;25622:9;25616:4;25612:20;25608:1;25597:9;25593:17;25586:47;25650:131;25776:4;25650:131;:::i;:::-;25642:139;;25540:248;;;:::o;25794:419::-;;25998:2;25987:9;25983:18;25975:26;;26047:9;26041:4;26037:20;26033:1;26022:9;26018:17;26011:47;26075:131;26201:4;26075:131;:::i;:::-;26067:139;;25965:248;;;:::o;26219:419::-;;26423:2;26412:9;26408:18;26400:26;;26472:9;26466:4;26462:20;26458:1;26447:9;26443:17;26436:47;26500:131;26626:4;26500:131;:::i;:::-;26492:139;;26390:248;;;:::o;26644:419::-;;26848:2;26837:9;26833:18;26825:26;;26897:9;26891:4;26887:20;26883:1;26872:9;26868:17;26861:47;26925:131;27051:4;26925:131;:::i;:::-;26917:139;;26815:248;;;:::o;27069:419::-;;27273:2;27262:9;27258:18;27250:26;;27322:9;27316:4;27312:20;27308:1;27297:9;27293:17;27286:47;27350:131;27476:4;27350:131;:::i;:::-;27342:139;;27240:248;;;:::o;27494:222::-;;27625:2;27614:9;27610:18;27602:26;;27638:71;27706:1;27695:9;27691:17;27682:6;27638:71;:::i;:::-;27592:124;;;;:::o;27722:283::-;;27788:2;27782:9;27772:19;;27830:4;27822:6;27818:17;27937:6;27925:10;27922:22;27901:18;27889:10;27886:34;27883:62;27880:2;;;27948:18;;:::i;:::-;27880:2;27988:10;27984:2;27977:22;27762:243;;;;:::o;28011:331::-;;28162:18;28154:6;28151:30;28148:2;;;28184:18;;:::i;:::-;28148:2;28269:4;28265:9;28258:4;28250:6;28246:17;28242:33;28234:41;;28330:4;28324;28320:15;28312:23;;28077:265;;;:::o;28348:332::-;;28500:18;28492:6;28489:30;28486:2;;;28522:18;;:::i;:::-;28486:2;28607:4;28603:9;28596:4;28588:6;28584:17;28580:33;28572:41;;28668:4;28662;28658:15;28650:23;;28415:265;;;:::o;28686:98::-;;28771:5;28765:12;28755:22;;28744:40;;;:::o;28790:99::-;;28876:5;28870:12;28860:22;;28849:40;;;:::o;28895:168::-;;29012:6;29007:3;29000:19;29052:4;29047:3;29043:14;29028:29;;28990:73;;;;:::o;29069:169::-;;29187:6;29182:3;29175:19;29227:4;29222:3;29218:14;29203:29;;29165:73;;;;:::o;29244:148::-;;29383:3;29368:18;;29358:34;;;;:::o;29398:305::-;;29457:20;29475:1;29457:20;:::i;:::-;29452:25;;29491:20;29509:1;29491:20;:::i;:::-;29486:25;;29645:1;29577:66;29573:74;29570:1;29567:81;29564:2;;;29651:18;;:::i;:::-;29564:2;29695:1;29692;29688:9;29681:16;;29442:261;;;;:::o;29709:185::-;;29766:20;29784:1;29766:20;:::i;:::-;29761:25;;29800:20;29818:1;29800:20;:::i;:::-;29795:25;;29839:1;29829:2;;29844:18;;:::i;:::-;29829:2;29886:1;29883;29879:9;29874:14;;29751:143;;;;:::o;29900:348::-;;29963:20;29981:1;29963:20;:::i;:::-;29958:25;;29997:20;30015:1;29997:20;:::i;:::-;29992:25;;30185:1;30117:66;30113:74;30110:1;30107:81;30102:1;30095:9;30088:17;30084:105;30081:2;;;30192:18;;:::i;:::-;30081:2;30240:1;30237;30233:9;30222:20;;29948:300;;;;:::o;30254:191::-;;30314:20;30332:1;30314:20;:::i;:::-;30309:25;;30348:20;30366:1;30348:20;:::i;:::-;30343:25;;30387:1;30384;30381:8;30378:2;;;30392:18;;:::i;:::-;30378:2;30437:1;30434;30430:9;30422:17;;30299:146;;;;:::o;30451:96::-;;30517:24;30535:5;30517:24;:::i;:::-;30506:35;;30496:51;;;:::o;30553:90::-;;30630:5;30623:13;30616:21;30605:32;;30595:48;;;:::o;30649:149::-;;30725:66;30718:5;30714:78;30703:89;;30693:105;;;:::o;30804:126::-;;30881:42;30874:5;30870:54;30859:65;;30849:81;;;:::o;30936:77::-;;31002:5;30991:16;;30981:32;;;:::o;31019:154::-;31103:6;31098:3;31093;31080:30;31165:1;31156:6;31151:3;31147:16;31140:27;31070:103;;;:::o;31179:307::-;31247:1;31257:113;31271:6;31268:1;31265:13;31257:113;;;31356:1;31351:3;31347:11;31341:18;31337:1;31332:3;31328:11;31321:39;31293:2;31290:1;31286:10;31281:15;;31257:113;;;31388:6;31385:1;31382:13;31379:2;;;31468:1;31459:6;31454:3;31450:16;31443:27;31379:2;31228:258;;;;:::o;31492:320::-;;31573:1;31567:4;31563:12;31553:22;;31620:1;31614:4;31610:12;31641:18;31631:2;;31697:4;31689:6;31685:17;31675:27;;31631:2;31759;31751:6;31748:14;31728:18;31725:38;31722:2;;;31778:18;;:::i;:::-;31722:2;31543:269;;;;:::o;31818:233::-;;31880:24;31898:5;31880:24;:::i;:::-;31871:33;;31926:66;31919:5;31916:77;31913:2;;;31996:18;;:::i;:::-;31913:2;32043:1;32036:5;32032:13;32025:20;;31861:190;;;:::o;32057:176::-;;32106:20;32124:1;32106:20;:::i;:::-;32101:25;;32140:20;32158:1;32140:20;:::i;:::-;32135:25;;32179:1;32169:2;;32184:18;;:::i;:::-;32169:2;32225:1;32222;32218:9;32213:14;;32091:142;;;;:::o;32239:180::-;32287:77;32284:1;32277:88;32384:4;32381:1;32374:15;32408:4;32405:1;32398:15;32425:180;32473:77;32470:1;32463:88;32570:4;32567:1;32560:15;32594:4;32591:1;32584:15;32611:180;32659:77;32656:1;32649:88;32756:4;32753:1;32746:15;32780:4;32777:1;32770:15;32797:180;32845:77;32842:1;32835:88;32942:4;32939:1;32932:15;32966:4;32963:1;32956:15;32983:102;;33075:2;33071:7;33066:2;33059:5;33055:14;33051:28;33041:38;;33031:54;;;:::o;33091:122::-;33164:24;33182:5;33164:24;:::i;:::-;33157:5;33154:35;33144:2;;33203:1;33200;33193:12;33144:2;33134:79;:::o;33219:116::-;33289:21;33304:5;33289:21;:::i;:::-;33282:5;33279:32;33269:2;;33325:1;33322;33315:12;33269:2;33259:76;:::o;33341:120::-;33413:23;33430:5;33413:23;:::i;:::-;33406:5;33403:34;33393:2;;33451:1;33448;33441:12;33393:2;33383:78;:::o;33467:122::-;33540:24;33558:5;33540:24;:::i;:::-;33533:5;33530:35;33520:2;;33579:1;33576;33569:12;33520:2;33510:79;:::o

Swarm Source

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