ETH Price: $3,095.49 (+0.39%)
Gas: 10 Gwei

Token

Memories In Ether (MiE)
 

Overview

Max Total Supply

7,777 MiE

Holders

814

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
7 MiE
0x81e18acce3d6193c30992a87805e9d2788a92f50
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:
MemoriesInEther

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/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/utils/Address.sol


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// Creator: Chiru Labs

pragma solidity ^0.8.0;









/**
 * @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..).
 *
 * Does not support burning tokens to address(0).
 *
 * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply
 */
contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // 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) {
        return currentIndex;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @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) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        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.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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) {
        require(owner != address(0), 'ERC721A: balance query for the zero address');
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * 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) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @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) {
        require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    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;
        require(to != address(0), 'ERC721A: mint to the zero address');
        require(quantity != 0, 'ERC721A: quantity must be greater than 0');

        _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 > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(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) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        'ERC721A: transfer to non ERC721Receiver implementer'
                    );
                }

                updatedIndex++;
            }

            currentIndex = 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 ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _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**256.
        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)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @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('ERC721A: transfer to non ERC721Receiver implementer');
                } 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.
     *
     * 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`.
     */
    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.
     *
     * 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` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}
// File: memories.sol



pragma solidity ^0.8.0;

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// 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() {
        _setOwner(_msgSender());
    }

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

//newerc.sol
pragma solidity ^0.8.0;


contract MemoriesInEther is ERC721A, Ownable, Pausable, ReentrancyGuard {
    using Strings for uint256;
    string public uriPrefix = "";
    string public uriSuffix = ".json";
    string public hiddenMetadataUri;
    
    uint256 public cost = 0 ether;
    uint256 public maxSupply = 7777;
    uint256 public maxMintAmountPerTx = 7;
    uint256 public maxperAddressPublicMint = 7;

    bool public revealed = false;

    constructor() ERC721A("Memories In Ether", "MiE") {
     setHiddenMetadataUri("https://memoriesinether.com/unrevealed.json");
    }


    function mint(uint256 _mintAmount) public payable nonReentrant {
        uint256 s = totalSupply();
        require(_mintAmount > 0, "Cant mint 0");
        require(_mintAmount <= maxperAddressPublicMint, "Cant mint more then maxmint" );
        require(s + _mintAmount <= maxSupply, "Cant go over supply");
        require(msg.value >= cost * _mintAmount);
        _safeMint(msg.sender, _mintAmount);
        delete s;
    }

    function gift(uint256[] calldata quantity, address[] calldata recipient)
        external
        onlyOwner
    {
        require(
            quantity.length == recipient.length,
            "Provide quantities and recipients"
        );
        uint256 totalQuantity = 0;
        uint256 s = totalSupply();
        for (uint256 i = 0; i < quantity.length; ++i) {
            totalQuantity += quantity[i];
        }
        require(s + totalQuantity <= maxSupply, "Too many");
        delete totalQuantity;
        for (uint256 i = 0; i < recipient.length; ++i) {
            _safeMint(recipient[i], quantity[i]);
        }
        delete s;
    }

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

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

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

    function setRevealed(bool _state) public onlyOwner {
     revealed = _state;
    }

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

    function setmaxSupply(uint256 _newMaxSupply) public onlyOwner {
        require(_newMaxSupply <= maxSupply, "Cannot increase max supply");
        maxSupply = _newMaxSupply;
    }

    function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
     hiddenMetadataUri = _hiddenMetadataUri;
    }

    function setUriPrefix(string memory _uriPrefix) public onlyOwner {
     uriPrefix = _uriPrefix;
    }

    function setUriSuffix(string memory _uriSuffix) public onlyOwner {
     uriSuffix = _uriSuffix;
    }

    function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner {
     maxMintAmountPerTx = _maxMintAmountPerTx;
    }

    function setMaxperAddressPublicMint(uint256 _amount) public onlyOwner {
        maxperAddressPublicMint = _amount;
    }

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

    function withdrawAny(uint256 _amount) public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{value: _amount}("");
        require(success);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"quantity","type":"uint256[]"},{"internalType":"address[]","name":"recipient","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawAny","outputs":[],"stateMutability":"payable","type":"function"}]

608060405260405180602001604052806000815250600990805190602001906200002b9291906200036e565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a9080519060200190620000799291906200036e565b506000600c55611e61600d556007600e556007600f556000601060006101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280601181526020017f4d656d6f7269657320496e2045746865720000000000000000000000000000008152506040518060400160405280600381526020017f4d6945000000000000000000000000000000000000000000000000000000000081525081600190805190602001906200013c9291906200036e565b508060029080519060200190620001559291906200036e565b505050620001786200016c620001cb60201b60201c565b620001d360201b60201c565b6000600760146101000a81548160ff0219169083151502179055506001600881905550620001c56040518060600160405280602b8152602001620052a8602b91396200029960201b60201c565b62000506565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002a9620001cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002cf6200034460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000328576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031f9062000445565b60405180910390fd5b80600b9080519060200190620003409291906200036e565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200037c9062000478565b90600052602060002090601f016020900481019282620003a05760008555620003ec565b82601f10620003bb57805160ff1916838001178555620003ec565b82800160010185558215620003ec579182015b82811115620003eb578251825591602001919060010190620003ce565b5b509050620003fb9190620003ff565b5090565b5b808211156200041a57600081600090555060010162000400565b5090565b60006200042d60208362000467565b91506200043a82620004dd565b602082019050919050565b6000602082019050818103600083015262000460816200041e565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200049157607f821691505b60208210811415620004a857620004a7620004ae565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614d9280620005166000396000f3fe60806040526004361061023b5760003560e01c806362b99ad41161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd14610820578063d5abeb011461085d578063e0a8085314610888578063e985e9c5146108b1578063f2fde38b146108ee5761023b565b8063a0712d681461075e578063a22cb4651461077a578063a45ba8e7146107a3578063b071401b146107ce578063b88d4fde146107f75761023b565b80637ec4a659116100f25780637ec4a6591461068b5780638da5cb5b146106b457806394354fd0146106df57806395d89b411461070a57806396ea3a47146107355761023b565b806362b99ad4146105b35780636352211e146105de57806370a082311461061b578063715018a61461065857806377ad99f01461066f5761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104cc5780634fdd43cb1461050957806351830227146105325780635503a0e81461055d5780635c975abb146105885761023b565b80632f745c591461040857806334c8fd75146104455780633ccfd60b1461047057806342842e0e1461047a57806344a0d68a146104a35761023b565b806313faede61161020357806313faede61461033757806316ba10e01461036257806318160ddd1461038b578063228025e8146103b657806323b872dd146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613766565b610917565b6040516102749190613de3565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613809565b610a61565b005b3480156102b257600080fd5b506102bb610ae7565b6040516102c89190613dfe565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613809565b610b79565b6040516103059190613d7c565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613678565b610bfe565b005b34801561034357600080fd5b5061034c610d17565b6040516103599190614160565b60405180910390f35b34801561036e57600080fd5b50610389600480360381019061038491906137c0565b610d1d565b005b34801561039757600080fd5b506103a0610db3565b6040516103ad9190614160565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613809565b610dbc565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613562565b610e87565b005b34801561041457600080fd5b5061042f600480360381019061042a9190613678565b610e97565b60405161043c9190614160565b60405180910390f35b34801561045157600080fd5b5061045a611089565b6040516104679190614160565b60405180910390f35b61047861108f565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613562565b611184565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613809565b6111a4565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613809565b61122a565b6040516105009190614160565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b91906137c0565b61127d565b005b34801561053e57600080fd5b50610547611313565b6040516105549190613de3565b60405180910390f35b34801561056957600080fd5b50610572611326565b60405161057f9190613dfe565b60405180910390f35b34801561059457600080fd5b5061059d6113b4565b6040516105aa9190613de3565b60405180910390f35b3480156105bf57600080fd5b506105c86113cb565b6040516105d59190613dfe565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613809565b611459565b6040516106129190613d7c565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906134f5565b61146f565b60405161064f9190614160565b60405180910390f35b34801561066457600080fd5b5061066d611558565b005b61068960048036038101906106849190613809565b6115e0565b005b34801561069757600080fd5b506106b260048036038101906106ad91906137c0565b6116d6565b005b3480156106c057600080fd5b506106c961176c565b6040516106d69190613d7c565b60405180910390f35b3480156106eb57600080fd5b506106f4611796565b6040516107019190614160565b60405180910390f35b34801561071657600080fd5b5061071f61179c565b60405161072c9190613dfe565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906136b8565b61182e565b005b61077860048036038101906107739190613809565b611a10565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613638565b611b76565b005b3480156107af57600080fd5b506107b8611cf7565b6040516107c59190613dfe565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613809565b611d85565b005b34801561080357600080fd5b5061081e600480360381019061081991906135b5565b611e0b565b005b34801561082c57600080fd5b5061084760048036038101906108429190613809565b611e67565b6040516108549190613dfe565b60405180910390f35b34801561086957600080fd5b50610872611fc0565b60405161087f9190614160565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613739565b611fc6565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613522565b61205f565b6040516108e59190613de3565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906134f5565b6120f3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a4a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5a5750610a59826121eb565b5b9050919050565b610a69612255565b73ffffffffffffffffffffffffffffffffffffffff16610a8761176c565b73ffffffffffffffffffffffffffffffffffffffff1614610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490613fc0565b60405180910390fd5b80600f8190555050565b606060018054610af690614430565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290614430565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b848261225d565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614140565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0982611459565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190614040565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c99612255565b73ffffffffffffffffffffffffffffffffffffffff161480610cc85750610cc781610cc2612255565b61205f565b5b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613f00565b60405180910390fd5b610d1283838361226a565b505050565b600c5481565b610d25612255565b73ffffffffffffffffffffffffffffffffffffffff16610d4361176c565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613fc0565b60405180910390fd5b80600a9080519060200190610daf929190613223565b5050565b60008054905090565b610dc4612255565b73ffffffffffffffffffffffffffffffffffffffff16610de261176c565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613fc0565b60405180910390fd5b600d54811115610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613f20565b60405180910390fd5b80600d8190555050565b610e9283838361231c565b505050565b6000610ea28361146f565b8210610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90613e20565b60405180910390fd5b6000610eed610db3565b905060008060005b83811015611047576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fe757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110395786841415611030578195505050505050611083565b83806001019450505b508080600101915050610ef5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a906140e0565b60405180910390fd5b92915050565b600f5481565b611097612255565b73ffffffffffffffffffffffffffffffffffffffff166110b561176c565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613fc0565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161113190613d67565b60006040518083038185875af1925050503d806000811461116e576040519150601f19603f3d011682016040523d82523d6000602084013e611173565b606091505b505090508061118157600080fd5b50565b61119f83838360405180602001604052806000815250611e0b565b505050565b6111ac612255565b73ffffffffffffffffffffffffffffffffffffffff166111ca61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613fc0565b60405180910390fd5b80600c8190555050565b6000611234610db3565b8210611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90613ea0565b60405180910390fd5b819050919050565b611285612255565b73ffffffffffffffffffffffffffffffffffffffff166112a361176c565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613fc0565b60405180910390fd5b80600b908051906020019061130f929190613223565b5050565b601060009054906101000a900460ff1681565b600a805461133390614430565b80601f016020809104026020016040519081016040528092919081815260200182805461135f90614430565b80156113ac5780601f10611381576101008083540402835291602001916113ac565b820191906000526020600020905b81548152906001019060200180831161138f57829003601f168201915b505050505081565b6000600760149054906101000a900460ff16905090565b600980546113d890614430565b80601f016020809104026020016040519081016040528092919081815260200182805461140490614430565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b505050505081565b60006114648261285c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613f40565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611560612255565b73ffffffffffffffffffffffffffffffffffffffff1661157e61176c565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613fc0565b60405180910390fd5b6115de60006129f6565b565b6115e8612255565b73ffffffffffffffffffffffffffffffffffffffff1661160661176c565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613fc0565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161168290613d67565b60006040518083038185875af1925050503d80600081146116bf576040519150601f19603f3d011682016040523d82523d6000602084013e6116c4565b606091505b50509050806116d257600080fd5b5050565b6116de612255565b73ffffffffffffffffffffffffffffffffffffffff166116fc61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613fc0565b60405180910390fd5b8060099080519060200190611768929190613223565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600280546117ab90614430565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790614430565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b611836612255565b73ffffffffffffffffffffffffffffffffffffffff1661185461176c565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190613fc0565b60405180910390fd5b8181905084849050146118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613ee0565b60405180910390fd5b6000806118fd610db3565b905060005b86869050811015611945578686828181106119205761191f61459a565b5b90506020020135836119329190614265565b92508061193e90614493565b9050611902565b50600d5482826119559190614265565b1115611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613fa0565b60405180910390fd5b6000915060005b84849050811015611a03576119f28585838181106119be576119bd61459a565b5b90506020020160208101906119d391906134f5565b8888848181106119e6576119e561459a565b5b90506020020135612abc565b806119fc90614493565b905061199d565b5060009050505050505050565b60026008541415611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614100565b60405180910390fd5b60026008819055506000611a68610db3565b905060008211611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490613e40565b60405180910390fd5b600f54821115611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990614080565b60405180910390fd5b600d548282611b019190614265565b1115611b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3990613f60565b60405180910390fd5b81600c54611b5091906142ec565b341015611b5c57600080fd5b611b663383612abc565b6000905050600160088190555050565b611b7e612255565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390614000565b60405180910390fd5b8060066000611bf9612255565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ca6612255565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ceb9190613de3565b60405180910390a35050565b600b8054611d0490614430565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3090614430565b8015611d7d5780601f10611d5257610100808354040283529160200191611d7d565b820191906000526020600020905b815481529060010190602001808311611d6057829003601f168201915b505050505081565b611d8d612255565b73ffffffffffffffffffffffffffffffffffffffff16611dab61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890613fc0565b60405180910390fd5b80600e8190555050565b611e1684848461231c565b611e2284848484612ada565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614060565b60405180910390fd5b50505050565b6060611e728261225d565b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613fe0565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611f5f57600b8054611eda90614430565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0690614430565b8015611f535780601f10611f2857610100808354040283529160200191611f53565b820191906000526020600020905b815481529060010190602001808311611f3657829003601f168201915b50505050509050611fbb565b6000611f69612c71565b90506000815111611f895760405180602001604052806000815250611fb7565b80611f9384612d03565b600a604051602001611fa793929190613d36565b6040516020818303038152906040525b9150505b919050565b600d5481565b611fce612255565b73ffffffffffffffffffffffffffffffffffffffff16611fec61176c565b73ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203990613fc0565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120fb612255565b73ffffffffffffffffffffffffffffffffffffffff1661211961176c565b73ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690613fc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690613e60565b60405180910390fd5b6121e8816129f6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006123278261285c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661234e612255565b73ffffffffffffffffffffffffffffffffffffffff1614806123aa5750612373612255565b73ffffffffffffffffffffffffffffffffffffffff1661239284610b79565b73ffffffffffffffffffffffffffffffffffffffff16145b806123c657506123c582600001516123c0612255565b61205f565b5b905080612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff90614020565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190613f80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613ec0565b60405180910390fd5b6124f78585856001612e64565b612507600084846000015161226a565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ec5761274b8161225d565b156127eb5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128558585856001612e6a565b5050505050565b6128646132a9565b61286d8261225d565b6128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613e80565b60405180910390fd5b60008290505b600081106129b5576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129a65780925050506129f1565b508080600190039150506128b2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614120565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ad6828260405180602001604052806000815250612e70565b5050565b6000612afb8473ffffffffffffffffffffffffffffffffffffffff16612e82565b15612c64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b24612255565b8786866040518563ffffffff1660e01b8152600401612b469493929190613d97565b602060405180830381600087803b158015612b6057600080fd5b505af1925050508015612b9157506040513d601f19601f82011682018060405250810190612b8e9190613793565b60015b612c14573d8060008114612bc1576040519150601f19603f3d011682016040523d82523d6000602084013e612bc6565b606091505b50600081511415612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390614060565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c69565b600190505b949350505050565b606060098054612c8090614430565b80601f0160208091040260200160405190810160405280929190818152602001828054612cac90614430565b8015612cf95780601f10612cce57610100808354040283529160200191612cf9565b820191906000526020600020905b815481529060010190602001808311612cdc57829003601f168201915b5050505050905090565b60606000821415612d4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e5f565b600082905060005b60008214612d7d578080612d6690614493565b915050600a82612d7691906142bb565b9150612d53565b60008167ffffffffffffffff811115612d9957612d986145c9565b5b6040519080825280601f01601f191660200182016040528015612dcb5781602001600182028036833780820191505090505b5090505b60008514612e5857600182612de49190614346565b9150600a85612df391906144dc565b6030612dff9190614265565b60f81b818381518110612e1557612e1461459a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5191906142bb565b9450612dcf565b8093505050505b919050565b50505050565b50505050565b612e7d8383836001612ea5565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906140a0565b60405180910390fd5b6000841415612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f56906140c0565b60405180910390fd5b612f6c6000868387612e64565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561320657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156131f1576131b16000888488612ada565b6131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790614060565b60405180910390fd5b5b8180600101925050808060010191505061313a565b50806000819055505061321c6000868387612e6a565b5050505050565b82805461322f90614430565b90600052602060002090601f0160209004810192826132515760008555613298565b82601f1061326a57805160ff1916838001178555613298565b82800160010185558215613298579182015b8281111561329757825182559160200191906001019061327c565b5b5090506132a591906132e3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156132fc5760008160009055506001016132e4565b5090565b600061331361330e846141a0565b61417b565b90508281526020810184848401111561332f5761332e614607565b5b61333a8482856143ee565b509392505050565b6000613355613350846141d1565b61417b565b90508281526020810184848401111561337157613370614607565b5b61337c8482856143ee565b509392505050565b60008135905061339381614d00565b92915050565b60008083601f8401126133af576133ae6145fd565b5b8235905067ffffffffffffffff8111156133cc576133cb6145f8565b5b6020830191508360208202830111156133e8576133e7614602565b5b9250929050565b60008083601f840112613405576134046145fd565b5b8235905067ffffffffffffffff811115613422576134216145f8565b5b60208301915083602082028301111561343e5761343d614602565b5b9250929050565b60008135905061345481614d17565b92915050565b60008135905061346981614d2e565b92915050565b60008151905061347e81614d2e565b92915050565b600082601f830112613499576134986145fd565b5b81356134a9848260208601613300565b91505092915050565b600082601f8301126134c7576134c66145fd565b5b81356134d7848260208601613342565b91505092915050565b6000813590506134ef81614d45565b92915050565b60006020828403121561350b5761350a614611565b5b600061351984828501613384565b91505092915050565b6000806040838503121561353957613538614611565b5b600061354785828601613384565b925050602061355885828601613384565b9150509250929050565b60008060006060848603121561357b5761357a614611565b5b600061358986828701613384565b935050602061359a86828701613384565b92505060406135ab868287016134e0565b9150509250925092565b600080600080608085870312156135cf576135ce614611565b5b60006135dd87828801613384565b94505060206135ee87828801613384565b93505060406135ff878288016134e0565b925050606085013567ffffffffffffffff8111156136205761361f61460c565b5b61362c87828801613484565b91505092959194509250565b6000806040838503121561364f5761364e614611565b5b600061365d85828601613384565b925050602061366e85828601613445565b9150509250929050565b6000806040838503121561368f5761368e614611565b5b600061369d85828601613384565b92505060206136ae858286016134e0565b9150509250929050565b600080600080604085870312156136d2576136d1614611565b5b600085013567ffffffffffffffff8111156136f0576136ef61460c565b5b6136fc878288016133ef565b9450945050602085013567ffffffffffffffff81111561371f5761371e61460c565b5b61372b87828801613399565b925092505092959194509250565b60006020828403121561374f5761374e614611565b5b600061375d84828501613445565b91505092915050565b60006020828403121561377c5761377b614611565b5b600061378a8482850161345a565b91505092915050565b6000602082840312156137a9576137a8614611565b5b60006137b78482850161346f565b91505092915050565b6000602082840312156137d6576137d5614611565b5b600082013567ffffffffffffffff8111156137f4576137f361460c565b5b613800848285016134b2565b91505092915050565b60006020828403121561381f5761381e614611565b5b600061382d848285016134e0565b91505092915050565b61383f8161437a565b82525050565b61384e8161438c565b82525050565b600061385f82614217565b613869818561422d565b93506138798185602086016143fd565b61388281614616565b840191505092915050565b600061389882614222565b6138a28185614249565b93506138b28185602086016143fd565b6138bb81614616565b840191505092915050565b60006138d182614222565b6138db818561425a565b93506138eb8185602086016143fd565b80840191505092915050565b6000815461390481614430565b61390e818661425a565b94506001821660008114613929576001811461393a5761396d565b60ff1983168652818601935061396d565b61394385614202565b60005b8381101561396557815481890152600182019150602081019050613946565b838801955050505b50505092915050565b6000613983602283614249565b915061398e82614627565b604082019050919050565b60006139a6600b83614249565b91506139b182614676565b602082019050919050565b60006139c9602683614249565b91506139d48261469f565b604082019050919050565b60006139ec602a83614249565b91506139f7826146ee565b604082019050919050565b6000613a0f602383614249565b9150613a1a8261473d565b604082019050919050565b6000613a32602583614249565b9150613a3d8261478c565b604082019050919050565b6000613a55602183614249565b9150613a60826147db565b604082019050919050565b6000613a78603983614249565b9150613a838261482a565b604082019050919050565b6000613a9b601a83614249565b9150613aa682614879565b602082019050919050565b6000613abe602b83614249565b9150613ac9826148a2565b604082019050919050565b6000613ae1601383614249565b9150613aec826148f1565b602082019050919050565b6000613b04602683614249565b9150613b0f8261491a565b604082019050919050565b6000613b27600883614249565b9150613b3282614969565b602082019050919050565b6000613b4a602083614249565b9150613b5582614992565b602082019050919050565b6000613b6d602f83614249565b9150613b78826149bb565b604082019050919050565b6000613b90601a83614249565b9150613b9b82614a0a565b602082019050919050565b6000613bb3603283614249565b9150613bbe82614a33565b604082019050919050565b6000613bd6602283614249565b9150613be182614a82565b604082019050919050565b6000613bf960008361423e565b9150613c0482614ad1565b600082019050919050565b6000613c1c603383614249565b9150613c2782614ad4565b604082019050919050565b6000613c3f601b83614249565b9150613c4a82614b23565b602082019050919050565b6000613c62602183614249565b9150613c6d82614b4c565b604082019050919050565b6000613c85602883614249565b9150613c9082614b9b565b604082019050919050565b6000613ca8602e83614249565b9150613cb382614bea565b604082019050919050565b6000613ccb601f83614249565b9150613cd682614c39565b602082019050919050565b6000613cee602f83614249565b9150613cf982614c62565b604082019050919050565b6000613d11602d83614249565b9150613d1c82614cb1565b604082019050919050565b613d30816143e4565b82525050565b6000613d4282866138c6565b9150613d4e82856138c6565b9150613d5a82846138f7565b9150819050949350505050565b6000613d7282613bec565b9150819050919050565b6000602082019050613d916000830184613836565b92915050565b6000608082019050613dac6000830187613836565b613db96020830186613836565b613dc66040830185613d27565b8181036060830152613dd88184613854565b905095945050505050565b6000602082019050613df86000830184613845565b92915050565b60006020820190508181036000830152613e18818461388d565b905092915050565b60006020820190508181036000830152613e3981613976565b9050919050565b60006020820190508181036000830152613e5981613999565b9050919050565b60006020820190508181036000830152613e79816139bc565b9050919050565b60006020820190508181036000830152613e99816139df565b9050919050565b60006020820190508181036000830152613eb981613a02565b9050919050565b60006020820190508181036000830152613ed981613a25565b9050919050565b60006020820190508181036000830152613ef981613a48565b9050919050565b60006020820190508181036000830152613f1981613a6b565b9050919050565b60006020820190508181036000830152613f3981613a8e565b9050919050565b60006020820190508181036000830152613f5981613ab1565b9050919050565b60006020820190508181036000830152613f7981613ad4565b9050919050565b60006020820190508181036000830152613f9981613af7565b9050919050565b60006020820190508181036000830152613fb981613b1a565b9050919050565b60006020820190508181036000830152613fd981613b3d565b9050919050565b60006020820190508181036000830152613ff981613b60565b9050919050565b6000602082019050818103600083015261401981613b83565b9050919050565b6000602082019050818103600083015261403981613ba6565b9050919050565b6000602082019050818103600083015261405981613bc9565b9050919050565b6000602082019050818103600083015261407981613c0f565b9050919050565b6000602082019050818103600083015261409981613c32565b9050919050565b600060208201905081810360008301526140b981613c55565b9050919050565b600060208201905081810360008301526140d981613c78565b9050919050565b600060208201905081810360008301526140f981613c9b565b9050919050565b6000602082019050818103600083015261411981613cbe565b9050919050565b6000602082019050818103600083015261413981613ce1565b9050919050565b6000602082019050818103600083015261415981613d04565b9050919050565b60006020820190506141756000830184613d27565b92915050565b6000614185614196565b90506141918282614462565b919050565b6000604051905090565b600067ffffffffffffffff8211156141bb576141ba6145c9565b5b6141c482614616565b9050602081019050919050565b600067ffffffffffffffff8211156141ec576141eb6145c9565b5b6141f582614616565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614270826143e4565b915061427b836143e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142b0576142af61450d565b5b828201905092915050565b60006142c6826143e4565b91506142d1836143e4565b9250826142e1576142e061453c565b5b828204905092915050565b60006142f7826143e4565b9150614302836143e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433b5761433a61450d565b5b828202905092915050565b6000614351826143e4565b915061435c836143e4565b92508282101561436f5761436e61450d565b5b828203905092915050565b6000614385826143c4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561441b578082015181840152602081019050614400565b8381111561442a576000848401525b50505050565b6000600282049050600182168061444857607f821691505b6020821081141561445c5761445b61456b565b5b50919050565b61446b82614616565b810181811067ffffffffffffffff8211171561448a576144896145c9565b5b80604052505050565b600061449e826143e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d1576144d061450d565b5b600182019050919050565b60006144e7826143e4565b91506144f2836143e4565b9250826145025761450161453c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468656e206d61786d696e740000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614d098161437a565b8114614d1457600080fd5b50565b614d208161438c565b8114614d2b57600080fd5b50565b614d3781614398565b8114614d4257600080fd5b50565b614d4e816143e4565b8114614d5957600080fd5b5056fea2646970667358221220fe29cdbae15d1f97b0a185bdbe80eb9e17d420c1fa0d587f681e4e1d5e03390564736f6c6343000807003368747470733a2f2f6d656d6f72696573696e65746865722e636f6d2f756e72657665616c65642e6a736f6e

Deployed Bytecode

0x60806040526004361061023b5760003560e01c806362b99ad41161012e578063a0712d68116100ab578063c87b56dd1161006f578063c87b56dd14610820578063d5abeb011461085d578063e0a8085314610888578063e985e9c5146108b1578063f2fde38b146108ee5761023b565b8063a0712d681461075e578063a22cb4651461077a578063a45ba8e7146107a3578063b071401b146107ce578063b88d4fde146107f75761023b565b80637ec4a659116100f25780637ec4a6591461068b5780638da5cb5b146106b457806394354fd0146106df57806395d89b411461070a57806396ea3a47146107355761023b565b806362b99ad4146105b35780636352211e146105de57806370a082311461061b578063715018a61461065857806377ad99f01461066f5761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104cc5780634fdd43cb1461050957806351830227146105325780635503a0e81461055d5780635c975abb146105885761023b565b80632f745c591461040857806334c8fd75146104455780633ccfd60b1461047057806342842e0e1461047a57806344a0d68a146104a35761023b565b806313faede61161020357806313faede61461033757806316ba10e01461036257806318160ddd1461038b578063228025e8146103b657806323b872dd146103df5761023b565b806301ffc9a714610240578063022d67dd1461027d57806306fdde03146102a6578063081812fc146102d1578063095ea7b31461030e575b600080fd5b34801561024c57600080fd5b5061026760048036038101906102629190613766565b610917565b6040516102749190613de3565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190613809565b610a61565b005b3480156102b257600080fd5b506102bb610ae7565b6040516102c89190613dfe565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f39190613809565b610b79565b6040516103059190613d7c565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613678565b610bfe565b005b34801561034357600080fd5b5061034c610d17565b6040516103599190614160565b60405180910390f35b34801561036e57600080fd5b50610389600480360381019061038491906137c0565b610d1d565b005b34801561039757600080fd5b506103a0610db3565b6040516103ad9190614160565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d89190613809565b610dbc565b005b3480156103eb57600080fd5b5061040660048036038101906104019190613562565b610e87565b005b34801561041457600080fd5b5061042f600480360381019061042a9190613678565b610e97565b60405161043c9190614160565b60405180910390f35b34801561045157600080fd5b5061045a611089565b6040516104679190614160565b60405180910390f35b61047861108f565b005b34801561048657600080fd5b506104a1600480360381019061049c9190613562565b611184565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613809565b6111a4565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613809565b61122a565b6040516105009190614160565b60405180910390f35b34801561051557600080fd5b50610530600480360381019061052b91906137c0565b61127d565b005b34801561053e57600080fd5b50610547611313565b6040516105549190613de3565b60405180910390f35b34801561056957600080fd5b50610572611326565b60405161057f9190613dfe565b60405180910390f35b34801561059457600080fd5b5061059d6113b4565b6040516105aa9190613de3565b60405180910390f35b3480156105bf57600080fd5b506105c86113cb565b6040516105d59190613dfe565b60405180910390f35b3480156105ea57600080fd5b5061060560048036038101906106009190613809565b611459565b6040516106129190613d7c565b60405180910390f35b34801561062757600080fd5b50610642600480360381019061063d91906134f5565b61146f565b60405161064f9190614160565b60405180910390f35b34801561066457600080fd5b5061066d611558565b005b61068960048036038101906106849190613809565b6115e0565b005b34801561069757600080fd5b506106b260048036038101906106ad91906137c0565b6116d6565b005b3480156106c057600080fd5b506106c961176c565b6040516106d69190613d7c565b60405180910390f35b3480156106eb57600080fd5b506106f4611796565b6040516107019190614160565b60405180910390f35b34801561071657600080fd5b5061071f61179c565b60405161072c9190613dfe565b60405180910390f35b34801561074157600080fd5b5061075c600480360381019061075791906136b8565b61182e565b005b61077860048036038101906107739190613809565b611a10565b005b34801561078657600080fd5b506107a1600480360381019061079c9190613638565b611b76565b005b3480156107af57600080fd5b506107b8611cf7565b6040516107c59190613dfe565b60405180910390f35b3480156107da57600080fd5b506107f560048036038101906107f09190613809565b611d85565b005b34801561080357600080fd5b5061081e600480360381019061081991906135b5565b611e0b565b005b34801561082c57600080fd5b5061084760048036038101906108429190613809565b611e67565b6040516108549190613dfe565b60405180910390f35b34801561086957600080fd5b50610872611fc0565b60405161087f9190614160565b60405180910390f35b34801561089457600080fd5b506108af60048036038101906108aa9190613739565b611fc6565b005b3480156108bd57600080fd5b506108d860048036038101906108d39190613522565b61205f565b6040516108e59190613de3565b60405180910390f35b3480156108fa57600080fd5b50610915600480360381019061091091906134f5565b6120f3565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a4a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a5a5750610a59826121eb565b5b9050919050565b610a69612255565b73ffffffffffffffffffffffffffffffffffffffff16610a8761176c565b73ffffffffffffffffffffffffffffffffffffffff1614610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490613fc0565b60405180910390fd5b80600f8190555050565b606060018054610af690614430565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290614430565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b848261225d565b610bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bba90614140565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c0982611459565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7190614040565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c99612255565b73ffffffffffffffffffffffffffffffffffffffff161480610cc85750610cc781610cc2612255565b61205f565b5b610d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfe90613f00565b60405180910390fd5b610d1283838361226a565b505050565b600c5481565b610d25612255565b73ffffffffffffffffffffffffffffffffffffffff16610d4361176c565b73ffffffffffffffffffffffffffffffffffffffff1614610d99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9090613fc0565b60405180910390fd5b80600a9080519060200190610daf929190613223565b5050565b60008054905090565b610dc4612255565b73ffffffffffffffffffffffffffffffffffffffff16610de261176c565b73ffffffffffffffffffffffffffffffffffffffff1614610e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2f90613fc0565b60405180910390fd5b600d54811115610e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7490613f20565b60405180910390fd5b80600d8190555050565b610e9283838361231c565b505050565b6000610ea28361146f565b8210610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda90613e20565b60405180910390fd5b6000610eed610db3565b905060008060005b83811015611047576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610fe757806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110395786841415611030578195505050505050611083565b83806001019450505b508080600101915050610ef5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107a906140e0565b60405180910390fd5b92915050565b600f5481565b611097612255565b73ffffffffffffffffffffffffffffffffffffffff166110b561176c565b73ffffffffffffffffffffffffffffffffffffffff161461110b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110290613fc0565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161113190613d67565b60006040518083038185875af1925050503d806000811461116e576040519150601f19603f3d011682016040523d82523d6000602084013e611173565b606091505b505090508061118157600080fd5b50565b61119f83838360405180602001604052806000815250611e0b565b505050565b6111ac612255565b73ffffffffffffffffffffffffffffffffffffffff166111ca61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613fc0565b60405180910390fd5b80600c8190555050565b6000611234610db3565b8210611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90613ea0565b60405180910390fd5b819050919050565b611285612255565b73ffffffffffffffffffffffffffffffffffffffff166112a361176c565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f090613fc0565b60405180910390fd5b80600b908051906020019061130f929190613223565b5050565b601060009054906101000a900460ff1681565b600a805461133390614430565b80601f016020809104026020016040519081016040528092919081815260200182805461135f90614430565b80156113ac5780601f10611381576101008083540402835291602001916113ac565b820191906000526020600020905b81548152906001019060200180831161138f57829003601f168201915b505050505081565b6000600760149054906101000a900460ff16905090565b600980546113d890614430565b80601f016020809104026020016040519081016040528092919081815260200182805461140490614430565b80156114515780601f1061142657610100808354040283529160200191611451565b820191906000526020600020905b81548152906001019060200180831161143457829003601f168201915b505050505081565b60006114648261285c565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613f40565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611560612255565b73ffffffffffffffffffffffffffffffffffffffff1661157e61176c565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613fc0565b60405180910390fd5b6115de60006129f6565b565b6115e8612255565b73ffffffffffffffffffffffffffffffffffffffff1661160661176c565b73ffffffffffffffffffffffffffffffffffffffff161461165c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165390613fc0565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff168260405161168290613d67565b60006040518083038185875af1925050503d80600081146116bf576040519150601f19603f3d011682016040523d82523d6000602084013e6116c4565b606091505b50509050806116d257600080fd5b5050565b6116de612255565b73ffffffffffffffffffffffffffffffffffffffff166116fc61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611752576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174990613fc0565b60405180910390fd5b8060099080519060200190611768929190613223565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e5481565b6060600280546117ab90614430565b80601f01602080910402602001604051908101604052809291908181526020018280546117d790614430565b80156118245780601f106117f957610100808354040283529160200191611824565b820191906000526020600020905b81548152906001019060200180831161180757829003601f168201915b5050505050905090565b611836612255565b73ffffffffffffffffffffffffffffffffffffffff1661185461176c565b73ffffffffffffffffffffffffffffffffffffffff16146118aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a190613fc0565b60405180910390fd5b8181905084849050146118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990613ee0565b60405180910390fd5b6000806118fd610db3565b905060005b86869050811015611945578686828181106119205761191f61459a565b5b90506020020135836119329190614265565b92508061193e90614493565b9050611902565b50600d5482826119559190614265565b1115611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90613fa0565b60405180910390fd5b6000915060005b84849050811015611a03576119f28585838181106119be576119bd61459a565b5b90506020020160208101906119d391906134f5565b8888848181106119e6576119e561459a565b5b90506020020135612abc565b806119fc90614493565b905061199d565b5060009050505050505050565b60026008541415611a56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4d90614100565b60405180910390fd5b60026008819055506000611a68610db3565b905060008211611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490613e40565b60405180910390fd5b600f54821115611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990614080565b60405180910390fd5b600d548282611b019190614265565b1115611b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3990613f60565b60405180910390fd5b81600c54611b5091906142ec565b341015611b5c57600080fd5b611b663383612abc565b6000905050600160088190555050565b611b7e612255565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be390614000565b60405180910390fd5b8060066000611bf9612255565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611ca6612255565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ceb9190613de3565b60405180910390a35050565b600b8054611d0490614430565b80601f0160208091040260200160405190810160405280929190818152602001828054611d3090614430565b8015611d7d5780601f10611d5257610100808354040283529160200191611d7d565b820191906000526020600020905b815481529060010190602001808311611d6057829003601f168201915b505050505081565b611d8d612255565b73ffffffffffffffffffffffffffffffffffffffff16611dab61176c565b73ffffffffffffffffffffffffffffffffffffffff1614611e01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df890613fc0565b60405180910390fd5b80600e8190555050565b611e1684848461231c565b611e2284848484612ada565b611e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5890614060565b60405180910390fd5b50505050565b6060611e728261225d565b611eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea890613fe0565b60405180910390fd5b60001515601060009054906101000a900460ff1615151415611f5f57600b8054611eda90614430565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0690614430565b8015611f535780601f10611f2857610100808354040283529160200191611f53565b820191906000526020600020905b815481529060010190602001808311611f3657829003601f168201915b50505050509050611fbb565b6000611f69612c71565b90506000815111611f895760405180602001604052806000815250611fb7565b80611f9384612d03565b600a604051602001611fa793929190613d36565b6040516020818303038152906040525b9150505b919050565b600d5481565b611fce612255565b73ffffffffffffffffffffffffffffffffffffffff16611fec61176c565b73ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203990613fc0565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120fb612255565b73ffffffffffffffffffffffffffffffffffffffff1661211961176c565b73ffffffffffffffffffffffffffffffffffffffff161461216f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216690613fc0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d690613e60565b60405180910390fd5b6121e8816129f6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006123278261285c565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661234e612255565b73ffffffffffffffffffffffffffffffffffffffff1614806123aa5750612373612255565b73ffffffffffffffffffffffffffffffffffffffff1661239284610b79565b73ffffffffffffffffffffffffffffffffffffffff16145b806123c657506123c582600001516123c0612255565b61205f565b5b905080612408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123ff90614020565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461247a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247190613f80565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156124ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e190613ec0565b60405180910390fd5b6124f78585856001612e64565b612507600084846000015161226a565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156127ec5761274b8161225d565b156127eb5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46128558585856001612e6a565b5050505050565b6128646132a9565b61286d8261225d565b6128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390613e80565b60405180910390fd5b60008290505b600081106129b5576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129a65780925050506129f1565b508080600190039150506128b2565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e890614120565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ad6828260405180602001604052806000815250612e70565b5050565b6000612afb8473ffffffffffffffffffffffffffffffffffffffff16612e82565b15612c64578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b24612255565b8786866040518563ffffffff1660e01b8152600401612b469493929190613d97565b602060405180830381600087803b158015612b6057600080fd5b505af1925050508015612b9157506040513d601f19601f82011682018060405250810190612b8e9190613793565b60015b612c14573d8060008114612bc1576040519150601f19603f3d011682016040523d82523d6000602084013e612bc6565b606091505b50600081511415612c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0390614060565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c69565b600190505b949350505050565b606060098054612c8090614430565b80601f0160208091040260200160405190810160405280929190818152602001828054612cac90614430565b8015612cf95780601f10612cce57610100808354040283529160200191612cf9565b820191906000526020600020905b815481529060010190602001808311612cdc57829003601f168201915b5050505050905090565b60606000821415612d4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e5f565b600082905060005b60008214612d7d578080612d6690614493565b915050600a82612d7691906142bb565b9150612d53565b60008167ffffffffffffffff811115612d9957612d986145c9565b5b6040519080825280601f01601f191660200182016040528015612dcb5781602001600182028036833780820191505090505b5090505b60008514612e5857600182612de49190614346565b9150600a85612df391906144dc565b6030612dff9190614265565b60f81b818381518110612e1557612e1461459a565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e5191906142bb565b9450612dcf565b8093505050505b919050565b50505050565b50505050565b612e7d8383836001612ea5565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612f1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f12906140a0565b60405180910390fd5b6000841415612f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f56906140c0565b60405180910390fd5b612f6c6000868387612e64565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561320657818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a483156131f1576131b16000888488612ada565b6131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e790614060565b60405180910390fd5b5b8180600101925050808060010191505061313a565b50806000819055505061321c6000868387612e6a565b5050505050565b82805461322f90614430565b90600052602060002090601f0160209004810192826132515760008555613298565b82601f1061326a57805160ff1916838001178555613298565b82800160010185558215613298579182015b8281111561329757825182559160200191906001019061327c565b5b5090506132a591906132e3565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b808211156132fc5760008160009055506001016132e4565b5090565b600061331361330e846141a0565b61417b565b90508281526020810184848401111561332f5761332e614607565b5b61333a8482856143ee565b509392505050565b6000613355613350846141d1565b61417b565b90508281526020810184848401111561337157613370614607565b5b61337c8482856143ee565b509392505050565b60008135905061339381614d00565b92915050565b60008083601f8401126133af576133ae6145fd565b5b8235905067ffffffffffffffff8111156133cc576133cb6145f8565b5b6020830191508360208202830111156133e8576133e7614602565b5b9250929050565b60008083601f840112613405576134046145fd565b5b8235905067ffffffffffffffff811115613422576134216145f8565b5b60208301915083602082028301111561343e5761343d614602565b5b9250929050565b60008135905061345481614d17565b92915050565b60008135905061346981614d2e565b92915050565b60008151905061347e81614d2e565b92915050565b600082601f830112613499576134986145fd565b5b81356134a9848260208601613300565b91505092915050565b600082601f8301126134c7576134c66145fd565b5b81356134d7848260208601613342565b91505092915050565b6000813590506134ef81614d45565b92915050565b60006020828403121561350b5761350a614611565b5b600061351984828501613384565b91505092915050565b6000806040838503121561353957613538614611565b5b600061354785828601613384565b925050602061355885828601613384565b9150509250929050565b60008060006060848603121561357b5761357a614611565b5b600061358986828701613384565b935050602061359a86828701613384565b92505060406135ab868287016134e0565b9150509250925092565b600080600080608085870312156135cf576135ce614611565b5b60006135dd87828801613384565b94505060206135ee87828801613384565b93505060406135ff878288016134e0565b925050606085013567ffffffffffffffff8111156136205761361f61460c565b5b61362c87828801613484565b91505092959194509250565b6000806040838503121561364f5761364e614611565b5b600061365d85828601613384565b925050602061366e85828601613445565b9150509250929050565b6000806040838503121561368f5761368e614611565b5b600061369d85828601613384565b92505060206136ae858286016134e0565b9150509250929050565b600080600080604085870312156136d2576136d1614611565b5b600085013567ffffffffffffffff8111156136f0576136ef61460c565b5b6136fc878288016133ef565b9450945050602085013567ffffffffffffffff81111561371f5761371e61460c565b5b61372b87828801613399565b925092505092959194509250565b60006020828403121561374f5761374e614611565b5b600061375d84828501613445565b91505092915050565b60006020828403121561377c5761377b614611565b5b600061378a8482850161345a565b91505092915050565b6000602082840312156137a9576137a8614611565b5b60006137b78482850161346f565b91505092915050565b6000602082840312156137d6576137d5614611565b5b600082013567ffffffffffffffff8111156137f4576137f361460c565b5b613800848285016134b2565b91505092915050565b60006020828403121561381f5761381e614611565b5b600061382d848285016134e0565b91505092915050565b61383f8161437a565b82525050565b61384e8161438c565b82525050565b600061385f82614217565b613869818561422d565b93506138798185602086016143fd565b61388281614616565b840191505092915050565b600061389882614222565b6138a28185614249565b93506138b28185602086016143fd565b6138bb81614616565b840191505092915050565b60006138d182614222565b6138db818561425a565b93506138eb8185602086016143fd565b80840191505092915050565b6000815461390481614430565b61390e818661425a565b94506001821660008114613929576001811461393a5761396d565b60ff1983168652818601935061396d565b61394385614202565b60005b8381101561396557815481890152600182019150602081019050613946565b838801955050505b50505092915050565b6000613983602283614249565b915061398e82614627565b604082019050919050565b60006139a6600b83614249565b91506139b182614676565b602082019050919050565b60006139c9602683614249565b91506139d48261469f565b604082019050919050565b60006139ec602a83614249565b91506139f7826146ee565b604082019050919050565b6000613a0f602383614249565b9150613a1a8261473d565b604082019050919050565b6000613a32602583614249565b9150613a3d8261478c565b604082019050919050565b6000613a55602183614249565b9150613a60826147db565b604082019050919050565b6000613a78603983614249565b9150613a838261482a565b604082019050919050565b6000613a9b601a83614249565b9150613aa682614879565b602082019050919050565b6000613abe602b83614249565b9150613ac9826148a2565b604082019050919050565b6000613ae1601383614249565b9150613aec826148f1565b602082019050919050565b6000613b04602683614249565b9150613b0f8261491a565b604082019050919050565b6000613b27600883614249565b9150613b3282614969565b602082019050919050565b6000613b4a602083614249565b9150613b5582614992565b602082019050919050565b6000613b6d602f83614249565b9150613b78826149bb565b604082019050919050565b6000613b90601a83614249565b9150613b9b82614a0a565b602082019050919050565b6000613bb3603283614249565b9150613bbe82614a33565b604082019050919050565b6000613bd6602283614249565b9150613be182614a82565b604082019050919050565b6000613bf960008361423e565b9150613c0482614ad1565b600082019050919050565b6000613c1c603383614249565b9150613c2782614ad4565b604082019050919050565b6000613c3f601b83614249565b9150613c4a82614b23565b602082019050919050565b6000613c62602183614249565b9150613c6d82614b4c565b604082019050919050565b6000613c85602883614249565b9150613c9082614b9b565b604082019050919050565b6000613ca8602e83614249565b9150613cb382614bea565b604082019050919050565b6000613ccb601f83614249565b9150613cd682614c39565b602082019050919050565b6000613cee602f83614249565b9150613cf982614c62565b604082019050919050565b6000613d11602d83614249565b9150613d1c82614cb1565b604082019050919050565b613d30816143e4565b82525050565b6000613d4282866138c6565b9150613d4e82856138c6565b9150613d5a82846138f7565b9150819050949350505050565b6000613d7282613bec565b9150819050919050565b6000602082019050613d916000830184613836565b92915050565b6000608082019050613dac6000830187613836565b613db96020830186613836565b613dc66040830185613d27565b8181036060830152613dd88184613854565b905095945050505050565b6000602082019050613df86000830184613845565b92915050565b60006020820190508181036000830152613e18818461388d565b905092915050565b60006020820190508181036000830152613e3981613976565b9050919050565b60006020820190508181036000830152613e5981613999565b9050919050565b60006020820190508181036000830152613e79816139bc565b9050919050565b60006020820190508181036000830152613e99816139df565b9050919050565b60006020820190508181036000830152613eb981613a02565b9050919050565b60006020820190508181036000830152613ed981613a25565b9050919050565b60006020820190508181036000830152613ef981613a48565b9050919050565b60006020820190508181036000830152613f1981613a6b565b9050919050565b60006020820190508181036000830152613f3981613a8e565b9050919050565b60006020820190508181036000830152613f5981613ab1565b9050919050565b60006020820190508181036000830152613f7981613ad4565b9050919050565b60006020820190508181036000830152613f9981613af7565b9050919050565b60006020820190508181036000830152613fb981613b1a565b9050919050565b60006020820190508181036000830152613fd981613b3d565b9050919050565b60006020820190508181036000830152613ff981613b60565b9050919050565b6000602082019050818103600083015261401981613b83565b9050919050565b6000602082019050818103600083015261403981613ba6565b9050919050565b6000602082019050818103600083015261405981613bc9565b9050919050565b6000602082019050818103600083015261407981613c0f565b9050919050565b6000602082019050818103600083015261409981613c32565b9050919050565b600060208201905081810360008301526140b981613c55565b9050919050565b600060208201905081810360008301526140d981613c78565b9050919050565b600060208201905081810360008301526140f981613c9b565b9050919050565b6000602082019050818103600083015261411981613cbe565b9050919050565b6000602082019050818103600083015261413981613ce1565b9050919050565b6000602082019050818103600083015261415981613d04565b9050919050565b60006020820190506141756000830184613d27565b92915050565b6000614185614196565b90506141918282614462565b919050565b6000604051905090565b600067ffffffffffffffff8211156141bb576141ba6145c9565b5b6141c482614616565b9050602081019050919050565b600067ffffffffffffffff8211156141ec576141eb6145c9565b5b6141f582614616565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614270826143e4565b915061427b836143e4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156142b0576142af61450d565b5b828201905092915050565b60006142c6826143e4565b91506142d1836143e4565b9250826142e1576142e061453c565b5b828204905092915050565b60006142f7826143e4565b9150614302836143e4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561433b5761433a61450d565b5b828202905092915050565b6000614351826143e4565b915061435c836143e4565b92508282101561436f5761436e61450d565b5b828203905092915050565b6000614385826143c4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561441b578082015181840152602081019050614400565b8381111561442a576000848401525b50505050565b6000600282049050600182168061444857607f821691505b6020821081141561445c5761445b61456b565b5b50919050565b61446b82614616565b810181811067ffffffffffffffff8211171561448a576144896145c9565b5b80604052505050565b600061449e826143e4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d1576144d061450d565b5b600182019050919050565b60006144e7826143e4565b91506144f2836143e4565b9250826145025761450161453c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f50726f76696465207175616e74697469657320616e6420726563697069656e7460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f546f6f206d616e79000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f43616e74206d696e74206d6f7265207468656e206d61786d696e740000000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614d098161437a565b8114614d1457600080fd5b50565b614d208161438c565b8114614d2b57600080fd5b50565b614d3781614398565b8114614d4257600080fd5b50565b614d4e816143e4565b8114614d5957600080fd5b5056fea2646970667358221220fe29cdbae15d1f97b0a185bdbe80eb9e17d420c1fa0d587f681e4e1d5e03390564736f6c63430008070033

Deployed Bytecode Sourcemap

45181:3714:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24871:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48275:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26757:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28319:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27840:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45411:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48023:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23128:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47579:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29195:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23792:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45529:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48405:192;;;:::i;:::-;;29428:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47485:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23305:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47769:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45580:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45327:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39032:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45292:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26566:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25307:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41849:94;;;;;;;;;;;;;:::i;:::-;;48605:172;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47912:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41198:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45485:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26926:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46201:667;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45760:433;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28605:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48134:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29676:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46876:509;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45447:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47393:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28964:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42098:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24871:372;24973:4;25025:25;25010:40;;;:11;:40;;;;:105;;;;25082:33;25067:48;;;:11;:48;;;;25010:105;:172;;;;25147:35;25132:50;;;:11;:50;;;;25010:172;:225;;;;25199:36;25223:11;25199:23;:36::i;:::-;25010:225;24990:245;;24871:372;;;:::o;48275:122::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48382:7:::1;48356:23;:33;;;;48275:122:::0;:::o;26757:100::-;26811:13;26844:5;26837:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26757:100;:::o;28319:214::-;28387:7;28415:16;28423:7;28415;:16::i;:::-;28407:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28501:15;:24;28517:7;28501:24;;;;;;;;;;;;;;;;;;;;;28494:31;;28319:214;;;:::o;27840:413::-;27913:13;27929:24;27945:7;27929:15;:24::i;:::-;27913:40;;27978:5;27972:11;;:2;:11;;;;27964:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28073:5;28057:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28082:37;28099:5;28106:12;:10;:12::i;:::-;28082:16;:37::i;:::-;28057:62;28035:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28217:28;28226:2;28230:7;28239:5;28217:8;:28::i;:::-;27902:351;27840:413;;:::o;45411:29::-;;;;:::o;48023:103::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48108:10:::1;48096:9;:22;;;;;;;;;;;;:::i;:::-;;48023:103:::0;:::o;23128:100::-;23181:7;23208:12;;23201:19;;23128:100;:::o;47579:182::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47677:9:::1;;47660:13;:26;;47652:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47740:13;47728:9;:25;;;;47579:182:::0;:::o;29195:162::-;29321:28;29331:4;29337:2;29341:7;29321:9;:28::i;:::-;29195:162;;;:::o;23792:1007::-;23881:7;23917:16;23927:5;23917:9;:16::i;:::-;23909:5;:24;23901:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23983:22;24008:13;:11;:13::i;:::-;23983:38;;24032:19;24062:25;24251:9;24246:466;24266:14;24262:1;:18;24246:466;;;24306:31;24340:11;:14;24352:1;24340:14;;;;;;;;;;;24306:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24403:1;24377:28;;:9;:14;;;:28;;;24373:111;;24450:9;:14;;;24430:34;;24373:111;24527:5;24506:26;;:17;:26;;;24502:195;;;24576:5;24561:11;:20;24557:85;;;24617:1;24610:8;;;;;;;;;24557:85;24664:13;;;;;;;24502:195;24287:425;24282:3;;;;;;;24246:466;;;;24735:56;;;;;;;;;;:::i;:::-;;;;;;;;23792:1007;;;;;:::o;45529:42::-;;;;:::o;48405:192::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48462:12:::1;48488:10;48480:24;;48526:21;48480:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48461:101;;;48581:7;48573:16;;;::::0;::::1;;48450:147;48405:192::o:0;29428:177::-;29558:39;29575:4;29581:2;29585:7;29558:39;;;;;;;;;;;;:16;:39::i;:::-;29428:177;;;:::o;47485:86::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47555:8:::1;47548:4;:15;;;;47485:86:::0;:::o;23305:187::-;23372:7;23408:13;:11;:13::i;:::-;23400:5;:21;23392:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23479:5;23472:12;;23305:187;;;:::o;47769:135::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47878:18:::1;47858:17;:38;;;;;;;;;;;;:::i;:::-;;47769:135:::0;:::o;45580:28::-;;;;;;;;;;;;;:::o;45327:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39032:86::-;39079:4;39103:7;;;;;;;;;;;39096:14;;39032:86;:::o;45292:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26566:124::-;26630:7;26657:20;26669:7;26657:11;:20::i;:::-;:25;;;26650:32;;26566:124;;;:::o;25307:221::-;25371:7;25416:1;25399:19;;:5;:19;;;;25391:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25492:12;:19;25505:5;25492:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25484:36;;25477:43;;25307:221;;;:::o;41849:94::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41914:21:::1;41932:1;41914:9;:21::i;:::-;41849:94::o:0;48605:172::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48680:12:::1;48706:10;48698:24;;48730:7;48698:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48679:63;;;48761:7;48753:16;;;::::0;::::1;;48668:109;48605:172:::0;:::o;47912:103::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47997:10:::1;47985:9;:22;;;;;;;;;;;;:::i;:::-;;47912:103:::0;:::o;41198:87::-;41244:7;41271:6;;;;;;;;;;;41264:13;;41198:87;:::o;45485:37::-;;;;:::o;26926:104::-;26982:13;27015:7;27008:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26926:104;:::o;46201:667::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46368:9:::1;;:16;;46349:8;;:15;;:35;46327:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;46456:21;46492:9:::0;46504:13:::1;:11;:13::i;:::-;46492:25;;46533:9;46528:101;46552:8;;:15;;46548:1;:19;46528:101;;;46606:8;;46615:1;46606:11;;;;;;;:::i;:::-;;;;;;;;46589:28;;;;;:::i;:::-;;;46569:3;;;;:::i;:::-;;;46528:101;;;;46668:9;;46651:13;46647:1;:17;;;;:::i;:::-;:30;;46639:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;46701:20;;;46737:9;46732:110;46756:9;;:16;;46752:1;:20;46732:110;;;46794:36;46804:9;;46814:1;46804:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;46818:8;;46827:1;46818:11;;;;;;;:::i;:::-;;;;;;;;46794:9;:36::i;:::-;46774:3;;;;:::i;:::-;;;46732:110;;;;46852:8;;;46316:552;;46201:667:::0;;;;:::o;45760:433::-;44193:1;44789:7;;:19;;44781:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44193:1;44922:7;:18;;;;45834:9:::1;45846:13;:11;:13::i;:::-;45834:25;;45892:1;45878:11;:15;45870:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;45943:23;;45928:11;:38;;45920:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;46037:9;;46022:11;46018:1;:15;;;;:::i;:::-;:28;;46010:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46109:11;46102:4;;:18;;;;:::i;:::-;46089:9;:31;;46081:40;;;::::0;::::1;;46132:34;46142:10;46154:11;46132:9;:34::i;:::-;46177:8;;;45823:370;44149:1:::0;45101:7;:22;;;;45760:433;:::o;28605:288::-;28712:12;:10;:12::i;:::-;28700:24;;:8;:24;;;;28692:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28813:8;28768:18;:32;28787:12;:10;:12::i;:::-;28768:32;;;;;;;;;;;;;;;:42;28801:8;28768:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28866:8;28837:48;;28852:12;:10;:12::i;:::-;28837:48;;;28876:8;28837:48;;;;;;:::i;:::-;;;;;;;;28605:288;;:::o;45367:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48134:133::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48240:19:::1;48219:18;:40;;;;48134:133:::0;:::o;29676:355::-;29835:28;29845:4;29851:2;29855:7;29835:9;:28::i;:::-;29896:48;29919:4;29925:2;29929:7;29938:5;29896:22;:48::i;:::-;29874:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29676:355;;;;:::o;46876:509::-;46985:13;47029:17;47037:8;47029:7;:17::i;:::-;47013:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;47136:5;47124:17;;:8;;;;;;;;;;;:17;;;47120:64;;;47159:17;47152:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47120:64;47192:28;47223:10;:8;:10::i;:::-;47192:41;;47278:1;47253:14;47247:28;:32;:130;;;;;;;;;;;;;;;;;47315:14;47331:19;:8;:17;:19::i;:::-;47352:9;47298:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47247:130;47240:137;;;46876:509;;;;:::o;45447:31::-;;;;:::o;47393:84::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47463:6:::1;47452:8;;:17;;;;;;;;;;;;;;;;;;47393:84:::0;:::o;28964:164::-;29061:4;29085:18;:25;29104:5;29085:25;;;;;;;;;;;;;;;:35;29111:8;29085:35;;;;;;;;;;;;;;;;;;;;;;;;;29078:42;;28964:164;;;;:::o;42098:229::-;41429:12;:10;:12::i;:::-;41418:23;;:7;:5;:7::i;:::-;:23;;;41410:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42221:1:::1;42201:22;;:8;:22;;;;42179:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;42300:19;42310:8;42300:9;:19::i;:::-;42098:229:::0;:::o;14391:157::-;14476:4;14515:25;14500:40;;;:11;:40;;;;14493:47;;14391:157;;;:::o;2838:98::-;2891:7;2918:10;2911:17;;2838:98;:::o;30286:111::-;30343:4;30377:12;;30367:7;:22;30360:29;;30286:111;;;:::o;35206:196::-;35348:2;35321:15;:24;35337:7;35321:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35386:7;35382:2;35366:28;;35375:5;35366:28;;;;;;;;;;;;35206:196;;;:::o;33086:2002::-;33201:35;33239:20;33251:7;33239:11;:20::i;:::-;33201:58;;33272:22;33314:13;:18;;;33298:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33373:12;:10;:12::i;:::-;33349:36;;:20;33361:7;33349:11;:20::i;:::-;:36;;;33298:87;:154;;;;33402:50;33419:13;:18;;;33439:12;:10;:12::i;:::-;33402:16;:50::i;:::-;33298:154;33272:181;;33474:17;33466:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33589:4;33567:26;;:13;:18;;;:26;;;33559:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33669:1;33655:16;;:2;:16;;;;33647:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33726:43;33748:4;33754:2;33758:7;33767:1;33726:21;:43::i;:::-;33834:49;33851:1;33855:7;33864:13;:18;;;33834:8;:49::i;:::-;34209:1;34179:12;:18;34192:4;34179:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34253:1;34225:12;:16;34238:2;34225:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34299:2;34271:11;:20;34283:7;34271:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34361:15;34316:11;:20;34328:7;34316:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34629:19;34661:1;34651:7;:11;34629:33;;34722:1;34681:43;;:11;:24;34693:11;34681:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34677:295;;;34749:20;34757:11;34749:7;:20::i;:::-;34745:212;;;34826:13;:18;;;34794:11;:24;34806:11;34794:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34909:13;:28;;;34867:11;:24;34879:11;34867:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34745:212;34677:295;34154:829;35019:7;35015:2;35000:27;;35009:4;35000:27;;;;;;;;;;;;35038:42;35059:4;35065:2;35069:7;35078:1;35038:20;:42::i;:::-;33190:1898;;33086:2002;;;:::o;25967:537::-;26028:21;;:::i;:::-;26070:16;26078:7;26070;:16::i;:::-;26062:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26176:12;26191:7;26176:22;;26171:245;26208:1;26200:4;:9;26171:245;;26238:31;26272:11;:17;26284:4;26272:17;;;;;;;;;;;26238:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26338:1;26312:28;;:9;:14;;;:28;;;26308:93;;26372:9;26365:16;;;;;;26308:93;26219:197;26211:6;;;;;;;;26171:245;;;;26439:57;;;;;;;;;;:::i;:::-;;;;;;;;25967:537;;;;:::o;42335:173::-;42391:16;42410:6;;;;;;;;;;;42391:25;;42436:8;42427:6;;:17;;;;;;;;;;;;;;;;;;42491:8;42460:40;;42481:8;42460:40;;;;;;;;;;;;42380:128;42335:173;:::o;30405:104::-;30474:27;30484:2;30488:8;30474:27;;;;;;;;;;;;:9;:27::i;:::-;30405:104;;:::o;35967:804::-;36122:4;36143:15;:2;:13;;;:15::i;:::-;36139:625;;;36195:2;36179:36;;;36216:12;:10;:12::i;:::-;36230:4;36236:7;36245:5;36179:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36175:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36442:1;36425:6;:13;:18;36421:273;;;36468:61;;;;;;;;;;:::i;:::-;;;;;;;;36421:273;36644:6;36638:13;36629:6;36625:2;36621:15;36614:38;36175:534;36312:45;;;36302:55;;;:6;:55;;;;36295:62;;;;;36139:625;36748:4;36741:11;;35967:804;;;;;;;:::o;48785:107::-;48845:13;48875:9;48868:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48785:107;:::o;400:723::-;456:13;686:1;677:5;:10;673:53;;;704:10;;;;;;;;;;;;;;;;;;;;;673:53;736:12;751:5;736:20;;767:14;792:78;807:1;799:4;:9;792:78;;825:8;;;;;:::i;:::-;;;;856:2;848:10;;;;;:::i;:::-;;;792:78;;;880:19;912:6;902:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;880:39;;930:154;946:1;937:5;:10;930:154;;974:1;964:11;;;;;:::i;:::-;;;1041:2;1033:5;:10;;;;:::i;:::-;1020:2;:24;;;;:::i;:::-;1007:39;;990:6;997;990:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1070:2;1061:11;;;;;:::i;:::-;;;930:154;;;1108:6;1094:21;;;;;400:723;;;;:::o;37259:159::-;;;;;:::o;37830:158::-;;;;;:::o;30872:163::-;30995:32;31001:2;31005:8;31015:5;31022:4;30995:5;:32::i;:::-;30872:163;;;:::o;4285:326::-;4345:4;4602:1;4580:7;:19;;;:23;4573:30;;4285:326;;;:::o;31294:1538::-;31433:20;31456:12;;31433:35;;31501:1;31487:16;;:2;:16;;;;31479:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31572:1;31560:8;:13;;31552:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31631:61;31661:1;31665:2;31669:12;31683:8;31631:21;:61::i;:::-;32006:8;31970:12;:16;31983:2;31970:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32071:8;32030:12;:16;32043:2;32030:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32130:2;32097:11;:25;32109:12;32097:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32197:15;32147:11;:25;32159:12;32147:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32230:20;32253:12;32230:35;;32287:9;32282:415;32302:8;32298:1;:12;32282:415;;;32366:12;32362:2;32341:38;;32358:1;32341:38;;;;;;;;;;;;32402:4;32398:249;;;32465:59;32496:1;32500:2;32504:12;32518:5;32465:22;:59::i;:::-;32431:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32398:249;32667:14;;;;;;;32312:3;;;;;;;32282:415;;;;32728:12;32713;:27;;;;31945:807;32764:60;32793:1;32797:2;32801:12;32815:8;32764:20;:60::i;:::-;31422:1410;31294:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:934::-;6924:6;6932;6940;6948;6997:2;6985:9;6976:7;6972:23;6968:32;6965:119;;;7003:79;;:::i;:::-;6965:119;7151:1;7140:9;7136:17;7123:31;7181:18;7173:6;7170:30;7167:117;;;7203:79;;:::i;:::-;7167:117;7316:80;7388:7;7379:6;7368:9;7364:22;7316:80;:::i;:::-;7298:98;;;;7094:312;7473:2;7462:9;7458:18;7445:32;7504:18;7496:6;7493:30;7490:117;;;7526:79;;:::i;:::-;7490:117;7639:80;7711:7;7702:6;7691:9;7687:22;7639:80;:::i;:::-;7621:98;;;;7416:313;6802:934;;;;;;;:::o;7742:323::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:50;8040:7;8031:6;8020:9;8016:22;7998:50;:::i;:::-;7988:60;;7944:114;7742:323;;;;:::o;8071:327::-;8129:6;8178:2;8166:9;8157:7;8153:23;8149:32;8146:119;;;8184:79;;:::i;:::-;8146:119;8304:1;8329:52;8373:7;8364:6;8353:9;8349:22;8329:52;:::i;:::-;8319:62;;8275:116;8071:327;;;;:::o;8404:349::-;8473:6;8522:2;8510:9;8501:7;8497:23;8493:32;8490:119;;;8528:79;;:::i;:::-;8490:119;8648:1;8673:63;8728:7;8719:6;8708:9;8704:22;8673:63;:::i;:::-;8663:73;;8619:127;8404:349;;;;:::o;8759:509::-;8828:6;8877:2;8865:9;8856:7;8852:23;8848:32;8845:119;;;8883:79;;:::i;:::-;8845:119;9031:1;9020:9;9016:17;9003:31;9061:18;9053:6;9050:30;9047:117;;;9083:79;;:::i;:::-;9047:117;9188:63;9243:7;9234:6;9223:9;9219:22;9188:63;:::i;:::-;9178:73;;8974:287;8759:509;;;;:::o;9274:329::-;9333:6;9382:2;9370:9;9361:7;9357:23;9353:32;9350:119;;;9388:79;;:::i;:::-;9350:119;9508:1;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9479:117;9274:329;;;;:::o;9609:118::-;9696:24;9714:5;9696:24;:::i;:::-;9691:3;9684:37;9609:118;;:::o;9733:109::-;9814:21;9829:5;9814:21;:::i;:::-;9809:3;9802:34;9733:109;;:::o;9848:360::-;9934:3;9962:38;9994:5;9962:38;:::i;:::-;10016:70;10079:6;10074:3;10016:70;:::i;:::-;10009:77;;10095:52;10140:6;10135:3;10128:4;10121:5;10117:16;10095:52;:::i;:::-;10172:29;10194:6;10172:29;:::i;:::-;10167:3;10163:39;10156:46;;9938:270;9848:360;;;;:::o;10214:364::-;10302:3;10330:39;10363:5;10330:39;:::i;:::-;10385:71;10449:6;10444:3;10385:71;:::i;:::-;10378:78;;10465:52;10510:6;10505:3;10498:4;10491:5;10487:16;10465:52;:::i;:::-;10542:29;10564:6;10542:29;:::i;:::-;10537:3;10533:39;10526:46;;10306:272;10214:364;;;;:::o;10584:377::-;10690:3;10718:39;10751:5;10718:39;:::i;:::-;10773:89;10855:6;10850:3;10773:89;:::i;:::-;10766:96;;10871:52;10916:6;10911:3;10904:4;10897:5;10893:16;10871:52;:::i;:::-;10948:6;10943:3;10939:16;10932:23;;10694:267;10584:377;;;;:::o;10991:845::-;11094:3;11131:5;11125:12;11160:36;11186:9;11160:36;:::i;:::-;11212:89;11294:6;11289:3;11212:89;:::i;:::-;11205:96;;11332:1;11321:9;11317:17;11348:1;11343:137;;;;11494:1;11489:341;;;;11310:520;;11343:137;11427:4;11423:9;11412;11408:25;11403:3;11396:38;11463:6;11458:3;11454:16;11447:23;;11343:137;;11489:341;11556:38;11588:5;11556:38;:::i;:::-;11616:1;11630:154;11644:6;11641:1;11638:13;11630:154;;;11718:7;11712:14;11708:1;11703:3;11699:11;11692:35;11768:1;11759:7;11755:15;11744:26;;11666:4;11663:1;11659:12;11654:17;;11630:154;;;11813:6;11808:3;11804:16;11797:23;;11496:334;;11310:520;;11098:738;;10991:845;;;;:::o;11842:366::-;11984:3;12005:67;12069:2;12064:3;12005:67;:::i;:::-;11998:74;;12081:93;12170:3;12081:93;:::i;:::-;12199:2;12194:3;12190:12;12183:19;;11842:366;;;:::o;12214:::-;12356:3;12377:67;12441:2;12436:3;12377:67;:::i;:::-;12370:74;;12453:93;12542:3;12453:93;:::i;:::-;12571:2;12566:3;12562:12;12555:19;;12214:366;;;:::o;12586:::-;12728:3;12749:67;12813:2;12808:3;12749:67;:::i;:::-;12742:74;;12825:93;12914:3;12825:93;:::i;:::-;12943:2;12938:3;12934:12;12927:19;;12586:366;;;:::o;12958:::-;13100:3;13121:67;13185:2;13180:3;13121:67;:::i;:::-;13114:74;;13197:93;13286:3;13197:93;:::i;:::-;13315:2;13310:3;13306:12;13299:19;;12958:366;;;:::o;13330:::-;13472:3;13493:67;13557:2;13552:3;13493:67;:::i;:::-;13486:74;;13569:93;13658:3;13569:93;:::i;:::-;13687:2;13682:3;13678:12;13671:19;;13330:366;;;:::o;13702:::-;13844:3;13865:67;13929:2;13924:3;13865:67;:::i;:::-;13858:74;;13941:93;14030:3;13941:93;:::i;:::-;14059:2;14054:3;14050:12;14043:19;;13702:366;;;:::o;14074:::-;14216:3;14237:67;14301:2;14296:3;14237:67;:::i;:::-;14230:74;;14313:93;14402:3;14313:93;:::i;:::-;14431:2;14426:3;14422:12;14415:19;;14074:366;;;:::o;14446:::-;14588:3;14609:67;14673:2;14668:3;14609:67;:::i;:::-;14602:74;;14685:93;14774:3;14685:93;:::i;:::-;14803:2;14798:3;14794:12;14787:19;;14446:366;;;:::o;14818:::-;14960:3;14981:67;15045:2;15040:3;14981:67;:::i;:::-;14974:74;;15057:93;15146:3;15057:93;:::i;:::-;15175:2;15170:3;15166:12;15159:19;;14818:366;;;:::o;15190:::-;15332:3;15353:67;15417:2;15412:3;15353:67;:::i;:::-;15346:74;;15429:93;15518:3;15429:93;:::i;:::-;15547:2;15542:3;15538:12;15531:19;;15190:366;;;:::o;15562:::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15562:366;;;:::o;15934:::-;16076:3;16097:67;16161:2;16156:3;16097:67;:::i;:::-;16090:74;;16173:93;16262:3;16173:93;:::i;:::-;16291:2;16286:3;16282:12;16275:19;;15934:366;;;:::o;16306:365::-;16448:3;16469:66;16533:1;16528:3;16469:66;:::i;:::-;16462:73;;16544:93;16633:3;16544:93;:::i;:::-;16662:2;16657:3;16653:12;16646:19;;16306:365;;;:::o;16677:366::-;16819:3;16840:67;16904:2;16899:3;16840:67;:::i;:::-;16833:74;;16916:93;17005:3;16916:93;:::i;:::-;17034:2;17029:3;17025:12;17018:19;;16677:366;;;:::o;17049:::-;17191:3;17212:67;17276:2;17271:3;17212:67;:::i;:::-;17205:74;;17288:93;17377:3;17288:93;:::i;:::-;17406:2;17401:3;17397:12;17390:19;;17049:366;;;:::o;17421:::-;17563:3;17584:67;17648:2;17643:3;17584:67;:::i;:::-;17577:74;;17660:93;17749:3;17660:93;:::i;:::-;17778:2;17773:3;17769:12;17762:19;;17421:366;;;:::o;17793:::-;17935:3;17956:67;18020:2;18015:3;17956:67;:::i;:::-;17949:74;;18032:93;18121:3;18032:93;:::i;:::-;18150:2;18145:3;18141:12;18134:19;;17793:366;;;:::o;18165:::-;18307:3;18328:67;18392:2;18387:3;18328:67;:::i;:::-;18321:74;;18404:93;18493:3;18404:93;:::i;:::-;18522:2;18517:3;18513:12;18506:19;;18165:366;;;:::o;18537:398::-;18696:3;18717:83;18798:1;18793:3;18717:83;:::i;:::-;18710:90;;18809:93;18898:3;18809:93;:::i;:::-;18927:1;18922:3;18918:11;18911:18;;18537:398;;;:::o;18941:366::-;19083:3;19104:67;19168:2;19163:3;19104:67;:::i;:::-;19097:74;;19180:93;19269:3;19180:93;:::i;:::-;19298:2;19293:3;19289:12;19282:19;;18941:366;;;:::o;19313:::-;19455:3;19476:67;19540:2;19535:3;19476:67;:::i;:::-;19469:74;;19552:93;19641:3;19552:93;:::i;:::-;19670:2;19665:3;19661:12;19654:19;;19313:366;;;:::o;19685:::-;19827:3;19848:67;19912:2;19907:3;19848:67;:::i;:::-;19841:74;;19924:93;20013:3;19924:93;:::i;:::-;20042:2;20037:3;20033:12;20026:19;;19685:366;;;:::o;20057:::-;20199:3;20220:67;20284:2;20279:3;20220:67;:::i;:::-;20213:74;;20296:93;20385:3;20296:93;:::i;:::-;20414:2;20409:3;20405:12;20398:19;;20057:366;;;:::o;20429:::-;20571:3;20592:67;20656:2;20651:3;20592:67;:::i;:::-;20585:74;;20668:93;20757:3;20668:93;:::i;:::-;20786:2;20781:3;20777:12;20770:19;;20429:366;;;:::o;20801:::-;20943:3;20964:67;21028:2;21023:3;20964:67;:::i;:::-;20957:74;;21040:93;21129:3;21040:93;:::i;:::-;21158:2;21153:3;21149:12;21142:19;;20801:366;;;:::o;21173:::-;21315:3;21336:67;21400:2;21395:3;21336:67;:::i;:::-;21329:74;;21412:93;21501:3;21412:93;:::i;:::-;21530:2;21525:3;21521:12;21514:19;;21173:366;;;:::o;21545:::-;21687:3;21708:67;21772:2;21767:3;21708:67;:::i;:::-;21701:74;;21784:93;21873:3;21784:93;:::i;:::-;21902:2;21897:3;21893:12;21886:19;;21545:366;;;:::o;21917:118::-;22004:24;22022:5;22004:24;:::i;:::-;21999:3;21992:37;21917:118;;:::o;22041:589::-;22266:3;22288:95;22379:3;22370:6;22288:95;:::i;:::-;22281:102;;22400:95;22491:3;22482:6;22400:95;:::i;:::-;22393:102;;22512:92;22600:3;22591:6;22512:92;:::i;:::-;22505:99;;22621:3;22614:10;;22041:589;;;;;;:::o;22636:379::-;22820:3;22842:147;22985:3;22842:147;:::i;:::-;22835:154;;23006:3;22999:10;;22636:379;;;:::o;23021:222::-;23114:4;23152:2;23141:9;23137:18;23129:26;;23165:71;23233:1;23222:9;23218:17;23209:6;23165:71;:::i;:::-;23021:222;;;;:::o;23249:640::-;23444:4;23482:3;23471:9;23467:19;23459:27;;23496:71;23564:1;23553:9;23549:17;23540:6;23496:71;:::i;:::-;23577:72;23645:2;23634:9;23630:18;23621:6;23577:72;:::i;:::-;23659;23727:2;23716:9;23712:18;23703:6;23659:72;:::i;:::-;23778:9;23772:4;23768:20;23763:2;23752:9;23748:18;23741:48;23806:76;23877:4;23868:6;23806:76;:::i;:::-;23798:84;;23249:640;;;;;;;:::o;23895:210::-;23982:4;24020:2;24009:9;24005:18;23997:26;;24033:65;24095:1;24084:9;24080:17;24071:6;24033:65;:::i;:::-;23895:210;;;;:::o;24111:313::-;24224:4;24262:2;24251:9;24247:18;24239:26;;24311:9;24305:4;24301:20;24297:1;24286:9;24282:17;24275:47;24339:78;24412:4;24403:6;24339:78;:::i;:::-;24331:86;;24111:313;;;;:::o;24430:419::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:131;24837:4;24711:131;:::i;:::-;24703:139;;24430:419;;;:::o;24855:::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:131;25262:4;25136:131;:::i;:::-;25128:139;;24855:419;;;:::o;25280:::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25280:419;;;:::o;25705:::-;25871:4;25909:2;25898:9;25894:18;25886:26;;25958:9;25952:4;25948:20;25944:1;25933:9;25929:17;25922:47;25986:131;26112:4;25986:131;:::i;:::-;25978:139;;25705:419;;;:::o;26130:::-;26296:4;26334:2;26323:9;26319:18;26311:26;;26383:9;26377:4;26373:20;26369:1;26358:9;26354:17;26347:47;26411:131;26537:4;26411:131;:::i;:::-;26403:139;;26130:419;;;:::o;26555:::-;26721:4;26759:2;26748:9;26744:18;26736:26;;26808:9;26802:4;26798:20;26794:1;26783:9;26779:17;26772:47;26836:131;26962:4;26836:131;:::i;:::-;26828:139;;26555:419;;;:::o;26980:::-;27146:4;27184:2;27173:9;27169:18;27161:26;;27233:9;27227:4;27223:20;27219:1;27208:9;27204:17;27197:47;27261:131;27387:4;27261:131;:::i;:::-;27253:139;;26980:419;;;:::o;27405:::-;27571:4;27609:2;27598:9;27594:18;27586:26;;27658:9;27652:4;27648:20;27644:1;27633:9;27629:17;27622:47;27686:131;27812:4;27686:131;:::i;:::-;27678:139;;27405:419;;;:::o;27830:::-;27996:4;28034:2;28023:9;28019:18;28011:26;;28083:9;28077:4;28073:20;28069:1;28058:9;28054:17;28047:47;28111:131;28237:4;28111:131;:::i;:::-;28103:139;;27830:419;;;:::o;28255:::-;28421:4;28459:2;28448:9;28444:18;28436:26;;28508:9;28502:4;28498:20;28494:1;28483:9;28479:17;28472:47;28536:131;28662:4;28536:131;:::i;:::-;28528:139;;28255:419;;;:::o;28680:::-;28846:4;28884:2;28873:9;28869:18;28861:26;;28933:9;28927:4;28923:20;28919:1;28908:9;28904:17;28897:47;28961:131;29087:4;28961:131;:::i;:::-;28953:139;;28680:419;;;:::o;29105:::-;29271:4;29309:2;29298:9;29294:18;29286:26;;29358:9;29352:4;29348:20;29344:1;29333:9;29329:17;29322:47;29386:131;29512:4;29386:131;:::i;:::-;29378:139;;29105:419;;;:::o;29530:::-;29696:4;29734:2;29723:9;29719:18;29711:26;;29783:9;29777:4;29773:20;29769:1;29758:9;29754:17;29747:47;29811:131;29937:4;29811:131;:::i;:::-;29803:139;;29530:419;;;:::o;29955:::-;30121:4;30159:2;30148:9;30144:18;30136:26;;30208:9;30202:4;30198:20;30194:1;30183:9;30179:17;30172:47;30236:131;30362:4;30236:131;:::i;:::-;30228:139;;29955:419;;;:::o;30380:::-;30546:4;30584:2;30573:9;30569:18;30561:26;;30633:9;30627:4;30623:20;30619:1;30608:9;30604:17;30597:47;30661:131;30787:4;30661:131;:::i;:::-;30653:139;;30380:419;;;:::o;30805:::-;30971:4;31009:2;30998:9;30994:18;30986:26;;31058:9;31052:4;31048:20;31044:1;31033:9;31029:17;31022:47;31086:131;31212:4;31086:131;:::i;:::-;31078:139;;30805:419;;;:::o;31230:::-;31396:4;31434:2;31423:9;31419:18;31411:26;;31483:9;31477:4;31473:20;31469:1;31458:9;31454:17;31447:47;31511:131;31637:4;31511:131;:::i;:::-;31503:139;;31230:419;;;:::o;31655:::-;31821:4;31859:2;31848:9;31844:18;31836:26;;31908:9;31902:4;31898:20;31894:1;31883:9;31879:17;31872:47;31936:131;32062:4;31936:131;:::i;:::-;31928:139;;31655:419;;;:::o;32080:::-;32246:4;32284:2;32273:9;32269:18;32261:26;;32333:9;32327:4;32323:20;32319:1;32308:9;32304:17;32297:47;32361:131;32487:4;32361:131;:::i;:::-;32353:139;;32080:419;;;:::o;32505:::-;32671:4;32709:2;32698:9;32694:18;32686:26;;32758:9;32752:4;32748:20;32744:1;32733:9;32729:17;32722:47;32786:131;32912:4;32786:131;:::i;:::-;32778:139;;32505:419;;;:::o;32930:::-;33096:4;33134:2;33123:9;33119:18;33111:26;;33183:9;33177:4;33173:20;33169:1;33158:9;33154:17;33147:47;33211:131;33337:4;33211:131;:::i;:::-;33203:139;;32930:419;;;:::o;33355:::-;33521:4;33559:2;33548:9;33544:18;33536:26;;33608:9;33602:4;33598:20;33594:1;33583:9;33579:17;33572:47;33636:131;33762:4;33636:131;:::i;:::-;33628:139;;33355:419;;;:::o;33780:::-;33946:4;33984:2;33973:9;33969:18;33961:26;;34033:9;34027:4;34023:20;34019:1;34008:9;34004:17;33997:47;34061:131;34187:4;34061:131;:::i;:::-;34053:139;;33780:419;;;:::o;34205:::-;34371:4;34409:2;34398:9;34394:18;34386:26;;34458:9;34452:4;34448:20;34444:1;34433:9;34429:17;34422:47;34486:131;34612:4;34486:131;:::i;:::-;34478:139;;34205:419;;;:::o;34630:::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:::-;35221:4;35259:2;35248:9;35244:18;35236:26;;35308:9;35302:4;35298:20;35294:1;35283:9;35279:17;35272:47;35336:131;35462:4;35336:131;:::i;:::-;35328:139;;35055:419;;;:::o;35480:222::-;35573:4;35611:2;35600:9;35596:18;35588:26;;35624:71;35692:1;35681:9;35677:17;35668:6;35624:71;:::i;:::-;35480:222;;;;:::o;35708:129::-;35742:6;35769:20;;:::i;:::-;35759:30;;35798:33;35826:4;35818:6;35798:33;:::i;:::-;35708:129;;;:::o;35843:75::-;35876:6;35909:2;35903:9;35893:19;;35843:75;:::o;35924:307::-;35985:4;36075:18;36067:6;36064:30;36061:56;;;36097:18;;:::i;:::-;36061:56;36135:29;36157:6;36135:29;:::i;:::-;36127:37;;36219:4;36213;36209:15;36201:23;;35924:307;;;:::o;36237:308::-;36299:4;36389:18;36381:6;36378:30;36375:56;;;36411:18;;:::i;:::-;36375:56;36449:29;36471:6;36449:29;:::i;:::-;36441:37;;36533:4;36527;36523:15;36515:23;;36237:308;;;:::o;36551:141::-;36600:4;36623:3;36615:11;;36646:3;36643:1;36636:14;36680:4;36677:1;36667:18;36659:26;;36551:141;;;:::o;36698:98::-;36749:6;36783:5;36777:12;36767:22;;36698:98;;;:::o;36802:99::-;36854:6;36888:5;36882:12;36872:22;;36802:99;;;:::o;36907:168::-;36990:11;37024:6;37019:3;37012:19;37064:4;37059:3;37055:14;37040:29;;36907:168;;;;:::o;37081:147::-;37182:11;37219:3;37204:18;;37081:147;;;;:::o;37234:169::-;37318:11;37352:6;37347:3;37340:19;37392:4;37387:3;37383:14;37368:29;;37234:169;;;;:::o;37409:148::-;37511:11;37548:3;37533:18;;37409:148;;;;:::o;37563:305::-;37603:3;37622:20;37640:1;37622:20;:::i;:::-;37617:25;;37656:20;37674:1;37656:20;:::i;:::-;37651:25;;37810:1;37742:66;37738:74;37735:1;37732:81;37729:107;;;37816:18;;:::i;:::-;37729:107;37860:1;37857;37853:9;37846:16;;37563:305;;;;:::o;37874:185::-;37914:1;37931:20;37949:1;37931:20;:::i;:::-;37926:25;;37965:20;37983:1;37965:20;:::i;:::-;37960:25;;38004:1;37994:35;;38009:18;;:::i;:::-;37994:35;38051:1;38048;38044:9;38039:14;;37874:185;;;;:::o;38065:348::-;38105:7;38128:20;38146:1;38128:20;:::i;:::-;38123:25;;38162:20;38180:1;38162:20;:::i;:::-;38157:25;;38350:1;38282:66;38278:74;38275:1;38272:81;38267:1;38260:9;38253:17;38249:105;38246:131;;;38357:18;;:::i;:::-;38246:131;38405:1;38402;38398:9;38387:20;;38065:348;;;;:::o;38419:191::-;38459:4;38479:20;38497:1;38479:20;:::i;:::-;38474:25;;38513:20;38531:1;38513:20;:::i;:::-;38508:25;;38552:1;38549;38546:8;38543:34;;;38557:18;;:::i;:::-;38543:34;38602:1;38599;38595:9;38587:17;;38419:191;;;;:::o;38616:96::-;38653:7;38682:24;38700:5;38682:24;:::i;:::-;38671:35;;38616:96;;;:::o;38718:90::-;38752:7;38795:5;38788:13;38781:21;38770:32;;38718:90;;;:::o;38814:149::-;38850:7;38890:66;38883:5;38879:78;38868:89;;38814:149;;;:::o;38969:126::-;39006:7;39046:42;39039:5;39035:54;39024:65;;38969:126;;;:::o;39101:77::-;39138:7;39167:5;39156:16;;39101:77;;;:::o;39184:154::-;39268:6;39263:3;39258;39245:30;39330:1;39321:6;39316:3;39312:16;39305:27;39184:154;;;:::o;39344:307::-;39412:1;39422:113;39436:6;39433:1;39430:13;39422:113;;;39521:1;39516:3;39512:11;39506:18;39502:1;39497:3;39493:11;39486:39;39458:2;39455:1;39451:10;39446:15;;39422:113;;;39553:6;39550:1;39547:13;39544:101;;;39633:1;39624:6;39619:3;39615:16;39608:27;39544:101;39393:258;39344:307;;;:::o;39657:320::-;39701:6;39738:1;39732:4;39728:12;39718:22;;39785:1;39779:4;39775:12;39806:18;39796:81;;39862:4;39854:6;39850:17;39840:27;;39796:81;39924:2;39916:6;39913:14;39893:18;39890:38;39887:84;;;39943:18;;:::i;:::-;39887:84;39708:269;39657:320;;;:::o;39983:281::-;40066:27;40088:4;40066:27;:::i;:::-;40058:6;40054:40;40196:6;40184:10;40181:22;40160:18;40148:10;40145:34;40142:62;40139:88;;;40207:18;;:::i;:::-;40139:88;40247:10;40243:2;40236:22;40026:238;39983:281;;:::o;40270:233::-;40309:3;40332:24;40350:5;40332:24;:::i;:::-;40323:33;;40378:66;40371:5;40368:77;40365:103;;;40448:18;;:::i;:::-;40365:103;40495:1;40488:5;40484:13;40477:20;;40270:233;;;:::o;40509:176::-;40541:1;40558:20;40576:1;40558:20;:::i;:::-;40553:25;;40592:20;40610:1;40592:20;:::i;:::-;40587:25;;40631:1;40621:35;;40636:18;;:::i;:::-;40621:35;40677:1;40674;40670:9;40665:14;;40509:176;;;;:::o;40691:180::-;40739:77;40736:1;40729:88;40836:4;40833:1;40826:15;40860:4;40857:1;40850:15;40877:180;40925:77;40922:1;40915:88;41022:4;41019:1;41012:15;41046:4;41043:1;41036:15;41063:180;41111:77;41108:1;41101:88;41208:4;41205:1;41198:15;41232:4;41229:1;41222:15;41249:180;41297:77;41294:1;41287:88;41394:4;41391:1;41384:15;41418:4;41415:1;41408:15;41435:180;41483:77;41480:1;41473:88;41580:4;41577:1;41570:15;41604:4;41601:1;41594:15;41621:117;41730:1;41727;41720:12;41744:117;41853:1;41850;41843:12;41867:117;41976:1;41973;41966:12;41990:117;42099:1;42096;42089:12;42113:117;42222:1;42219;42212:12;42236:117;42345:1;42342;42335:12;42359:102;42400:6;42451:2;42447:7;42442:2;42435:5;42431:14;42427:28;42417:38;;42359:102;;;:::o;42467:221::-;42607:34;42603:1;42595:6;42591:14;42584:58;42676:4;42671:2;42663:6;42659:15;42652:29;42467:221;:::o;42694:161::-;42834:13;42830:1;42822:6;42818:14;42811:37;42694:161;:::o;42861:225::-;43001:34;42997:1;42989:6;42985:14;42978:58;43070:8;43065:2;43057:6;43053:15;43046:33;42861:225;:::o;43092:229::-;43232:34;43228:1;43220:6;43216:14;43209:58;43301:12;43296:2;43288:6;43284:15;43277:37;43092:229;:::o;43327:222::-;43467:34;43463:1;43455:6;43451:14;43444:58;43536:5;43531:2;43523:6;43519:15;43512:30;43327:222;:::o;43555:224::-;43695:34;43691:1;43683:6;43679:14;43672:58;43764:7;43759:2;43751:6;43747:15;43740:32;43555:224;:::o;43785:220::-;43925:34;43921:1;43913:6;43909:14;43902:58;43994:3;43989:2;43981:6;43977:15;43970:28;43785:220;:::o;44011:244::-;44151:34;44147:1;44139:6;44135:14;44128:58;44220:27;44215:2;44207:6;44203:15;44196:52;44011:244;:::o;44261:176::-;44401:28;44397:1;44389:6;44385:14;44378:52;44261:176;:::o;44443:230::-;44583:34;44579:1;44571:6;44567:14;44560:58;44652:13;44647:2;44639:6;44635:15;44628:38;44443:230;:::o;44679:169::-;44819:21;44815:1;44807:6;44803:14;44796:45;44679:169;:::o;44854:225::-;44994:34;44990:1;44982:6;44978:14;44971:58;45063:8;45058:2;45050:6;45046:15;45039:33;44854:225;:::o;45085:158::-;45225:10;45221:1;45213:6;45209:14;45202:34;45085:158;:::o;45249:182::-;45389:34;45385:1;45377:6;45373:14;45366:58;45249:182;:::o;45437:234::-;45577:34;45573:1;45565:6;45561:14;45554:58;45646:17;45641:2;45633:6;45629:15;45622:42;45437:234;:::o;45677:176::-;45817:28;45813:1;45805:6;45801:14;45794:52;45677:176;:::o;45859:237::-;45999:34;45995:1;45987:6;45983:14;45976:58;46068:20;46063:2;46055:6;46051:15;46044:45;45859:237;:::o;46102:221::-;46242:34;46238:1;46230:6;46226:14;46219:58;46311:4;46306:2;46298:6;46294:15;46287:29;46102:221;:::o;46329:114::-;;:::o;46449:238::-;46589:34;46585:1;46577:6;46573:14;46566:58;46658:21;46653:2;46645:6;46641:15;46634:46;46449:238;:::o;46693:177::-;46833:29;46829:1;46821:6;46817:14;46810:53;46693:177;:::o;46876:220::-;47016:34;47012:1;47004:6;47000:14;46993:58;47085:3;47080:2;47072:6;47068:15;47061:28;46876:220;:::o;47102:227::-;47242:34;47238:1;47230:6;47226:14;47219:58;47311:10;47306:2;47298:6;47294:15;47287:35;47102:227;:::o;47335:233::-;47475:34;47471:1;47463:6;47459:14;47452:58;47544:16;47539:2;47531:6;47527:15;47520:41;47335:233;:::o;47574:181::-;47714:33;47710:1;47702:6;47698:14;47691:57;47574:181;:::o;47761:234::-;47901:34;47897:1;47889:6;47885:14;47878:58;47970:17;47965:2;47957:6;47953:15;47946:42;47761:234;:::o;48001:232::-;48141:34;48137:1;48129:6;48125:14;48118:58;48210:15;48205:2;48197:6;48193:15;48186:40;48001:232;:::o;48239:122::-;48312:24;48330:5;48312:24;:::i;:::-;48305:5;48302:35;48292:63;;48351:1;48348;48341:12;48292:63;48239:122;:::o;48367:116::-;48437:21;48452:5;48437:21;:::i;:::-;48430:5;48427:32;48417:60;;48473:1;48470;48463:12;48417:60;48367:116;:::o;48489:120::-;48561:23;48578:5;48561:23;:::i;:::-;48554:5;48551:34;48541:62;;48599:1;48596;48589:12;48541:62;48489:120;:::o;48615:122::-;48688:24;48706:5;48688:24;:::i;:::-;48681:5;48678:35;48668:63;;48727:1;48724;48717:12;48668:63;48615:122;:::o

Swarm Source

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