ETH Price: $3,473.45 (+1.60%)
Gas: 11 Gwei

Token

WomenDoodles (WDD)
 

Overview

Max Total Supply

1,112 WDD

Holders

297

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
morganloewenherz.eth
Balance
2 WDD
0xcc5a9c976a3becb20e334ec40fd4abdeba9e198f
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:
NFT

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-19
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts 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/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

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


// Creator: Chiru Labs

pragma solidity ^0.8.4;









error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error BurnedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**128 - 1 (max value of uint128).
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
    }

    // Compiler will pack the following 
    // _currentIndex and _burnCounter into a single 256bit word.
    
    // The tokenId of the next token to be minted.
    uint128 internal _currentIndex;

    // The number of tokens burned.
    uint128 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex times
        unchecked {
            return _currentIndex - _burnCounter;    
        }
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (!ownership.burned) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }
        revert TokenIndexOutOfBounds();
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();
        uint256 numMintedSoFar = _currentIndex;
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when
        // uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        // Execution should never reach this point.
        revert();
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert MintedQueryForZeroAddress();
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        if (owner == address(0)) revert BurnedQueryForZeroAddress();
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant: 
                    // There will always be an ownership that has an address and is not burned 
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public override {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _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 {
        _transfer(from, to, tokenId);
        if (!_checkOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if _currentIndex + quantity > 3.4e38 (2**128) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe && !_checkOnERC721Received(address(0), to, updatedIndex, _data)) {
                    revert TransferToNonERC721ReceiverImplementer();
                }
                updatedIndex++;
            }

            _currentIndex = uint128(updatedIndex);
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            isApprovedForAll(prevOwnership.addr, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @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 {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        _beforeTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**128.
        unchecked {
            _addressData[prevOwnership.addr].balance -= 1;
            _addressData[prevOwnership.addr].numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            _ownerships[tokenId].addr = prevOwnership.addr;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);
            _ownerships[tokenId].burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId < _currentIndex) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(prevOwnership.addr, address(0), tokenId);
        _afterTokenTransfers(prevOwnership.addr, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked { 
            _burnCounter++;
        }
    }

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

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

// File: contracts/Contract.sol



pragma solidity 0.8.10;



contract NFT is ERC721A, Ownable {
    using Strings for uint256;

    uint256 public constant MAX_SUPPLY = 6666;
    uint256 public constant MAX_SUPPLY_PUBLIC_SALE = 5666;

    string private _baseTokenURI;
    string private _unrevealedURI;
    bool private isRevealed;

    // Public sale
    uint256 private publicSalePrice = 0.033 ether;
    uint256 private publicSaleMaxMintPerTransaction = 5;

    // Free sale
    uint256 private freeSaleMaxMintPerTransaction = 3;
    uint256 private freeSaleMaxMints = 3;
    bool private freeSaleStarted;
    uint256 private freeNFTsMinted;
    mapping(address => bool) public isWhitelisted;
    mapping(address => uint256) public numberOfTokensMinted;

    constructor(string memory baseURI, string memory unrevealedURI) ERC721A("WomenDoodles", "WDD") {
        _baseTokenURI = baseURI;
        _unrevealedURI = unrevealedURI;
    }

    //////////
    // Getters

    function _baseURI() internal view virtual override returns (string memory) {
        if (!isRevealed) {
            return _unrevealedURI;
        }

        return _baseTokenURI;
    }

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

        if (!isRevealed) {
            return _unrevealedURI;
        }

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

    function calculatePrice(uint256 _count) public view returns(uint256) {
        return _count * publicSalePrice;
    }

    function isFreeSaleActive() view external returns(bool) {
        return freeSaleStarted;
    }

    function numberOfFreeNFTsMinted() view external returns(uint256) {
        return freeNFTsMinted;
    }

    //

    function mintNFTs(uint256 quantity) external payable
    {
        require(!freeSaleStarted, "Public sale not active!");
        require(totalSupply() + quantity <= MAX_SUPPLY_PUBLIC_SALE, "Not enough NFTs left!");
        require(quantity <= publicSaleMaxMintPerTransaction, "Quantity exceeds max mints per transaction!");
        require(quantity > 0, "Cannot mint 0 NFTs.");
        require(msg.value >= calculatePrice(quantity),"Not enough ether to purchase NFTs.");

        if (totalSupply() + quantity == MAX_SUPPLY_PUBLIC_SALE) {
            freeSaleStarted = true;
        }

        _safeMint(msg.sender, quantity);
    }

    function mintFreeNFTs(uint256 quantity) external {
        require(freeSaleStarted, "Free sale is not started!");
        require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough NFTs left!");
        require(quantity <= freeSaleMaxMintPerTransaction, "Quantity exceeds max mints per transaction!");
        require(numberOfTokensMinted[msg.sender] <= freeSaleMaxMints, "Quantity exceeds max mints per account!");
        require(isWhitelisted[msg.sender], "Account is not whitelisted!");
        require(quantity > 0, "Cannot mint 0 NFTs.");

        freeNFTsMinted += quantity;
        _safeMint(msg.sender, quantity);
    }

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

    //////////////////
    // Owner functions 

    function setPublicSaleMaxMintPerTransaction(uint256 _publicSaleMaxMintPerTransaction) external onlyOwner {
        publicSaleMaxMintPerTransaction = _publicSaleMaxMintPerTransaction;
    }

    function setFreeSaleMaxMintPerTransaction(uint256 _freeSaleMaxMintPerTransaction) external onlyOwner {
        freeSaleMaxMintPerTransaction = _freeSaleMaxMintPerTransaction;
    }

    function setFreeSaleMaxMints(uint256 _freeSaleMaxMints) external onlyOwner {
        freeSaleMaxMints = _freeSaleMaxMints;
    }

    function addToWhitelist(address[] memory _addresses) external onlyOwner {
        for (uint256 i = 0;i < _addresses.length;i++) {
            isWhitelisted[_addresses[i]] = true;
        }
    }

    function removeFromWhitelist (address[] memory _addresses) external onlyOwner {
        for (uint256 i = 0;i < _addresses.length;i++) {
            isWhitelisted[_addresses[i]] = false;
        }
    }

    function toggleReveal() public onlyOwner {
        if (isRevealed) isRevealed = false;
        else isRevealed = true;
    }

    function setBaseURI(string calldata baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }

    function setUnrevealedURI(string memory unrevealedURI) public onlyOwner {
        _unrevealedURI = unrevealedURI;
    }

    function startFreeSale() external onlyOwner {
        freeSaleStarted = true;
    }

    function endFreeSale() external onlyOwner {
        freeSaleStarted = false;
    }

    function setPrice(uint256 price) external onlyOwner {
        publicSalePrice = price;
    }

    function mintNFTsOwner(uint256 quantity) external onlyOwner {
        require(totalSupply() + quantity <= MAX_SUPPLY, "Not enough NFTs left!");

        _safeMint(msg.sender, quantity);
    }

    function withdraw() external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"},{"internalType":"string","name":"unrevealedURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_PUBLIC_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","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":"_count","type":"uint256"}],"name":"calculatePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endFreeSale","outputs":[],"stateMutability":"nonpayable","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":"isFreeSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintFreeNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintNFTs","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mintNFTsOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numberOfFreeNFTsMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numberOfTokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeSaleMaxMintPerTransaction","type":"uint256"}],"name":"setFreeSaleMaxMintPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeSaleMaxMints","type":"uint256"}],"name":"setFreeSaleMaxMints","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_publicSaleMaxMintPerTransaction","type":"uint256"}],"name":"setPublicSaleMaxMintPerTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"unrevealedURI","type":"string"}],"name":"setUnrevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startFreeSale","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":[],"name":"toggleReveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOf","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266753d533d968000600b556005600c556003600d556003600e553480156200002b57600080fd5b50604051620051bc380380620051bc833981810160405281019062000051919062000466565b6040518060400160405280600c81526020017f576f6d656e446f6f646c657300000000000000000000000000000000000000008152506040518060400160405280600381526020017f57444400000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000d592919062000219565b508060029080519060200190620000ee92919062000219565b50505062000111620001056200014b60201b60201c565b6200015360201b60201c565b81600890805190602001906200012992919062000219565b5080600990805190602001906200014292919062000219565b50505062000550565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000227906200051a565b90600052602060002090601f0160209004810192826200024b576000855562000297565b82601f106200026657805160ff191683800117855562000297565b8280016001018555821562000297579182015b828111156200029657825182559160200191906001019062000279565b5b509050620002a69190620002aa565b5090565b5b80821115620002c5576000816000905550600101620002ab565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200033282620002e7565b810181811067ffffffffffffffff82111715620003545762000353620002f8565b5b80604052505050565b600062000369620002c9565b905062000377828262000327565b919050565b600067ffffffffffffffff8211156200039a5762000399620002f8565b5b620003a582620002e7565b9050602081019050919050565b60005b83811015620003d2578082015181840152602081019050620003b5565b83811115620003e2576000848401525b50505050565b6000620003ff620003f9846200037c565b6200035d565b9050828152602081018484840111156200041e576200041d620002e2565b5b6200042b848285620003b2565b509392505050565b600082601f8301126200044b576200044a620002dd565b5b81516200045d848260208601620003e8565b91505092915050565b6000806040838503121562000480576200047f620002d3565b5b600083015167ffffffffffffffff811115620004a157620004a0620002d8565b5b620004af8582860162000433565b925050602083015167ffffffffffffffff811115620004d357620004d2620002d8565b5b620004e18582860162000433565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200053357607f821691505b602082108114156200054a5762000549620004eb565b5b50919050565b614c5c80620005606000396000f3fe6080604052600436106102515760003560e01c806362f0964011610139578063a22cb465116100b6578063ca9c9e151161007a578063ca9c9e151461088b578063da69a79c146108b4578063dd441506146108f1578063e985e9c51461091a578063f2fde38b14610957578063fe2c7fee1461098057610251565b8063a22cb46514610794578063ae104265146107bd578063b88d4fde146107fa578063bffba22a14610823578063c87b56dd1461084e57610251565b806382fa2781116100fd57806382fa2781146106c357806385d804f6146106ec5780638da5cb5b1461071557806391b7f5ed1461074057806395d89b411461076957610251565b806362f09640146105de5780636352211e1461060957806370a0823114610646578063715018a6146106835780637f6497831461069a57610251565b80633af32abf116101d25780634f6ccce7116101965780634f6ccce7146104e4578063520fd82e14610521578063548db1741461053857806355f804b3146105615780635a3f26721461058a5780635b8ad429146105c757610251565b80633af32abf146104205780633b4b13811461045d5780633ccfd60b1461047957806340e2a6311461049057806342842e0e146104bb57610251565b806318160ddd1161021957806318160ddd1461033b57806323b872dd146103665780632f745c591461038f57806332cb6b0c146103cc578063394b3433146103f757610251565b806301a4462f1461025657806301ffc9a71461026d57806306fdde03146102aa578063081812fc146102d5578063095ea7b314610312575b600080fd5b34801561026257600080fd5b5061026b6109a9565b005b34801561027957600080fd5b50610294600480360381019061028f9190613a2a565b610a42565b6040516102a19190613a72565b60405180910390f35b3480156102b657600080fd5b506102bf610b8c565b6040516102cc9190613b26565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613b7e565b610c1e565b6040516103099190613bec565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613c33565b610c9a565b005b34801561034757600080fd5b50610350610da5565b60405161035d9190613c82565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613c9d565b610dfa565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613c33565b610e0a565b6040516103c39190613c82565b60405180910390f35b3480156103d857600080fd5b506103e1611011565b6040516103ee9190613c82565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b7e565b611017565b005b34801561042c57600080fd5b5061044760048036038101906104429190613cf0565b61109d565b6040516104549190613a72565b60405180910390f35b61047760048036038101906104729190613b7e565b6110bd565b005b34801561048557600080fd5b5061048e61127c565b005b34801561049c57600080fd5b506104a5611341565b6040516104b29190613c82565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613c9d565b611347565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613b7e565b611367565b6040516105189190613c82565b60405180910390f35b34801561052d57600080fd5b506105366114d8565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613e65565b611571565b005b34801561056d57600080fd5b5061058860048036038101906105839190613f09565b611682565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613cf0565b611714565b6040516105be9190614014565b60405180910390f35b3480156105d357600080fd5b506105dc6117c2565b005b3480156105ea57600080fd5b506105f3611891565b6040516106009190613a72565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190613b7e565b6118a8565b60405161063d9190613bec565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190613cf0565b6118be565b60405161067a9190613c82565b60405180910390f35b34801561068f57600080fd5b5061069861198e565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613e65565b611a16565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613b7e565b611b27565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613b7e565b611bad565b005b34801561072157600080fd5b5061072a611c33565b6040516107379190613bec565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613b7e565b611c5d565b005b34801561077557600080fd5b5061077e611ce3565b60405161078b9190613b26565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190614062565b611d75565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613b7e565b611eed565b6040516107f19190613c82565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190614157565b611f04565b005b34801561082f57600080fd5b50610838611f57565b6040516108459190613c82565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613b7e565b611f61565b6040516108829190613b26565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613b7e565b6120af565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613cf0565b612313565b6040516108e89190613c82565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613b7e565b61232b565b005b34801561092657600080fd5b50610941600480360381019061093c91906141da565b61240b565b60405161094e9190613a72565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613cf0565b61249f565b005b34801561098c57600080fd5b506109a760048036038101906109a291906142bb565b612597565b005b6109b161262d565b73ffffffffffffffffffffffffffffffffffffffff166109cf611c33565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90614350565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b7557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b855750610b8482612635565b5b9050919050565b606060018054610b9b9061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc79061439f565b8015610c145780601f10610be957610100808354040283529160200191610c14565b820191906000526020600020905b815481529060010190602001808311610bf757829003601f168201915b5050505050905090565b6000610c298261269f565b610c5f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca5826118a8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0d576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2c61262d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d5e5750610d5c81610d5761262d565b61240b565b155b15610d95576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da0838383612707565b505050565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610e058383836127b9565b505050565b6000610e15836118be565b8210610e4d576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015611005576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610f645750610ff8565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fa457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ff65786841415610fed57819550505050505061100b565b83806001019450505b505b8080600101915050610e87565b50600080fd5b92915050565b611a0a81565b61101f61262d565b73ffffffffffffffffffffffffffffffffffffffff1661103d611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90614350565b60405180910390fd5b80600e8190555050565b60116020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff161561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061441d565b60405180910390fd5b61162281611119610da5565b611123919061446c565b1115611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061450e565b60405180910390fd5b600c548111156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906145a0565b60405180910390fd5b600081116111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e39061460c565b60405180910390fd5b6111f581611eed565b341015611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e9061469e565b60405180910390fd5b61162281611243610da5565b61124d919061446c565b141561126f576001600f60006101000a81548160ff0219169083151502179055505b6112793382612cd6565b50565b61128461262d565b73ffffffffffffffffffffffffffffffffffffffff166112a2611c33565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614350565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561133e573d6000803e3d6000fd5b50565b61162281565b61136283838360405180602001604052806000815250611f04565b505050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b828110156114a0576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611492578583141561148957819450505050506114d3565b82806001019350505b50808060010191505061139f565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6114e061262d565b73ffffffffffffffffffffffffffffffffffffffff166114fe611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614350565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b61157961262d565b73ffffffffffffffffffffffffffffffffffffffff16611597611c33565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614350565b60405180910390fd5b60005b815181101561167e57600060116000848481518110611612576116116146be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611676906146ed565b9150506115f0565b5050565b61168a61262d565b73ffffffffffffffffffffffffffffffffffffffff166116a8611c33565b73ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614350565b60405180910390fd5b81816008919061170f929190613852565b505050565b60606000611721836118be565b905060008167ffffffffffffffff81111561173f5761173e613d22565b5b60405190808252806020026020018201604052801561176d5781602001602082028036833780820191505090505b50905060005b828110156117b7576117858582610e0a565b828281518110611798576117976146be565b5b60200260200101818152505080806117af906146ed565b915050611773565b508092505050919050565b6117ca61262d565b73ffffffffffffffffffffffffffffffffffffffff166117e8611c33565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614350565b60405180910390fd5b600a60009054906101000a900460ff1615611873576000600a60006101000a81548160ff02191690831515021790555061188f565b6001600a60006101000a81548160ff0219169083151502179055505b565b6000600f60009054906101000a900460ff16905090565b60006118b382612cf4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611926576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61199661262d565b73ffffffffffffffffffffffffffffffffffffffff166119b4611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614350565b60405180910390fd5b611a146000612f9c565b565b611a1e61262d565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614350565b60405180910390fd5b60005b8151811015611b2357600160116000848481518110611ab757611ab66146be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b1b906146ed565b915050611a95565b5050565b611b2f61262d565b73ffffffffffffffffffffffffffffffffffffffff16611b4d611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90614350565b60405180910390fd5b80600c8190555050565b611bb561262d565b73ffffffffffffffffffffffffffffffffffffffff16611bd3611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090614350565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c6561262d565b73ffffffffffffffffffffffffffffffffffffffff16611c83611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614350565b60405180910390fd5b80600b8190555050565b606060028054611cf29061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1e9061439f565b8015611d6b5780601f10611d4057610100808354040283529160200191611d6b565b820191906000526020600020905b815481529060010190602001808311611d4e57829003601f168201915b5050505050905090565b611d7d61262d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611def61262d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e9c61262d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ee19190613a72565b60405180910390a35050565b6000600b5482611efd9190614736565b9050919050565b611f0f8484846127b9565b611f1b84848484613062565b611f51576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000601054905090565b6060611f6c8261269f565b611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290614802565b60405180910390fd5b600a60009054906101000a900460ff166120515760098054611fcc9061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff89061439f565b80156120455780601f1061201a57610100808354040283529160200191612045565b820191906000526020600020905b81548152906001019060200180831161202857829003601f168201915b505050505090506120aa565b600061205b6131e1565b9050600081511161207b57604051806020016040528060008152506120a6565b806120858461331a565b60405160200161209692919061485e565b6040516020818303038152906040525b9150505b919050565b600f60009054906101000a900460ff166120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906148ce565b60405180910390fd5b611a0a8161210a610da5565b612114919061446c565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061450e565b60405180910390fd5b600d5481111561219a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612191906145a0565b60405180910390fd5b600e54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614960565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a1906149cc565b60405180910390fd5b600081116122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e49061460c565b60405180910390fd5b80601060008282546122ff919061446c565b925050819055506123103382612cd6565b50565b60126020528060005260406000206000915090505481565b61233361262d565b73ffffffffffffffffffffffffffffffffffffffff16612351611c33565b73ffffffffffffffffffffffffffffffffffffffff16146123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614350565b60405180910390fd5b611a0a816123b3610da5565b6123bd919061446c565b11156123fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f59061450e565b60405180910390fd5b6124083382612cd6565b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a761262d565b73ffffffffffffffffffffffffffffffffffffffff166124c5611c33565b73ffffffffffffffffffffffffffffffffffffffff161461251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614350565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614a5e565b60405180910390fd5b61259481612f9c565b50565b61259f61262d565b73ffffffffffffffffffffffffffffffffffffffff166125bd611c33565b73ffffffffffffffffffffffffffffffffffffffff1614612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90614350565b60405180910390fd5b80600990805190602001906126299291906138d8565b5050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612700575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006127c482612cf4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127eb61262d565b73ffffffffffffffffffffffffffffffffffffffff16148061281e575061281d826000015161281861262d565b61240b565b5b80612863575061282c61262d565b73ffffffffffffffffffffffffffffffffffffffff1661284b84610c1e565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061289c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612905576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561296c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612979858585600161347b565b6129896000848460000151612707565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c665760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612c655782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ccf8585856001613481565b5050505050565b612cf0828260405180602001604052806000815250613487565b5050565b612cfc61395e565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612f65576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612f6357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e47578092505050612f97565b5b600115612f6257818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f5d578092505050612f97565b612e48565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006130838473ffffffffffffffffffffffffffffffffffffffff16613499565b156131d4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ac61262d565b8786866040518563ffffffff1660e01b81526004016130ce9493929190614ad3565b6020604051808303816000875af192505050801561310a57506040513d601f19601f820116820180604052508101906131079190614b34565b60015b613184573d806000811461313a576040519150601f19603f3d011682016040523d82523d6000602084013e61313f565b606091505b5060008151141561317c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131d9565b600190505b949350505050565b6060600a60009054906101000a900460ff1661328957600980546132049061439f565b80601f01602080910402602001604051908101604052809291908181526020018280546132309061439f565b801561327d5780601f106132525761010080835404028352916020019161327d565b820191906000526020600020905b81548152906001019060200180831161326057829003601f168201915b50505050509050613317565b600880546132969061439f565b80601f01602080910402602001604051908101604052809291908181526020018280546132c29061439f565b801561330f5780601f106132e45761010080835404028352916020019161330f565b820191906000526020600020905b8154815290600101906020018083116132f257829003601f168201915b505050505090505b90565b60606000821415613362576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613476565b600082905060005b6000821461339457808061337d906146ed565b915050600a8261338d9190614b90565b915061336a565b60008167ffffffffffffffff8111156133b0576133af613d22565b5b6040519080825280601f01601f1916602001820160405280156133e25781602001600182028036833780820191505090505b5090505b6000851461346f576001826133fb9190614bc1565b9150600a8561340a9190614bf5565b6030613416919061446c565b60f81b81838151811061342c5761342b6146be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134689190614b90565b94506133e6565b8093505050505b919050565b50505050565b50505050565b61349483838360016134bc565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613557576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613592576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61359f600086838761347b565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561380457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156137b857506137b66000888488613062565b155b156137ef576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180600101925050808060010191505061373d565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505061384b6000868387613481565b5050505050565b82805461385e9061439f565b90600052602060002090601f01602090048101928261388057600085556138c7565b82601f1061389957803560ff19168380011785556138c7565b828001600101855582156138c7579182015b828111156138c65782358255916020019190600101906138ab565b5b5090506138d491906139a1565b5090565b8280546138e49061439f565b90600052602060002090601f016020900481019282613906576000855561394d565b82601f1061391f57805160ff191683800117855561394d565b8280016001018555821561394d579182015b8281111561394c578251825591602001919060010190613931565b5b50905061395a91906139a1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139ba5760008160009055506001016139a2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a07816139d2565b8114613a1257600080fd5b50565b600081359050613a24816139fe565b92915050565b600060208284031215613a4057613a3f6139c8565b5b6000613a4e84828501613a15565b91505092915050565b60008115159050919050565b613a6c81613a57565b82525050565b6000602082019050613a876000830184613a63565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ac7578082015181840152602081019050613aac565b83811115613ad6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613af882613a8d565b613b028185613a98565b9350613b12818560208601613aa9565b613b1b81613adc565b840191505092915050565b60006020820190508181036000830152613b408184613aed565b905092915050565b6000819050919050565b613b5b81613b48565b8114613b6657600080fd5b50565b600081359050613b7881613b52565b92915050565b600060208284031215613b9457613b936139c8565b5b6000613ba284828501613b69565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bd682613bab565b9050919050565b613be681613bcb565b82525050565b6000602082019050613c016000830184613bdd565b92915050565b613c1081613bcb565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496139c8565b5b6000613c5885828601613c1e565b9250506020613c6985828601613b69565b9150509250929050565b613c7c81613b48565b82525050565b6000602082019050613c976000830184613c73565b92915050565b600080600060608486031215613cb657613cb56139c8565b5b6000613cc486828701613c1e565b9350506020613cd586828701613c1e565b9250506040613ce686828701613b69565b9150509250925092565b600060208284031215613d0657613d056139c8565b5b6000613d1484828501613c1e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d5a82613adc565b810181811067ffffffffffffffff82111715613d7957613d78613d22565b5b80604052505050565b6000613d8c6139be565b9050613d988282613d51565b919050565b600067ffffffffffffffff821115613db857613db7613d22565b5b602082029050602081019050919050565b600080fd5b6000613de1613ddc84613d9d565b613d82565b90508083825260208201905060208402830185811115613e0457613e03613dc9565b5b835b81811015613e2d5780613e198882613c1e565b845260208401935050602081019050613e06565b5050509392505050565b600082601f830112613e4c57613e4b613d1d565b5b8135613e5c848260208601613dce565b91505092915050565b600060208284031215613e7b57613e7a6139c8565b5b600082013567ffffffffffffffff811115613e9957613e986139cd565b5b613ea584828501613e37565b91505092915050565b600080fd5b60008083601f840112613ec957613ec8613d1d565b5b8235905067ffffffffffffffff811115613ee657613ee5613eae565b5b602083019150836001820283011115613f0257613f01613dc9565b5b9250929050565b60008060208385031215613f2057613f1f6139c8565b5b600083013567ffffffffffffffff811115613f3e57613f3d6139cd565b5b613f4a85828601613eb3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f8b81613b48565b82525050565b6000613f9d8383613f82565b60208301905092915050565b6000602082019050919050565b6000613fc182613f56565b613fcb8185613f61565b9350613fd683613f72565b8060005b83811015614007578151613fee8882613f91565b9750613ff983613fa9565b925050600181019050613fda565b5085935050505092915050565b6000602082019050818103600083015261402e8184613fb6565b905092915050565b61403f81613a57565b811461404a57600080fd5b50565b60008135905061405c81614036565b92915050565b60008060408385031215614079576140786139c8565b5b600061408785828601613c1e565b92505060206140988582860161404d565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156140c2576140c1613d22565b5b6140cb82613adc565b9050602081019050919050565b82818337600083830152505050565b60006140fa6140f5846140a7565b613d82565b905082815260208101848484011115614116576141156140a2565b5b6141218482856140d8565b509392505050565b600082601f83011261413e5761413d613d1d565b5b813561414e8482602086016140e7565b91505092915050565b60008060008060808587031215614171576141706139c8565b5b600061417f87828801613c1e565b945050602061419087828801613c1e565b93505060406141a187828801613b69565b925050606085013567ffffffffffffffff8111156141c2576141c16139cd565b5b6141ce87828801614129565b91505092959194509250565b600080604083850312156141f1576141f06139c8565b5b60006141ff85828601613c1e565b925050602061421085828601613c1e565b9150509250929050565b600067ffffffffffffffff82111561423557614234613d22565b5b61423e82613adc565b9050602081019050919050565b600061425e6142598461421a565b613d82565b90508281526020810184848401111561427a576142796140a2565b5b6142858482856140d8565b509392505050565b600082601f8301126142a2576142a1613d1d565b5b81356142b284826020860161424b565b91505092915050565b6000602082840312156142d1576142d06139c8565b5b600082013567ffffffffffffffff8111156142ef576142ee6139cd565b5b6142fb8482850161428d565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061433a602083613a98565b915061434582614304565b602082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143b757607f821691505b602082108114156143cb576143ca614370565b5b50919050565b7f5075626c69632073616c65206e6f742061637469766521000000000000000000600082015250565b6000614407601783613a98565b9150614412826143d1565b602082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447782613b48565b915061448283613b48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144b7576144b661443d565b5b828201905092915050565b7f4e6f7420656e6f756768204e465473206c656674210000000000000000000000600082015250565b60006144f8601583613a98565b9150614503826144c2565b602082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f5175616e746974792065786365656473206d6178206d696e747320706572207460008201527f72616e73616374696f6e21000000000000000000000000000000000000000000602082015250565b600061458a602b83613a98565b91506145958261452e565b604082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f43616e6e6f74206d696e742030204e4654732e00000000000000000000000000600082015250565b60006145f6601383613a98565b9150614601826145c0565b602082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b7f4e6f7420656e6f75676820657468657220746f207075726368617365204e465460008201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614688602283613a98565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146f882613b48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561472b5761472a61443d565b5b600182019050919050565b600061474182613b48565b915061474c83613b48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147855761478461443d565b5b828202905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147ec602f83613a98565b91506147f782614790565b604082019050919050565b6000602082019050818103600083015261481b816147df565b9050919050565b600081905092915050565b600061483882613a8d565b6148428185614822565b9350614852818560208601613aa9565b80840191505092915050565b600061486a828561482d565b9150614876828461482d565b91508190509392505050565b7f467265652073616c65206973206e6f7420737461727465642100000000000000600082015250565b60006148b8601983613a98565b91506148c382614882565b602082019050919050565b600060208201905081810360008301526148e7816148ab565b9050919050565b7f5175616e746974792065786365656473206d6178206d696e747320706572206160008201527f63636f756e742100000000000000000000000000000000000000000000000000602082015250565b600061494a602783613a98565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b7f4163636f756e74206973206e6f742077686974656c6973746564210000000000600082015250565b60006149b6601b83613a98565b91506149c182614980565b602082019050919050565b600060208201905081810360008301526149e5816149a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a48602683613a98565b9150614a53826149ec565b604082019050919050565b60006020820190508181036000830152614a7781614a3b565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614aa582614a7e565b614aaf8185614a89565b9350614abf818560208601613aa9565b614ac881613adc565b840191505092915050565b6000608082019050614ae86000830187613bdd565b614af56020830186613bdd565b614b026040830185613c73565b8181036060830152614b148184614a9a565b905095945050505050565b600081519050614b2e816139fe565b92915050565b600060208284031215614b4a57614b496139c8565b5b6000614b5884828501614b1f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b9b82613b48565b9150614ba683613b48565b925082614bb657614bb5614b61565b5b828204905092915050565b6000614bcc82613b48565b9150614bd783613b48565b925082821015614bea57614be961443d565b5b828203905092915050565b6000614c0082613b48565b9150614c0b83613b48565b925082614c1b57614c1a614b61565b5b82820690509291505056fea2646970667358221220a1c4fe34d04c0a1bc5c1b0c812032c02cd4bd3ade6075caf77712aeae832406264736f6c634300080a0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5766515845437561634c4e6e3953325a5164785151675a7959545a71594b4732504868504a35433554666d442f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d63543146706b7a5669637033456a677932356d3868726a384532583734783331426946647247547a4435434d2f00000000000000000000

Deployed Bytecode

0x6080604052600436106102515760003560e01c806362f0964011610139578063a22cb465116100b6578063ca9c9e151161007a578063ca9c9e151461088b578063da69a79c146108b4578063dd441506146108f1578063e985e9c51461091a578063f2fde38b14610957578063fe2c7fee1461098057610251565b8063a22cb46514610794578063ae104265146107bd578063b88d4fde146107fa578063bffba22a14610823578063c87b56dd1461084e57610251565b806382fa2781116100fd57806382fa2781146106c357806385d804f6146106ec5780638da5cb5b1461071557806391b7f5ed1461074057806395d89b411461076957610251565b806362f09640146105de5780636352211e1461060957806370a0823114610646578063715018a6146106835780637f6497831461069a57610251565b80633af32abf116101d25780634f6ccce7116101965780634f6ccce7146104e4578063520fd82e14610521578063548db1741461053857806355f804b3146105615780635a3f26721461058a5780635b8ad429146105c757610251565b80633af32abf146104205780633b4b13811461045d5780633ccfd60b1461047957806340e2a6311461049057806342842e0e146104bb57610251565b806318160ddd1161021957806318160ddd1461033b57806323b872dd146103665780632f745c591461038f57806332cb6b0c146103cc578063394b3433146103f757610251565b806301a4462f1461025657806301ffc9a71461026d57806306fdde03146102aa578063081812fc146102d5578063095ea7b314610312575b600080fd5b34801561026257600080fd5b5061026b6109a9565b005b34801561027957600080fd5b50610294600480360381019061028f9190613a2a565b610a42565b6040516102a19190613a72565b60405180910390f35b3480156102b657600080fd5b506102bf610b8c565b6040516102cc9190613b26565b60405180910390f35b3480156102e157600080fd5b506102fc60048036038101906102f79190613b7e565b610c1e565b6040516103099190613bec565b60405180910390f35b34801561031e57600080fd5b5061033960048036038101906103349190613c33565b610c9a565b005b34801561034757600080fd5b50610350610da5565b60405161035d9190613c82565b60405180910390f35b34801561037257600080fd5b5061038d60048036038101906103889190613c9d565b610dfa565b005b34801561039b57600080fd5b506103b660048036038101906103b19190613c33565b610e0a565b6040516103c39190613c82565b60405180910390f35b3480156103d857600080fd5b506103e1611011565b6040516103ee9190613c82565b60405180910390f35b34801561040357600080fd5b5061041e60048036038101906104199190613b7e565b611017565b005b34801561042c57600080fd5b5061044760048036038101906104429190613cf0565b61109d565b6040516104549190613a72565b60405180910390f35b61047760048036038101906104729190613b7e565b6110bd565b005b34801561048557600080fd5b5061048e61127c565b005b34801561049c57600080fd5b506104a5611341565b6040516104b29190613c82565b60405180910390f35b3480156104c757600080fd5b506104e260048036038101906104dd9190613c9d565b611347565b005b3480156104f057600080fd5b5061050b60048036038101906105069190613b7e565b611367565b6040516105189190613c82565b60405180910390f35b34801561052d57600080fd5b506105366114d8565b005b34801561054457600080fd5b5061055f600480360381019061055a9190613e65565b611571565b005b34801561056d57600080fd5b5061058860048036038101906105839190613f09565b611682565b005b34801561059657600080fd5b506105b160048036038101906105ac9190613cf0565b611714565b6040516105be9190614014565b60405180910390f35b3480156105d357600080fd5b506105dc6117c2565b005b3480156105ea57600080fd5b506105f3611891565b6040516106009190613a72565b60405180910390f35b34801561061557600080fd5b50610630600480360381019061062b9190613b7e565b6118a8565b60405161063d9190613bec565b60405180910390f35b34801561065257600080fd5b5061066d60048036038101906106689190613cf0565b6118be565b60405161067a9190613c82565b60405180910390f35b34801561068f57600080fd5b5061069861198e565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190613e65565b611a16565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190613b7e565b611b27565b005b3480156106f857600080fd5b50610713600480360381019061070e9190613b7e565b611bad565b005b34801561072157600080fd5b5061072a611c33565b6040516107379190613bec565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190613b7e565b611c5d565b005b34801561077557600080fd5b5061077e611ce3565b60405161078b9190613b26565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190614062565b611d75565b005b3480156107c957600080fd5b506107e460048036038101906107df9190613b7e565b611eed565b6040516107f19190613c82565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190614157565b611f04565b005b34801561082f57600080fd5b50610838611f57565b6040516108459190613c82565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613b7e565b611f61565b6040516108829190613b26565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190613b7e565b6120af565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613cf0565b612313565b6040516108e89190613c82565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613b7e565b61232b565b005b34801561092657600080fd5b50610941600480360381019061093c91906141da565b61240b565b60405161094e9190613a72565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613cf0565b61249f565b005b34801561098c57600080fd5b506109a760048036038101906109a291906142bb565b612597565b005b6109b161262d565b73ffffffffffffffffffffffffffffffffffffffff166109cf611c33565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90614350565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610b0d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b7557507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b855750610b8482612635565b5b9050919050565b606060018054610b9b9061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc79061439f565b8015610c145780601f10610be957610100808354040283529160200191610c14565b820191906000526020600020905b815481529060010190602001808311610bf757829003601f168201915b5050505050905090565b6000610c298261269f565b610c5f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ca5826118a8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d0d576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d2c61262d565b73ffffffffffffffffffffffffffffffffffffffff1614158015610d5e5750610d5c81610d5761262d565b61240b565b155b15610d95576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610da0838383612707565b505050565b60008060109054906101000a90046fffffffffffffffffffffffffffffffff1660008054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610e058383836127b9565b505050565b6000610e15836118be565b8210610e4d576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b83811015611005576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015115610f645750610ff8565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fa457806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ff65786841415610fed57819550505050505061100b565b83806001019450505b505b8080600101915050610e87565b50600080fd5b92915050565b611a0a81565b61101f61262d565b73ffffffffffffffffffffffffffffffffffffffff1661103d611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611093576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108a90614350565b60405180910390fd5b80600e8190555050565b60116020528060005260406000206000915054906101000a900460ff1681565b600f60009054906101000a900460ff161561110d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111049061441d565b60405180910390fd5b61162281611119610da5565b611123919061446c565b1115611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061450e565b60405180910390fd5b600c548111156111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a0906145a0565b60405180910390fd5b600081116111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e39061460c565b60405180910390fd5b6111f581611eed565b341015611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e9061469e565b60405180910390fd5b61162281611243610da5565b61124d919061446c565b141561126f576001600f60006101000a81548160ff0219169083151502179055505b6112793382612cd6565b50565b61128461262d565b73ffffffffffffffffffffffffffffffffffffffff166112a2611c33565b73ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef90614350565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561133e573d6000803e3d6000fd5b50565b61162281565b61136283838360405180602001604052806000815250611f04565b505050565b60008060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b828110156114a0576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611492578583141561148957819450505050506114d3565b82806001019350505b50808060010191505061139f565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6114e061262d565b73ffffffffffffffffffffffffffffffffffffffff166114fe611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611554576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154b90614350565b60405180910390fd5b6000600f60006101000a81548160ff021916908315150217905550565b61157961262d565b73ffffffffffffffffffffffffffffffffffffffff16611597611c33565b73ffffffffffffffffffffffffffffffffffffffff16146115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e490614350565b60405180910390fd5b60005b815181101561167e57600060116000848481518110611612576116116146be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611676906146ed565b9150506115f0565b5050565b61168a61262d565b73ffffffffffffffffffffffffffffffffffffffff166116a8611c33565b73ffffffffffffffffffffffffffffffffffffffff16146116fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f590614350565b60405180910390fd5b81816008919061170f929190613852565b505050565b60606000611721836118be565b905060008167ffffffffffffffff81111561173f5761173e613d22565b5b60405190808252806020026020018201604052801561176d5781602001602082028036833780820191505090505b50905060005b828110156117b7576117858582610e0a565b828281518110611798576117976146be565b5b60200260200101818152505080806117af906146ed565b915050611773565b508092505050919050565b6117ca61262d565b73ffffffffffffffffffffffffffffffffffffffff166117e8611c33565b73ffffffffffffffffffffffffffffffffffffffff161461183e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183590614350565b60405180910390fd5b600a60009054906101000a900460ff1615611873576000600a60006101000a81548160ff02191690831515021790555061188f565b6001600a60006101000a81548160ff0219169083151502179055505b565b6000600f60009054906101000a900460ff16905090565b60006118b382612cf4565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611926576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61199661262d565b73ffffffffffffffffffffffffffffffffffffffff166119b4611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190614350565b60405180910390fd5b611a146000612f9c565b565b611a1e61262d565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614350565b60405180910390fd5b60005b8151811015611b2357600160116000848481518110611ab757611ab66146be565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611b1b906146ed565b915050611a95565b5050565b611b2f61262d565b73ffffffffffffffffffffffffffffffffffffffff16611b4d611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9a90614350565b60405180910390fd5b80600c8190555050565b611bb561262d565b73ffffffffffffffffffffffffffffffffffffffff16611bd3611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611c29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2090614350565b60405180910390fd5b80600d8190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611c6561262d565b73ffffffffffffffffffffffffffffffffffffffff16611c83611c33565b73ffffffffffffffffffffffffffffffffffffffff1614611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd090614350565b60405180910390fd5b80600b8190555050565b606060028054611cf29061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1e9061439f565b8015611d6b5780601f10611d4057610100808354040283529160200191611d6b565b820191906000526020600020905b815481529060010190602001808311611d4e57829003601f168201915b5050505050905090565b611d7d61262d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060066000611def61262d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e9c61262d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ee19190613a72565b60405180910390a35050565b6000600b5482611efd9190614736565b9050919050565b611f0f8484846127b9565b611f1b84848484613062565b611f51576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000601054905090565b6060611f6c8261269f565b611fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa290614802565b60405180910390fd5b600a60009054906101000a900460ff166120515760098054611fcc9061439f565b80601f0160208091040260200160405190810160405280929190818152602001828054611ff89061439f565b80156120455780601f1061201a57610100808354040283529160200191612045565b820191906000526020600020905b81548152906001019060200180831161202857829003601f168201915b505050505090506120aa565b600061205b6131e1565b9050600081511161207b57604051806020016040528060008152506120a6565b806120858461331a565b60405160200161209692919061485e565b6040516020818303038152906040525b9150505b919050565b600f60009054906101000a900460ff166120fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f5906148ce565b60405180910390fd5b611a0a8161210a610da5565b612114919061446c565b1115612155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214c9061450e565b60405180910390fd5b600d5481111561219a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612191906145a0565b60405180910390fd5b600e54601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561221e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221590614960565b60405180910390fd5b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166122aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a1906149cc565b60405180910390fd5b600081116122ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e49061460c565b60405180910390fd5b80601060008282546122ff919061446c565b925050819055506123103382612cd6565b50565b60126020528060005260406000206000915090505481565b61233361262d565b73ffffffffffffffffffffffffffffffffffffffff16612351611c33565b73ffffffffffffffffffffffffffffffffffffffff16146123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614350565b60405180910390fd5b611a0a816123b3610da5565b6123bd919061446c565b11156123fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f59061450e565b60405180910390fd5b6124083382612cd6565b50565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124a761262d565b73ffffffffffffffffffffffffffffffffffffffff166124c5611c33565b73ffffffffffffffffffffffffffffffffffffffff161461251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251290614350565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258290614a5e565b60405180910390fd5b61259481612f9c565b50565b61259f61262d565b73ffffffffffffffffffffffffffffffffffffffff166125bd611c33565b73ffffffffffffffffffffffffffffffffffffffff1614612613576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260a90614350565b60405180910390fd5b80600990805190602001906126299291906138d8565b5050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612700575060036000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006127c482612cf4565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff166127eb61262d565b73ffffffffffffffffffffffffffffffffffffffff16148061281e575061281d826000015161281861262d565b61240b565b5b80612863575061282c61262d565b73ffffffffffffffffffffffffffffffffffffffff1661284b84610c1e565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061289c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612905576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561296c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612979858585600161347b565b6129896000848460000151612707565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c665760008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612c655782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612ccf8585856001613481565b5050505050565b612cf0828260405180602001604052806000815250613487565b5050565b612cfc61395e565b600082905060008054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16811015612f65576000600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612f6357600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612e47578092505050612f97565b5b600115612f6257818060019003925050600360008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612f5d578092505050612f97565b612e48565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006130838473ffffffffffffffffffffffffffffffffffffffff16613499565b156131d4578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026130ac61262d565b8786866040518563ffffffff1660e01b81526004016130ce9493929190614ad3565b6020604051808303816000875af192505050801561310a57506040513d601f19601f820116820180604052508101906131079190614b34565b60015b613184573d806000811461313a576040519150601f19603f3d011682016040523d82523d6000602084013e61313f565b606091505b5060008151141561317c576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506131d9565b600190505b949350505050565b6060600a60009054906101000a900460ff1661328957600980546132049061439f565b80601f01602080910402602001604051908101604052809291908181526020018280546132309061439f565b801561327d5780601f106132525761010080835404028352916020019161327d565b820191906000526020600020905b81548152906001019060200180831161326057829003601f168201915b50505050509050613317565b600880546132969061439f565b80601f01602080910402602001604051908101604052809291908181526020018280546132c29061439f565b801561330f5780601f106132e45761010080835404028352916020019161330f565b820191906000526020600020905b8154815290600101906020018083116132f257829003601f168201915b505050505090505b90565b60606000821415613362576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613476565b600082905060005b6000821461339457808061337d906146ed565b915050600a8261338d9190614b90565b915061336a565b60008167ffffffffffffffff8111156133b0576133af613d22565b5b6040519080825280601f01601f1916602001820160405280156133e25781602001600182028036833780820191505090505b5090505b6000851461346f576001826133fb9190614bc1565b9150600a8561340a9190614bf5565b6030613416919061446c565b60f81b81838151811061342c5761342b6146be565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134689190614b90565b94506133e6565b8093505050505b919050565b50505050565b50505050565b61349483838360016134bc565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008060009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613557576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415613592576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61359f600086838761347b565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561380457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48380156137b857506137b66000888488613062565b155b156137ef576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8180600101925050808060010191505061373d565b50806000806101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055505061384b6000868387613481565b5050505050565b82805461385e9061439f565b90600052602060002090601f01602090048101928261388057600085556138c7565b82601f1061389957803560ff19168380011785556138c7565b828001600101855582156138c7579182015b828111156138c65782358255916020019190600101906138ab565b5b5090506138d491906139a1565b5090565b8280546138e49061439f565b90600052602060002090601f016020900481019282613906576000855561394d565b82601f1061391f57805160ff191683800117855561394d565b8280016001018555821561394d579182015b8281111561394c578251825591602001919060010190613931565b5b50905061395a91906139a1565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156139ba5760008160009055506001016139a2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613a07816139d2565b8114613a1257600080fd5b50565b600081359050613a24816139fe565b92915050565b600060208284031215613a4057613a3f6139c8565b5b6000613a4e84828501613a15565b91505092915050565b60008115159050919050565b613a6c81613a57565b82525050565b6000602082019050613a876000830184613a63565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613ac7578082015181840152602081019050613aac565b83811115613ad6576000848401525b50505050565b6000601f19601f8301169050919050565b6000613af882613a8d565b613b028185613a98565b9350613b12818560208601613aa9565b613b1b81613adc565b840191505092915050565b60006020820190508181036000830152613b408184613aed565b905092915050565b6000819050919050565b613b5b81613b48565b8114613b6657600080fd5b50565b600081359050613b7881613b52565b92915050565b600060208284031215613b9457613b936139c8565b5b6000613ba284828501613b69565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bd682613bab565b9050919050565b613be681613bcb565b82525050565b6000602082019050613c016000830184613bdd565b92915050565b613c1081613bcb565b8114613c1b57600080fd5b50565b600081359050613c2d81613c07565b92915050565b60008060408385031215613c4a57613c496139c8565b5b6000613c5885828601613c1e565b9250506020613c6985828601613b69565b9150509250929050565b613c7c81613b48565b82525050565b6000602082019050613c976000830184613c73565b92915050565b600080600060608486031215613cb657613cb56139c8565b5b6000613cc486828701613c1e565b9350506020613cd586828701613c1e565b9250506040613ce686828701613b69565b9150509250925092565b600060208284031215613d0657613d056139c8565b5b6000613d1484828501613c1e565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613d5a82613adc565b810181811067ffffffffffffffff82111715613d7957613d78613d22565b5b80604052505050565b6000613d8c6139be565b9050613d988282613d51565b919050565b600067ffffffffffffffff821115613db857613db7613d22565b5b602082029050602081019050919050565b600080fd5b6000613de1613ddc84613d9d565b613d82565b90508083825260208201905060208402830185811115613e0457613e03613dc9565b5b835b81811015613e2d5780613e198882613c1e565b845260208401935050602081019050613e06565b5050509392505050565b600082601f830112613e4c57613e4b613d1d565b5b8135613e5c848260208601613dce565b91505092915050565b600060208284031215613e7b57613e7a6139c8565b5b600082013567ffffffffffffffff811115613e9957613e986139cd565b5b613ea584828501613e37565b91505092915050565b600080fd5b60008083601f840112613ec957613ec8613d1d565b5b8235905067ffffffffffffffff811115613ee657613ee5613eae565b5b602083019150836001820283011115613f0257613f01613dc9565b5b9250929050565b60008060208385031215613f2057613f1f6139c8565b5b600083013567ffffffffffffffff811115613f3e57613f3d6139cd565b5b613f4a85828601613eb3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613f8b81613b48565b82525050565b6000613f9d8383613f82565b60208301905092915050565b6000602082019050919050565b6000613fc182613f56565b613fcb8185613f61565b9350613fd683613f72565b8060005b83811015614007578151613fee8882613f91565b9750613ff983613fa9565b925050600181019050613fda565b5085935050505092915050565b6000602082019050818103600083015261402e8184613fb6565b905092915050565b61403f81613a57565b811461404a57600080fd5b50565b60008135905061405c81614036565b92915050565b60008060408385031215614079576140786139c8565b5b600061408785828601613c1e565b92505060206140988582860161404d565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156140c2576140c1613d22565b5b6140cb82613adc565b9050602081019050919050565b82818337600083830152505050565b60006140fa6140f5846140a7565b613d82565b905082815260208101848484011115614116576141156140a2565b5b6141218482856140d8565b509392505050565b600082601f83011261413e5761413d613d1d565b5b813561414e8482602086016140e7565b91505092915050565b60008060008060808587031215614171576141706139c8565b5b600061417f87828801613c1e565b945050602061419087828801613c1e565b93505060406141a187828801613b69565b925050606085013567ffffffffffffffff8111156141c2576141c16139cd565b5b6141ce87828801614129565b91505092959194509250565b600080604083850312156141f1576141f06139c8565b5b60006141ff85828601613c1e565b925050602061421085828601613c1e565b9150509250929050565b600067ffffffffffffffff82111561423557614234613d22565b5b61423e82613adc565b9050602081019050919050565b600061425e6142598461421a565b613d82565b90508281526020810184848401111561427a576142796140a2565b5b6142858482856140d8565b509392505050565b600082601f8301126142a2576142a1613d1d565b5b81356142b284826020860161424b565b91505092915050565b6000602082840312156142d1576142d06139c8565b5b600082013567ffffffffffffffff8111156142ef576142ee6139cd565b5b6142fb8482850161428d565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061433a602083613a98565b915061434582614304565b602082019050919050565b600060208201905081810360008301526143698161432d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143b757607f821691505b602082108114156143cb576143ca614370565b5b50919050565b7f5075626c69632073616c65206e6f742061637469766521000000000000000000600082015250565b6000614407601783613a98565b9150614412826143d1565b602082019050919050565b60006020820190508181036000830152614436816143fa565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061447782613b48565b915061448283613b48565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144b7576144b661443d565b5b828201905092915050565b7f4e6f7420656e6f756768204e465473206c656674210000000000000000000000600082015250565b60006144f8601583613a98565b9150614503826144c2565b602082019050919050565b60006020820190508181036000830152614527816144eb565b9050919050565b7f5175616e746974792065786365656473206d6178206d696e747320706572207460008201527f72616e73616374696f6e21000000000000000000000000000000000000000000602082015250565b600061458a602b83613a98565b91506145958261452e565b604082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f43616e6e6f74206d696e742030204e4654732e00000000000000000000000000600082015250565b60006145f6601383613a98565b9150614601826145c0565b602082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b7f4e6f7420656e6f75676820657468657220746f207075726368617365204e465460008201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614688602283613a98565b91506146938261462c565b604082019050919050565b600060208201905081810360008301526146b78161467b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006146f882613b48565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561472b5761472a61443d565b5b600182019050919050565b600061474182613b48565b915061474c83613b48565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147855761478461443d565b5b828202905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006147ec602f83613a98565b91506147f782614790565b604082019050919050565b6000602082019050818103600083015261481b816147df565b9050919050565b600081905092915050565b600061483882613a8d565b6148428185614822565b9350614852818560208601613aa9565b80840191505092915050565b600061486a828561482d565b9150614876828461482d565b91508190509392505050565b7f467265652073616c65206973206e6f7420737461727465642100000000000000600082015250565b60006148b8601983613a98565b91506148c382614882565b602082019050919050565b600060208201905081810360008301526148e7816148ab565b9050919050565b7f5175616e746974792065786365656473206d6178206d696e747320706572206160008201527f63636f756e742100000000000000000000000000000000000000000000000000602082015250565b600061494a602783613a98565b9150614955826148ee565b604082019050919050565b600060208201905081810360008301526149798161493d565b9050919050565b7f4163636f756e74206973206e6f742077686974656c6973746564210000000000600082015250565b60006149b6601b83613a98565b91506149c182614980565b602082019050919050565b600060208201905081810360008301526149e5816149a9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a48602683613a98565b9150614a53826149ec565b604082019050919050565b60006020820190508181036000830152614a7781614a3b565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614aa582614a7e565b614aaf8185614a89565b9350614abf818560208601613aa9565b614ac881613adc565b840191505092915050565b6000608082019050614ae86000830187613bdd565b614af56020830186613bdd565b614b026040830185613c73565b8181036060830152614b148184614a9a565b905095945050505050565b600081519050614b2e816139fe565b92915050565b600060208284031215614b4a57614b496139c8565b5b6000614b5884828501614b1f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b9b82613b48565b9150614ba683613b48565b925082614bb657614bb5614b61565b5b828204905092915050565b6000614bcc82613b48565b9150614bd783613b48565b925082821015614bea57614be961443d565b5b828203905092915050565b6000614c0082613b48565b9150614c0b83613b48565b925082614c1b57614c1a614b61565b5b82820690509291505056fea2646970667358221220a1c4fe34d04c0a1bc5c1b0c812032c02cd4bd3ade6075caf77712aeae832406264736f6c634300080a0033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5766515845437561634c4e6e3953325a5164785151675a7959545a71594b4732504868504a35433554666d442f000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d63543146706b7a5669637033456a677932356d3868726a384532583734783331426946647247547a4435434d2f00000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://QmWfQXECuacLNn9S2ZQdxQQgZyYTZqYKG2PHhPJ5C5TfmD/
Arg [1] : unrevealedURI (string): ipfs://QmcT1FpkzVicp3Ejgy25m8hrj8E2X74x31BiFdrGTzD5CM/

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5766515845437561634c4e6e3953325a5164785151675a
Arg [4] : 7959545a71594b4732504868504a35433554666d442f00000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [6] : 697066733a2f2f516d63543146706b7a5669637033456a677932356d3868726a
Arg [7] : 384532583734783331426946647247547a4435434d2f00000000000000000000


Deployed Bytecode Sourcemap

46341:5555:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51294:85;;;;;;;;;;;;;:::i;:::-;;29809:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32419:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33922:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33485:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27046:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34779:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28632:1105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46415:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50359:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46949:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48293:644;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51784:109;;;;;;;;;;;;;:::i;:::-;;46463:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35020:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27619:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51387:84;;;;;;;;;;;;;:::i;:::-;;50703:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51051:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49592:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50916:127;;;;;;;;;;;;;:::i;:::-;;48065:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32228:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30245:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:103;;;;;;;;;;;;;:::i;:::-;;50497:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49971:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50169:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4079:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51479:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32588:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34198:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47938:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35276:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48170:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47484:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48945:639;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47001:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51581:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34548:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4988:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51165:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51294:85;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51367:4:::1;51349:15;;:22;;;;;;;;;;;;;;;;;;51294:85::o:0;29809:372::-;29911:4;29963:25;29948:40;;;:11;:40;;;;:105;;;;30020:33;30005:48;;;:11;:48;;;;29948:105;:172;;;;30085:35;30070:50;;;:11;:50;;;;29948:172;:225;;;;30137:36;30161:11;30137:23;:36::i;:::-;29948:225;29928:245;;29809:372;;;:::o;32419:100::-;32473:13;32506:5;32499:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32419:100;:::o;33922:204::-;33990:7;34015:16;34023:7;34015;:16::i;:::-;34010:64;;34040:34;;;;;;;;;;;;;;34010:64;34094:15;:24;34110:7;34094:24;;;;;;;;;;;;;;;;;;;;;34087:31;;33922:204;;;:::o;33485:371::-;33558:13;33574:24;33590:7;33574:15;:24::i;:::-;33558:40;;33619:5;33613:11;;:2;:11;;;33609:48;;;33633:24;;;;;;;;;;;;;;33609:48;33690:5;33674:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33700:37;33717:5;33724:12;:10;:12::i;:::-;33700:16;:37::i;:::-;33699:38;33674:63;33670:138;;;33761:35;;;;;;;;;;;;;;33670:138;33820:28;33829:2;33833:7;33842:5;33820:8;:28::i;:::-;33547:309;33485:371;;:::o;27046:280::-;27099:7;27291:12;;;;;;;;;;;27275:13;;;;;;;;;;:28;27268:35;;;;27046:280;:::o;34779:170::-;34913:28;34923:4;34929:2;34933:7;34913:9;:28::i;:::-;34779:170;;;:::o;28632:1105::-;28721:7;28754:16;28764:5;28754:9;:16::i;:::-;28745:5;:25;28741:61;;28779:23;;;;;;;;;;;;;;28741:61;28813:22;28838:13;;;;;;;;;;;28813:38;;;;28862:19;28892:25;29093:9;29088:557;29108:14;29104:1;:18;29088:557;;;29148:31;29182:11;:14;29194:1;29182:14;;;;;;;;;;;29148:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29219:9;:16;;;29215:73;;;29260:8;;;29215:73;29336:1;29310:28;;:9;:14;;;:28;;;29306:111;;29383:9;:14;;;29363:34;;29306:111;29460:5;29439:26;;:17;:26;;;29435:195;;;29509:5;29494:11;:20;29490:85;;;29550:1;29543:8;;;;;;;;;29490:85;29597:13;;;;;;;29435:195;29129:516;29088:557;29124:3;;;;;;;29088:557;;;;29721:8;;;28632:1105;;;;;:::o;46415:41::-;46452:4;46415:41;:::o;50359:130::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50464:17:::1;50445:16;:36;;;;50359:130:::0;:::o;46949:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;48293:644::-;48371:15;;;;;;;;;;;48370:16;48362:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;46512:4;48449:8;48433:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:50;;48425:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;48540:31;;48528:8;:43;;48520:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;48649:1;48638:8;:12;48630:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;48706:24;48721:8;48706:14;:24::i;:::-;48693:9;:37;;48685:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;46512:4;48801:8;48785:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:50;48781:105;;;48870:4;48852:15;;:22;;;;;;;;;;;;;;;;;;48781:105;48898:31;48908:10;48920:8;48898:9;:31::i;:::-;48293:644;:::o;51784:109::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51842:10:::1;51834:28;;:51;51863:21;51834:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51784:109::o:0;46463:53::-;46512:4;46463:53;:::o;35020:185::-;35158:39;35175:4;35181:2;35185:7;35158:39;;;;;;;;;;;;:16;:39::i;:::-;35020:185;;;:::o;27619:713::-;27686:7;27706:22;27731:13;;;;;;;;;;27706:38;;;;27755:19;27950:9;27945:328;27965:14;27961:1;:18;27945:328;;;28005:31;28039:11;:14;28051:1;28039:14;;;;;;;;;;;28005:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28077:9;:16;;;28072:186;;28137:5;28122:11;:20;28118:85;;;28178:1;28171:8;;;;;;;;28118:85;28225:13;;;;;;;28072:186;27986:287;27981:3;;;;;;;27945:328;;;;28301:23;;;;;;;;;;;;;;27619:713;;;;:::o;51387:84::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51458:5:::1;51440:15;;:23;;;;;;;;;;;;;;;;;;51387:84::o:0;50703:205::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50797:9:::1;50792:109;50815:10;:17;50811:1;:21;50792:109;;;50884:5;50853:13;:28;50867:10;50878:1;50867:13;;;;;;;;:::i;:::-;;;;;;;;50853:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;50833:3;;;;;:::i;:::-;;;;50792:109;;;;50703:205:::0;:::o;51051:106::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51142:7:::1;;51126:13;:23;;;;;;;:::i;:::-;;51051:106:::0;;:::o;49592:320::-;49646:16;49675:13;49691:16;49701:5;49691:9;:16::i;:::-;49675:32;;49718:25;49760:5;49746:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49718:48;;49782:9;49777:102;49797:5;49793:1;:9;49777:102;;;49838:29;49858:5;49865:1;49838:19;:29::i;:::-;49824:8;49833:1;49824:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;49804:3;;;;;:::i;:::-;;;;49777:102;;;;49896:8;49889:15;;;;49592:320;;;:::o;50916:127::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50972:10:::1;;;;;;;;;;;50968:67;;;50997:5;50984:10;;:18;;;;;;;;;;;;;;;;;;50968:67;;;51031:4;51018:10;;:17;;;;;;;;;;;;;;;;;;50968:67;50916:127::o:0;48065:97::-;48115:4;48139:15;;;;;;;;;;;48132:22;;48065:97;:::o;32228:124::-;32292:7;32319:20;32331:7;32319:11;:20::i;:::-;:25;;;32312:32;;32228:124;;;:::o;30245:206::-;30309:7;30350:1;30333:19;;:5;:19;;;30329:60;;;30361:28;;;;;;;;;;;;;;30329:60;30415:12;:19;30428:5;30415:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30407:36;;30400:43;;30245:206;;;:::o;4730:103::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4795:30:::1;4822:1;4795:18;:30::i;:::-;4730:103::o:0;50497:198::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50585:9:::1;50580:108;50603:10;:17;50599:1;:21;50580:108;;;50672:4;50641:13;:28;50655:10;50666:1;50655:13;;;;;;;;:::i;:::-;;;;;;;;50641:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;50621:3;;;;;:::i;:::-;;;;50580:108;;;;50497:198:::0;:::o;49971:190::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50121:32:::1;50087:31;:66;;;;49971:190:::0;:::o;50169:182::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50313:30:::1;50281:29;:62;;;;50169:182:::0;:::o;4079:87::-;4125:7;4152:6;;;;;;;;;;;4145:13;;4079:87;:::o;51479:94::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51560:5:::1;51542:15;:23;;;;51479:94:::0;:::o;32588:104::-;32644:13;32677:7;32670:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32588:104;:::o;34198:279::-;34301:12;:10;:12::i;:::-;34289:24;;:8;:24;;;34285:54;;;34322:17;;;;;;;;;;;;;;34285:54;34397:8;34352:18;:32;34371:12;:10;:12::i;:::-;34352:32;;;;;;;;;;;;;;;:42;34385:8;34352:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34450:8;34421:48;;34436:12;:10;:12::i;:::-;34421:48;;;34460:8;34421:48;;;;;;:::i;:::-;;;;;;;;34198:279;;:::o;47938:119::-;47998:7;48034:15;;48025:6;:24;;;;:::i;:::-;48018:31;;47938:119;;;:::o;35276:342::-;35443:28;35453:4;35459:2;35463:7;35443:9;:28::i;:::-;35487:48;35510:4;35516:2;35520:7;35529:5;35487:22;:48::i;:::-;35482:129;;35559:40;;;;;;;;;;;;;;35482:129;35276:342;;;;:::o;48170:105::-;48226:7;48253:14;;48246:21;;48170:105;:::o;47484:446::-;47557:13;47591:16;47599:7;47591;:16::i;:::-;47583:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;47677:10;;;;;;;;;;;47672:251;;47711:14;47704:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47672:251;47769:21;47793:10;:8;:10::i;:::-;47769:34;;47849:1;47831:7;47825:21;:25;:86;;;;;;;;;;;;;;;;;47877:7;47886:18;:7;:16;:18::i;:::-;47860:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47825:86;47818:93;;;47484:446;;;;:::o;48945:639::-;49013:15;;;;;;;;;;;49005:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46452:4;49093:8;49077:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;49069:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;49172:29;;49160:8;:41;;49152:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49304:16;;49268:20;:32;49289:10;49268:32;;;;;;;;;;;;;;;;:52;;49260:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;49383:13;:25;49397:10;49383:25;;;;;;;;;;;;;;;;;;;;;;;;;49375:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49470:1;49459:8;:12;49451:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;49526:8;49508:14;;:26;;;;;;;:::i;:::-;;;;;;;;49545:31;49555:10;49567:8;49545:9;:31::i;:::-;48945:639;:::o;47001:55::-;;;;;;;;;;;;;;;;;:::o;51581:195::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46452:4:::1;51676:8;51660:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:38;;51652:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;51737:31;51747:10;51759:8;51737:9;:31::i;:::-;51581:195:::0;:::o;34548:164::-;34645:4;34669:18;:25;34688:5;34669:25;;;;;;;;;;;;;;;:35;34695:8;34669:35;;;;;;;;;;;;;;;;;;;;;;;;;34662:42;;34548:164;;;;:::o;4988:201::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5097:1:::1;5077:22;;:8;:22;;;;5069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5153:28;5172:8;5153:18;:28::i;:::-;4988:201:::0;:::o;51165:121::-;4310:12;:10;:12::i;:::-;4299:23;;:7;:5;:7::i;:::-;:23;;;4291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51265:13:::1;51248:14;:30;;;;;;;;;;;;:::i;:::-;;51165:121:::0;:::o;2803:98::-;2856:7;2883:10;2876:17;;2803:98;:::o;16863:157::-;16948:4;16987:25;16972:40;;;:11;:40;;;;16965:47;;16863:157;;;:::o;35873:144::-;35930:4;35964:13;;;;;;;;;;;35954:23;;:7;:23;:55;;;;;35982:11;:20;35994:7;35982:20;;;;;;;;;;;:27;;;;;;;;;;;;35981:28;35954:55;35947:62;;35873:144;;;:::o;43089:196::-;43231:2;43204:15;:24;43220:7;43204:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43269:7;43265:2;43249:28;;43258:5;43249:28;;;;;;;;;;;;43089:196;;;:::o;38590:2112::-;38705:35;38743:20;38755:7;38743:11;:20::i;:::-;38705:58;;38776:22;38818:13;:18;;;38802:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;38853:50;38870:13;:18;;;38890:12;:10;:12::i;:::-;38853:16;:50::i;:::-;38802:101;:154;;;;38944:12;:10;:12::i;:::-;38920:36;;:20;38932:7;38920:11;:20::i;:::-;:36;;;38802:154;38776:181;;38975:17;38970:66;;39001:35;;;;;;;;;;;;;;38970:66;39073:4;39051:26;;:13;:18;;;:26;;;39047:67;;39086:28;;;;;;;;;;;;;;39047:67;39143:1;39129:16;;:2;:16;;;39125:52;;;39154:23;;;;;;;;;;;;;;39125:52;39190:43;39212:4;39218:2;39222:7;39231:1;39190:21;:43::i;:::-;39298:49;39315:1;39319:7;39328:13;:18;;;39298:8;:49::i;:::-;39673:1;39643:12;:18;39656:4;39643:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39717:1;39689:12;:16;39702:2;39689:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39763:2;39735:11;:20;39747:7;39735:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;39825:15;39780:11;:20;39792:7;39780:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40093:19;40125:1;40115:7;:11;40093:33;;40186:1;40145:43;;:11;:24;40157:11;40145:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40141:445;;;40370:13;;;;;;;;;;40356:27;;:11;:27;40352:219;;;40440:13;:18;;;40408:11;:24;40420:11;40408:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40523:13;:28;;;40481:11;:24;40493:11;40481:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40352:219;40141:445;39618:979;40633:7;40629:2;40614:27;;40623:4;40614:27;;;;;;;;;;;;40652:42;40673:4;40679:2;40683:7;40692:1;40652:20;:42::i;:::-;38694:2008;;38590:2112;;;:::o;36025:104::-;36094:27;36104:2;36108:8;36094:27;;;;;;;;;;;;:9;:27::i;:::-;36025:104;;:::o;31083:1083::-;31144:21;;:::i;:::-;31178:12;31193:7;31178:22;;31249:13;;;;;;;;;;31242:20;;:4;:20;31238:861;;;31283:31;31317:11;:17;31329:4;31317:17;;;;;;;;;;;31283:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31358:9;:16;;;31353:731;;31429:1;31403:28;;:9;:14;;;:28;;;31399:101;;31467:9;31460:16;;;;;;31399:101;31804:261;31811:4;31804:261;;;31844:6;;;;;;;;31889:11;:17;31901:4;31889:17;;;;;;;;;;;31877:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31963:1;31937:28;;:9;:14;;;:28;;;31933:109;;32005:9;31998:16;;;;;;31933:109;31804:261;;;31353:731;31264:835;31238:861;32127:31;;;;;;;;;;;;;;31083:1083;;;;:::o;5349:191::-;5423:16;5442:6;;;;;;;;;;;5423:25;;5468:8;5459:6;;:17;;;;;;;;;;;;;;;;;;5523:8;5492:40;;5513:8;5492:40;;;;;;;;;;;;5412:128;5349:191;:::o;43850:790::-;44005:4;44026:15;:2;:13;;;:15::i;:::-;44022:611;;;44078:2;44062:36;;;44099:12;:10;:12::i;:::-;44113:4;44119:7;44128:5;44062:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44058:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44325:1;44308:6;:13;:18;44304:259;;;44358:40;;;;;;;;;;;;;;44304:259;44513:6;44507:13;44498:6;44494:2;44490:15;44483:38;44058:520;44195:45;;;44185:55;;;:6;:55;;;;44178:62;;;;;44022:611;44617:4;44610:11;;43850:790;;;;;;;:::o;47285:191::-;47345:13;47376:10;;;;;;;;;;;47371:65;;47410:14;47403:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47371:65;47455:13;47448:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47285:191;;:::o;365:723::-;421:13;651:1;642:5;:10;638:53;;;669:10;;;;;;;;;;;;;;;;;;;;;638:53;701:12;716:5;701:20;;732:14;757:78;772:1;764:4;:9;757:78;;790:8;;;;;:::i;:::-;;;;821:2;813:10;;;;;:::i;:::-;;;757:78;;;845:19;877:6;867:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;845:39;;895:154;911:1;902:5;:10;895:154;;939:1;929:11;;;;;:::i;:::-;;;1006:2;998:5;:10;;;;:::i;:::-;985:2;:24;;;;:::i;:::-;972:39;;955:6;962;955:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1035:2;1026:11;;;;;:::i;:::-;;;895:154;;;1073:6;1059:21;;;;;365:723;;;;:::o;45288:159::-;;;;;:::o;46106:158::-;;;;;:::o;36492:163::-;36615:32;36621:2;36625:8;36635:5;36642:4;36615:5;:32::i;:::-;36492:163;;;:::o;6780:326::-;6840:4;7097:1;7075:7;:19;;;:23;7068:30;;6780:326;;;:::o;36914:1422::-;37053:20;37076:13;;;;;;;;;;;37053:36;;;;37118:1;37104:16;;:2;:16;;;37100:48;;;37129:19;;;;;;;;;;;;;;37100:48;37175:1;37163:8;:13;37159:44;;;37185:18;;;;;;;;;;;;;;37159:44;37216:61;37246:1;37250:2;37254:12;37268:8;37216:21;:61::i;:::-;37590:8;37555:12;:16;37568:2;37555:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37654:8;37614:12;:16;37627:2;37614:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37713:2;37680:11;:25;37692:12;37680:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37780:15;37730:11;:25;37742:12;37730:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37813:20;37836:12;37813:35;;37870:9;37865:328;37885:8;37881:1;:12;37865:328;;;37949:12;37945:2;37924:38;;37941:1;37924:38;;;;;;;;;;;;37985:4;:68;;;;;37994:59;38025:1;38029:2;38033:12;38047:5;37994:22;:59::i;:::-;37993:60;37985:68;37981:164;;;38085:40;;;;;;;;;;;;;;37981:164;38163:14;;;;;;;37895:3;;;;;;;37865:328;;;;38233:12;38209:13;;:37;;;;;;;;;;;;;;;;;;37530:728;38268:60;38297:1;38301:2;38305:12;38319:8;38268:20;:60::i;:::-;37042:1294;36914:1422;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:117::-;6359:1;6356;6349:12;6373:180;6421:77;6418:1;6411:88;6518:4;6515:1;6508:15;6542:4;6539:1;6532:15;6559:281;6642:27;6664:4;6642:27;:::i;:::-;6634:6;6630:40;6772:6;6760:10;6757:22;6736:18;6724:10;6721:34;6718:62;6715:88;;;6783:18;;:::i;:::-;6715:88;6823:10;6819:2;6812:22;6602:238;6559:281;;:::o;6846:129::-;6880:6;6907:20;;:::i;:::-;6897:30;;6936:33;6964:4;6956:6;6936:33;:::i;:::-;6846:129;;;:::o;6981:311::-;7058:4;7148:18;7140:6;7137:30;7134:56;;;7170:18;;:::i;:::-;7134:56;7220:4;7212:6;7208:17;7200:25;;7280:4;7274;7270:15;7262:23;;6981:311;;;:::o;7298:117::-;7407:1;7404;7397:12;7438:710;7534:5;7559:81;7575:64;7632:6;7575:64;:::i;:::-;7559:81;:::i;:::-;7550:90;;7660:5;7689:6;7682:5;7675:21;7723:4;7716:5;7712:16;7705:23;;7776:4;7768:6;7764:17;7756:6;7752:30;7805:3;7797:6;7794:15;7791:122;;;7824:79;;:::i;:::-;7791:122;7939:6;7922:220;7956:6;7951:3;7948:15;7922:220;;;8031:3;8060:37;8093:3;8081:10;8060:37;:::i;:::-;8055:3;8048:50;8127:4;8122:3;8118:14;8111:21;;7998:144;7982:4;7977:3;7973:14;7966:21;;7922:220;;;7926:21;7540:608;;7438:710;;;;;:::o;8171:370::-;8242:5;8291:3;8284:4;8276:6;8272:17;8268:27;8258:122;;8299:79;;:::i;:::-;8258:122;8416:6;8403:20;8441:94;8531:3;8523:6;8516:4;8508:6;8504:17;8441:94;:::i;:::-;8432:103;;8248:293;8171:370;;;;:::o;8547:539::-;8631:6;8680:2;8668:9;8659:7;8655:23;8651:32;8648:119;;;8686:79;;:::i;:::-;8648:119;8834:1;8823:9;8819:17;8806:31;8864:18;8856:6;8853:30;8850:117;;;8886:79;;:::i;:::-;8850:117;8991:78;9061:7;9052:6;9041:9;9037:22;8991:78;:::i;:::-;8981:88;;8777:302;8547:539;;;;:::o;9092:117::-;9201:1;9198;9191:12;9229:553;9287:8;9297:6;9347:3;9340:4;9332:6;9328:17;9324:27;9314:122;;9355:79;;:::i;:::-;9314:122;9468:6;9455:20;9445:30;;9498:18;9490:6;9487:30;9484:117;;;9520:79;;:::i;:::-;9484:117;9634:4;9626:6;9622:17;9610:29;;9688:3;9680:4;9672:6;9668:17;9658:8;9654:32;9651:41;9648:128;;;9695:79;;:::i;:::-;9648:128;9229:553;;;;;:::o;9788:529::-;9859:6;9867;9916:2;9904:9;9895:7;9891:23;9887:32;9884:119;;;9922:79;;:::i;:::-;9884:119;10070:1;10059:9;10055:17;10042:31;10100:18;10092:6;10089:30;10086:117;;;10122:79;;:::i;:::-;10086:117;10235:65;10292:7;10283:6;10272:9;10268:22;10235:65;:::i;:::-;10217:83;;;;10013:297;9788:529;;;;;:::o;10323:114::-;10390:6;10424:5;10418:12;10408:22;;10323:114;;;:::o;10443:184::-;10542:11;10576:6;10571:3;10564:19;10616:4;10611:3;10607:14;10592:29;;10443:184;;;;:::o;10633:132::-;10700:4;10723:3;10715:11;;10753:4;10748:3;10744:14;10736:22;;10633:132;;;:::o;10771:108::-;10848:24;10866:5;10848:24;:::i;:::-;10843:3;10836:37;10771:108;;:::o;10885:179::-;10954:10;10975:46;11017:3;11009:6;10975:46;:::i;:::-;11053:4;11048:3;11044:14;11030:28;;10885:179;;;;:::o;11070:113::-;11140:4;11172;11167:3;11163:14;11155:22;;11070:113;;;:::o;11219:732::-;11338:3;11367:54;11415:5;11367:54;:::i;:::-;11437:86;11516:6;11511:3;11437:86;:::i;:::-;11430:93;;11547:56;11597:5;11547:56;:::i;:::-;11626:7;11657:1;11642:284;11667:6;11664:1;11661:13;11642:284;;;11743:6;11737:13;11770:63;11829:3;11814:13;11770:63;:::i;:::-;11763:70;;11856:60;11909:6;11856:60;:::i;:::-;11846:70;;11702:224;11689:1;11686;11682:9;11677:14;;11642:284;;;11646:14;11942:3;11935:10;;11343:608;;;11219:732;;;;:::o;11957:373::-;12100:4;12138:2;12127:9;12123:18;12115:26;;12187:9;12181:4;12177:20;12173:1;12162:9;12158:17;12151:47;12215:108;12318:4;12309:6;12215:108;:::i;:::-;12207:116;;11957:373;;;;:::o;12336:116::-;12406:21;12421:5;12406:21;:::i;:::-;12399:5;12396:32;12386:60;;12442:1;12439;12432:12;12386:60;12336:116;:::o;12458:133::-;12501:5;12539:6;12526:20;12517:29;;12555:30;12579:5;12555:30;:::i;:::-;12458:133;;;;:::o;12597:468::-;12662:6;12670;12719:2;12707:9;12698:7;12694:23;12690:32;12687:119;;;12725:79;;:::i;:::-;12687:119;12845:1;12870:53;12915:7;12906:6;12895:9;12891:22;12870:53;:::i;:::-;12860:63;;12816:117;12972:2;12998:50;13040:7;13031:6;13020:9;13016:22;12998:50;:::i;:::-;12988:60;;12943:115;12597:468;;;;;:::o;13071:117::-;13180:1;13177;13170:12;13194:307;13255:4;13345:18;13337:6;13334:30;13331:56;;;13367:18;;:::i;:::-;13331:56;13405:29;13427:6;13405:29;:::i;:::-;13397:37;;13489:4;13483;13479:15;13471:23;;13194:307;;;:::o;13507:154::-;13591:6;13586:3;13581;13568:30;13653:1;13644:6;13639:3;13635:16;13628:27;13507:154;;;:::o;13667:410::-;13744:5;13769:65;13785:48;13826:6;13785:48;:::i;:::-;13769:65;:::i;:::-;13760:74;;13857:6;13850:5;13843:21;13895:4;13888:5;13884:16;13933:3;13924:6;13919:3;13915:16;13912:25;13909:112;;;13940:79;;:::i;:::-;13909:112;14030:41;14064:6;14059:3;14054;14030:41;:::i;:::-;13750:327;13667:410;;;;;:::o;14096:338::-;14151:5;14200:3;14193:4;14185:6;14181:17;14177:27;14167:122;;14208:79;;:::i;:::-;14167:122;14325:6;14312:20;14350:78;14424:3;14416:6;14409:4;14401:6;14397:17;14350:78;:::i;:::-;14341:87;;14157:277;14096:338;;;;:::o;14440:943::-;14535:6;14543;14551;14559;14608:3;14596:9;14587:7;14583:23;14579:33;14576:120;;;14615:79;;:::i;:::-;14576:120;14735:1;14760:53;14805:7;14796:6;14785:9;14781:22;14760:53;:::i;:::-;14750:63;;14706:117;14862:2;14888:53;14933:7;14924:6;14913:9;14909:22;14888:53;:::i;:::-;14878:63;;14833:118;14990:2;15016:53;15061:7;15052:6;15041:9;15037:22;15016:53;:::i;:::-;15006:63;;14961:118;15146:2;15135:9;15131:18;15118:32;15177:18;15169:6;15166:30;15163:117;;;15199:79;;:::i;:::-;15163:117;15304:62;15358:7;15349:6;15338:9;15334:22;15304:62;:::i;:::-;15294:72;;15089:287;14440:943;;;;;;;:::o;15389:474::-;15457:6;15465;15514:2;15502:9;15493:7;15489:23;15485:32;15482:119;;;15520:79;;:::i;:::-;15482:119;15640:1;15665:53;15710:7;15701:6;15690:9;15686:22;15665:53;:::i;:::-;15655:63;;15611:117;15767:2;15793:53;15838:7;15829:6;15818:9;15814:22;15793:53;:::i;:::-;15783:63;;15738:118;15389:474;;;;;:::o;15869:308::-;15931:4;16021:18;16013:6;16010:30;16007:56;;;16043:18;;:::i;:::-;16007:56;16081:29;16103:6;16081:29;:::i;:::-;16073:37;;16165:4;16159;16155:15;16147:23;;15869:308;;;:::o;16183:412::-;16261:5;16286:66;16302:49;16344:6;16302:49;:::i;:::-;16286:66;:::i;:::-;16277:75;;16375:6;16368:5;16361:21;16413:4;16406:5;16402:16;16451:3;16442:6;16437:3;16433:16;16430:25;16427:112;;;16458:79;;:::i;:::-;16427:112;16548:41;16582:6;16577:3;16572;16548:41;:::i;:::-;16267:328;16183:412;;;;;:::o;16615:340::-;16671:5;16720:3;16713:4;16705:6;16701:17;16697:27;16687:122;;16728:79;;:::i;:::-;16687:122;16845:6;16832:20;16870:79;16945:3;16937:6;16930:4;16922:6;16918:17;16870:79;:::i;:::-;16861:88;;16677:278;16615:340;;;;:::o;16961:509::-;17030:6;17079:2;17067:9;17058:7;17054:23;17050:32;17047:119;;;17085:79;;:::i;:::-;17047:119;17233:1;17222:9;17218:17;17205:31;17263:18;17255:6;17252:30;17249:117;;;17285:79;;:::i;:::-;17249:117;17390:63;17445:7;17436:6;17425:9;17421:22;17390:63;:::i;:::-;17380:73;;17176:287;16961:509;;;;:::o;17476:182::-;17616:34;17612:1;17604:6;17600:14;17593:58;17476:182;:::o;17664:366::-;17806:3;17827:67;17891:2;17886:3;17827:67;:::i;:::-;17820:74;;17903:93;17992:3;17903:93;:::i;:::-;18021:2;18016:3;18012:12;18005:19;;17664:366;;;:::o;18036:419::-;18202:4;18240:2;18229:9;18225:18;18217:26;;18289:9;18283:4;18279:20;18275:1;18264:9;18260:17;18253:47;18317:131;18443:4;18317:131;:::i;:::-;18309:139;;18036:419;;;:::o;18461:180::-;18509:77;18506:1;18499:88;18606:4;18603:1;18596:15;18630:4;18627:1;18620:15;18647:320;18691:6;18728:1;18722:4;18718:12;18708:22;;18775:1;18769:4;18765:12;18796:18;18786:81;;18852:4;18844:6;18840:17;18830:27;;18786:81;18914:2;18906:6;18903:14;18883:18;18880:38;18877:84;;;18933:18;;:::i;:::-;18877:84;18698:269;18647:320;;;:::o;18973:173::-;19113:25;19109:1;19101:6;19097:14;19090:49;18973:173;:::o;19152:366::-;19294:3;19315:67;19379:2;19374:3;19315:67;:::i;:::-;19308:74;;19391:93;19480:3;19391:93;:::i;:::-;19509:2;19504:3;19500:12;19493:19;;19152:366;;;:::o;19524:419::-;19690:4;19728:2;19717:9;19713:18;19705:26;;19777:9;19771:4;19767:20;19763:1;19752:9;19748:17;19741:47;19805:131;19931:4;19805:131;:::i;:::-;19797:139;;19524:419;;;:::o;19949:180::-;19997:77;19994:1;19987:88;20094:4;20091:1;20084:15;20118:4;20115:1;20108:15;20135:305;20175:3;20194:20;20212:1;20194:20;:::i;:::-;20189:25;;20228:20;20246:1;20228:20;:::i;:::-;20223:25;;20382:1;20314:66;20310:74;20307:1;20304:81;20301:107;;;20388:18;;:::i;:::-;20301:107;20432:1;20429;20425:9;20418:16;;20135:305;;;;:::o;20446:171::-;20586:23;20582:1;20574:6;20570:14;20563:47;20446:171;:::o;20623:366::-;20765:3;20786:67;20850:2;20845:3;20786:67;:::i;:::-;20779:74;;20862:93;20951:3;20862:93;:::i;:::-;20980:2;20975:3;20971:12;20964:19;;20623:366;;;:::o;20995:419::-;21161:4;21199:2;21188:9;21184:18;21176:26;;21248:9;21242:4;21238:20;21234:1;21223:9;21219:17;21212:47;21276:131;21402:4;21276:131;:::i;:::-;21268:139;;20995:419;;;:::o;21420:230::-;21560:34;21556:1;21548:6;21544:14;21537:58;21629:13;21624:2;21616:6;21612:15;21605:38;21420:230;:::o;21656:366::-;21798:3;21819:67;21883:2;21878:3;21819:67;:::i;:::-;21812:74;;21895:93;21984:3;21895:93;:::i;:::-;22013:2;22008:3;22004:12;21997:19;;21656:366;;;:::o;22028:419::-;22194:4;22232:2;22221:9;22217:18;22209:26;;22281:9;22275:4;22271:20;22267:1;22256:9;22252:17;22245:47;22309:131;22435:4;22309:131;:::i;:::-;22301:139;;22028:419;;;:::o;22453:169::-;22593:21;22589:1;22581:6;22577:14;22570:45;22453:169;:::o;22628:366::-;22770:3;22791:67;22855:2;22850:3;22791:67;:::i;:::-;22784:74;;22867:93;22956:3;22867:93;:::i;:::-;22985:2;22980:3;22976:12;22969:19;;22628:366;;;:::o;23000:419::-;23166:4;23204:2;23193:9;23189:18;23181:26;;23253:9;23247:4;23243:20;23239:1;23228:9;23224:17;23217:47;23281:131;23407:4;23281:131;:::i;:::-;23273:139;;23000:419;;;:::o;23425:221::-;23565:34;23561:1;23553:6;23549:14;23542:58;23634:4;23629:2;23621:6;23617:15;23610:29;23425:221;:::o;23652:366::-;23794:3;23815:67;23879:2;23874:3;23815:67;:::i;:::-;23808:74;;23891:93;23980:3;23891:93;:::i;:::-;24009:2;24004:3;24000:12;23993:19;;23652:366;;;:::o;24024:419::-;24190:4;24228:2;24217:9;24213:18;24205:26;;24277:9;24271:4;24267:20;24263:1;24252:9;24248:17;24241:47;24305:131;24431:4;24305:131;:::i;:::-;24297:139;;24024:419;;;:::o;24449:180::-;24497:77;24494:1;24487:88;24594:4;24591:1;24584:15;24618:4;24615:1;24608:15;24635:233;24674:3;24697:24;24715:5;24697:24;:::i;:::-;24688:33;;24743:66;24736:5;24733:77;24730:103;;;24813:18;;:::i;:::-;24730:103;24860:1;24853:5;24849:13;24842:20;;24635:233;;;:::o;24874:348::-;24914:7;24937:20;24955:1;24937:20;:::i;:::-;24932:25;;24971:20;24989:1;24971:20;:::i;:::-;24966:25;;25159:1;25091:66;25087:74;25084:1;25081:81;25076:1;25069:9;25062:17;25058:105;25055:131;;;25166:18;;:::i;:::-;25055:131;25214:1;25211;25207:9;25196:20;;24874:348;;;;:::o;25228:234::-;25368:34;25364:1;25356:6;25352:14;25345:58;25437:17;25432:2;25424:6;25420:15;25413:42;25228:234;:::o;25468:366::-;25610:3;25631:67;25695:2;25690:3;25631:67;:::i;:::-;25624:74;;25707:93;25796:3;25707:93;:::i;:::-;25825:2;25820:3;25816:12;25809:19;;25468:366;;;:::o;25840:419::-;26006:4;26044:2;26033:9;26029:18;26021:26;;26093:9;26087:4;26083:20;26079:1;26068:9;26064:17;26057:47;26121:131;26247:4;26121:131;:::i;:::-;26113:139;;25840:419;;;:::o;26265:148::-;26367:11;26404:3;26389:18;;26265:148;;;;:::o;26419:377::-;26525:3;26553:39;26586:5;26553:39;:::i;:::-;26608:89;26690:6;26685:3;26608:89;:::i;:::-;26601:96;;26706:52;26751:6;26746:3;26739:4;26732:5;26728:16;26706:52;:::i;:::-;26783:6;26778:3;26774:16;26767:23;;26529:267;26419:377;;;;:::o;26802:435::-;26982:3;27004:95;27095:3;27086:6;27004:95;:::i;:::-;26997:102;;27116:95;27207:3;27198:6;27116:95;:::i;:::-;27109:102;;27228:3;27221:10;;26802:435;;;;;:::o;27243:175::-;27383:27;27379:1;27371:6;27367:14;27360:51;27243:175;:::o;27424:366::-;27566:3;27587:67;27651:2;27646:3;27587:67;:::i;:::-;27580:74;;27663:93;27752:3;27663:93;:::i;:::-;27781:2;27776:3;27772:12;27765:19;;27424:366;;;:::o;27796:419::-;27962:4;28000:2;27989:9;27985:18;27977:26;;28049:9;28043:4;28039:20;28035:1;28024:9;28020:17;28013:47;28077:131;28203:4;28077:131;:::i;:::-;28069:139;;27796:419;;;:::o;28221:226::-;28361:34;28357:1;28349:6;28345:14;28338:58;28430:9;28425:2;28417:6;28413:15;28406:34;28221:226;:::o;28453:366::-;28595:3;28616:67;28680:2;28675:3;28616:67;:::i;:::-;28609:74;;28692:93;28781:3;28692:93;:::i;:::-;28810:2;28805:3;28801:12;28794:19;;28453:366;;;:::o;28825:419::-;28991:4;29029:2;29018:9;29014:18;29006:26;;29078:9;29072:4;29068:20;29064:1;29053:9;29049:17;29042:47;29106:131;29232:4;29106:131;:::i;:::-;29098:139;;28825:419;;;:::o;29250:177::-;29390:29;29386:1;29378:6;29374:14;29367:53;29250:177;:::o;29433:366::-;29575:3;29596:67;29660:2;29655:3;29596:67;:::i;:::-;29589:74;;29672:93;29761:3;29672:93;:::i;:::-;29790:2;29785:3;29781:12;29774:19;;29433:366;;;:::o;29805:419::-;29971:4;30009:2;29998:9;29994:18;29986:26;;30058:9;30052:4;30048:20;30044:1;30033:9;30029:17;30022:47;30086:131;30212:4;30086:131;:::i;:::-;30078:139;;29805:419;;;:::o;30230:225::-;30370:34;30366:1;30358:6;30354:14;30347:58;30439:8;30434:2;30426:6;30422:15;30415:33;30230:225;:::o;30461:366::-;30603:3;30624:67;30688:2;30683:3;30624:67;:::i;:::-;30617:74;;30700:93;30789:3;30700:93;:::i;:::-;30818:2;30813:3;30809:12;30802:19;;30461:366;;;:::o;30833:419::-;30999:4;31037:2;31026:9;31022:18;31014:26;;31086:9;31080:4;31076:20;31072:1;31061:9;31057:17;31050:47;31114:131;31240:4;31114:131;:::i;:::-;31106:139;;30833:419;;;:::o;31258:98::-;31309:6;31343:5;31337:12;31327:22;;31258:98;;;:::o;31362:168::-;31445:11;31479:6;31474:3;31467:19;31519:4;31514:3;31510:14;31495:29;;31362:168;;;;:::o;31536:360::-;31622:3;31650:38;31682:5;31650:38;:::i;:::-;31704:70;31767:6;31762:3;31704:70;:::i;:::-;31697:77;;31783:52;31828:6;31823:3;31816:4;31809:5;31805:16;31783:52;:::i;:::-;31860:29;31882:6;31860:29;:::i;:::-;31855:3;31851:39;31844:46;;31626:270;31536:360;;;;:::o;31902:640::-;32097:4;32135:3;32124:9;32120:19;32112:27;;32149:71;32217:1;32206:9;32202:17;32193:6;32149:71;:::i;:::-;32230:72;32298:2;32287:9;32283:18;32274:6;32230:72;:::i;:::-;32312;32380:2;32369:9;32365:18;32356:6;32312:72;:::i;:::-;32431:9;32425:4;32421:20;32416:2;32405:9;32401:18;32394:48;32459:76;32530:4;32521:6;32459:76;:::i;:::-;32451:84;;31902:640;;;;;;;:::o;32548:141::-;32604:5;32635:6;32629:13;32620:22;;32651:32;32677:5;32651:32;:::i;:::-;32548:141;;;;:::o;32695:349::-;32764:6;32813:2;32801:9;32792:7;32788:23;32784:32;32781:119;;;32819:79;;:::i;:::-;32781:119;32939:1;32964:63;33019:7;33010:6;32999:9;32995:22;32964:63;:::i;:::-;32954:73;;32910:127;32695:349;;;;:::o;33050:180::-;33098:77;33095:1;33088:88;33195:4;33192:1;33185:15;33219:4;33216:1;33209:15;33236:185;33276:1;33293:20;33311:1;33293:20;:::i;:::-;33288:25;;33327:20;33345:1;33327:20;:::i;:::-;33322:25;;33366:1;33356:35;;33371:18;;:::i;:::-;33356:35;33413:1;33410;33406:9;33401:14;;33236:185;;;;:::o;33427:191::-;33467:4;33487:20;33505:1;33487:20;:::i;:::-;33482:25;;33521:20;33539:1;33521:20;:::i;:::-;33516:25;;33560:1;33557;33554:8;33551:34;;;33565:18;;:::i;:::-;33551:34;33610:1;33607;33603:9;33595:17;;33427:191;;;;:::o;33624:176::-;33656:1;33673:20;33691:1;33673:20;:::i;:::-;33668:25;;33707:20;33725:1;33707:20;:::i;:::-;33702:25;;33746:1;33736:35;;33751:18;;:::i;:::-;33736:35;33792:1;33789;33785:9;33780:14;;33624:176;;;;:::o

Swarm Source

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