ETH Price: $2,942.98 (-6.78%)
Gas: 5 Gwei

Token

Fxck C00l CatZ (FCTZ)
 

Overview

Max Total Supply

1,234 FCTZ

Holders

199

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 FCTZ
0xad26085c07e70c73230d548224264d3941bc1dc6
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:
FCTZ

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-09-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 v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: contracts/new.sol




pragma solidity ^0.8.4;








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

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

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

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

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

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

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

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

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

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

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

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

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

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

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

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

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _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);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.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;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

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

        // 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 storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

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

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

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

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

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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 _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
    pragma solidity ^0.8.7;
    
    contract FCTZ is ERC721A, Ownable {
    using Strings for uint256;


  string private uriPrefix ;
  string private uriSuffix = ".json";
  string public hiddenURL;

  
  

  uint256 public cost = 0.001 ether;
  uint256 public whiteListCost = 0 ;
  uint16 public maxSupply = 3333;
  uint8 public maxMintAmountPerTx = 10;
  uint8 public maxFreeMintAmountPerWallet = 1;                                                     
  bool public WLpaused = true;
  bool public paused = true;
  bool public reveal =false;
  mapping (address => uint8) public NFTPerWLAddress;
   mapping (address => uint8) public NFTPerPublicAddress;
  mapping (address => bool) public isWhitelisted;
 
  
  
 
  

  constructor() ERC721A("Fxck C00l CatZ", "FCTZ") {
  }

  
 
  function mint(uint8 _mintAmount) external payable  {
     uint16 totalSupply = uint16(totalSupply());
     uint8 nft = NFTPerPublicAddress[msg.sender];
    require(totalSupply + _mintAmount <= maxSupply, "Exceeds max supply.");
    require(_mintAmount + nft <= maxMintAmountPerTx, "Exceeds max per transaction.");

    require(!paused, "The contract is paused!");
    
      if(nft >= maxFreeMintAmountPerWallet)
    {
    require(msg.value >= cost * _mintAmount, "Insufficient funds!");
    }
    else {
         uint8 costAmount = _mintAmount + nft;
        if(costAmount > maxFreeMintAmountPerWallet)
       {
        costAmount = costAmount - maxFreeMintAmountPerWallet;
        require(msg.value >= cost * costAmount, "Insufficient funds!");
       }
       
         
    }
    


    _safeMint(msg.sender , _mintAmount);

    NFTPerPublicAddress[msg.sender] = _mintAmount + nft;
     
     delete totalSupply;
     delete _mintAmount;
  }


 

  function setMaxSupply(uint16 _maxSupply) external onlyOwner {
      maxSupply = _maxSupply;
  }



   
  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    
  
if ( reveal == false)
{
    return hiddenURL;
}
    

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString() ,uriSuffix))
        : "";
  }
 
   function setWLPaused() external onlyOwner {
    WLpaused = !WLpaused;
  }
  function setWLCost(uint256 _cost) external onlyOwner {
    whiteListCost = _cost;
    delete _cost;
  }



 function setFreeMaxLimitPerAddress(uint8 _limit) external onlyOwner{
    maxFreeMintAmountPerWallet = _limit;
   delete _limit;

}

    
  function addToPresaleWhitelist(address[] calldata entries) external onlyOwner {
        for(uint8 i = 0; i < entries.length; i++) {
            isWhitelisted[entries[i]] = true;
        }   
    }

    function removeFromPresaleWhitelist(address[] calldata entries) external onlyOwner {
        for(uint8 i = 0; i < entries.length; i++) {
             isWhitelisted[entries[i]] = false;
        }
    }

function whitelistMint(uint8 _mintAmount) external payable {
        
    
        uint8 nft = NFTPerWLAddress[msg.sender];
       require(isWhitelisted[msg.sender],  "You are not whitelisted");

       require (nft + _mintAmount <= maxMintAmountPerTx, "Exceeds max  limit  per address");
      


    require(!WLpaused, "Whitelist minting is over!");
         if(nft >= maxFreeMintAmountPerWallet)
    {
    require(msg.value >= whiteListCost * _mintAmount, "Insufficient funds!");
    }
    else {
         uint8 costAmount = _mintAmount + nft;
        if(costAmount > maxFreeMintAmountPerWallet)
       {
        costAmount = costAmount - maxFreeMintAmountPerWallet;
        require(msg.value >= whiteListCost * costAmount, "Insufficient funds!");
       }
       
         
    }
    
    

     _safeMint(msg.sender , _mintAmount);
      NFTPerWLAddress[msg.sender] =nft + _mintAmount;
     
      delete _mintAmount;
       delete nft;
    
    }

  function setUriPrefix(string memory _uriPrefix) external onlyOwner {
    uriPrefix = _uriPrefix;
  }
   function setHiddenUri(string memory _uriPrefix) external onlyOwner {
    hiddenURL = _uriPrefix;
  }


  function setPaused() external onlyOwner {
    paused = !paused;
    WLpaused = true;
  }

  function setCost(uint _cost) external onlyOwner{
      cost = _cost;

  }

 function setRevealed() external onlyOwner{
     reveal = !reveal;
 }

  function setMaxMintAmountPerTx(uint8 _maxtx) external onlyOwner{
      maxMintAmountPerTx = _maxtx;

  }

 

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


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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NFTPerPublicAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"NFTPerWLAddress","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WLpaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"addToPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"hiddenURL","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":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintAmountPerWallet","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"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":[{"internalType":"address[]","name":"entries","type":"address[]"}],"name":"removeFromPresaleWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","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":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_limit","type":"uint8"}],"name":"setFreeMaxLimitPerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setHiddenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_maxtx","type":"uint8"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxSupply","type":"uint16"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setWLCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setWLPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whiteListCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_mintAmount","type":"uint8"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a908051906020019062000051929190620002c7565b5066038d7ea4c68000600c556000600d55610d05600e60006101000a81548161ffff021916908361ffff160217905550600a600e60026101000a81548160ff021916908360ff1602179055506001600e60036101000a81548160ff021916908360ff1602179055506001600e60046101000a81548160ff0219169083151502179055506001600e60056101000a81548160ff0219169083151502179055506000600e60066101000a81548160ff0219169083151502179055503480156200011757600080fd5b506040518060400160405280600e81526020017f4678636b204330306c204361745a0000000000000000000000000000000000008152506040518060400160405280600481526020017f4643545a0000000000000000000000000000000000000000000000000000000081525081600290805190602001906200019c929190620002c7565b508060039080519060200190620001b5929190620002c7565b50620001c6620001f460201b60201c565b6000819055505050620001ee620001e2620001f960201b60201c565b6200020160201b60201c565b620003dc565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002d59062000377565b90600052602060002090601f016020900481019282620002f9576000855562000345565b82601f106200031457805160ff191683800117855562000345565b8280016001018555821562000345579182015b828111156200034457825182559160200191906001019062000327565b5b50905062000354919062000358565b5090565b5b808211156200037357600081600090555060010162000359565b5090565b600060028204905060018216806200039057607f821691505b60208210811415620003a757620003a6620003ad565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61493580620003ec6000396000f3fe6080604052600436106102675760003560e01c806370a0823111610144578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb01146108ae578063e94053c7146108d9578063e985e9c514610916578063eef440af14610953578063f2fde38b1461097e578063f8bf5172146109a757610267565b8063a475b5dd146107cb578063aa062290146107f6578063b88d4fde1461081f578063c87b56dd14610848578063d1d192131461088557610267565b80638e07484c116101085780638e07484c146106cf5780638f65fe0a146106f85780639257e0441461072157806394354fd01461074c57806395d89b4114610777578063a22cb465146107a257610267565b806370a08231146105fc578063715018a6146106395780637ec4a659146106505780637f6e9093146106795780638da5cb5b146106a457610267565b80633af32abf116101dd5780634d9c1848116101a15780634d9c1848146104f657806359bf5dbb1461051f5780635c975abb1461055c57806360e85cde146105875780636352211e146105a35780636ecd2306146105e057610267565b80633af32abf146104395780633bd64968146104765780633ccfd60b1461048d57806342842e0e146104a457806344a0d68a146104cd57610267565b8063095ea7b31161022f578063095ea7b3146103515780631067fcc71461037a57806313faede6146103a357806318160ddd146103ce57806323b872dd146103f957806337a66d851461042257610267565b806301ffc9a71461026c57806306421c2f146102a957806306fdde03146102d2578063081812fc146102fd578063093cfa631461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613aab565b6109d2565b6040516102a09190613f38565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613b4e565b610ab4565b005b3480156102de57600080fd5b506102e7610b50565b6040516102f49190613f53565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613b7b565b610be2565b6040516103319190613ed1565b60405180910390f35b34801561034657600080fd5b5061034f610c5e565b005b34801561035d57600080fd5b5061037860048036038101906103739190613a1e565b610d06565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613b05565b610e11565b005b3480156103af57600080fd5b506103b8610ea7565b6040516103c591906140d0565b60405180910390f35b3480156103da57600080fd5b506103e3610ead565b6040516103f091906140d0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613908565b610ec4565b005b34801561042e57600080fd5b50610437610ed4565b005b34801561044557600080fd5b50610460600480360381019061045b919061389b565b610f97565b60405161046d9190613f38565b60405180910390f35b34801561048257600080fd5b5061048b610fb7565b005b34801561049957600080fd5b506104a261105f565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613908565b61112a565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613b7b565b61114a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613ba8565b6111d0565b005b34801561052b57600080fd5b506105466004803603810190610541919061389b565b61126e565b60405161055391906140eb565b60405180910390f35b34801561056857600080fd5b5061057161128e565b60405161057e9190613f38565b60405180910390f35b6105a1600480360381019061059c9190613ba8565b6112a1565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613b7b565b6115c1565b6040516105d79190613ed1565b60405180910390f35b6105fa60048036038101906105f59190613ba8565b6115d7565b005b34801561060857600080fd5b50610623600480360381019061061e919061389b565b6118e1565b60405161063091906140d0565b60405180910390f35b34801561064557600080fd5b5061064e6119b1565b005b34801561065c57600080fd5b5061067760048036038101906106729190613b05565b611a39565b005b34801561068557600080fd5b5061068e611acf565b60405161069b9190613f38565b60405180910390f35b3480156106b057600080fd5b506106b9611ae2565b6040516106c69190613ed1565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190613a5e565b611b0c565b005b34801561070457600080fd5b5061071f600480360381019061071a9190613a5e565b611c33565b005b34801561072d57600080fd5b50610736611d5a565b60405161074391906140d0565b60405180910390f35b34801561075857600080fd5b50610761611d60565b60405161076e91906140eb565b60405180910390f35b34801561078357600080fd5b5061078c611d73565b6040516107999190613f53565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c491906139de565b611e05565b005b3480156107d757600080fd5b506107e0611f7d565b6040516107ed9190613f38565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613ba8565b611f90565b005b34801561082b57600080fd5b506108466004803603810190610841919061395b565b61202a565b005b34801561085457600080fd5b5061086f600480360381019061086a9190613b7b565b6120a6565b60405161087c9190613f53565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613b7b565b6121ff565b005b3480156108ba57600080fd5b506108c3612289565b6040516108d091906140b5565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb919061389b565b61229d565b60405161090d91906140eb565b60405180910390f35b34801561092257600080fd5b5061093d600480360381019061093891906138c8565b6122bd565b60405161094a9190613f38565b60405180910390f35b34801561095f57600080fd5b50610968612351565b6040516109759190613f53565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a0919061389b565b6123df565b005b3480156109b357600080fd5b506109bc6124d7565b6040516109c991906140eb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aad5750610aac826124ea565b5b9050919050565b610abc612554565b73ffffffffffffffffffffffffffffffffffffffff16610ada611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613fd5565b60405180910390fd5b80600e60006101000a81548161ffff021916908361ffff16021790555050565b606060028054610b5f9061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b9061446e565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b5050505050905090565b6000610bed8261255c565b610c23576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c66612554565b73ffffffffffffffffffffffffffffffffffffffff16610c84611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fd5565b60405180910390fd5b600e60049054906101000a900460ff1615600e60046101000a81548160ff021916908315150217905550565b6000610d11826115c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d98612554565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dca5750610dc881610dc3612554565b6122bd565b155b15610e01576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e0c8383836125aa565b505050565b610e19612554565b73ffffffffffffffffffffffffffffffffffffffff16610e37611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613fd5565b60405180910390fd5b80600b9080519060200190610ea39291906135ec565b5050565b600c5481565b6000610eb761265c565b6001546000540303905090565b610ecf838383612661565b505050565b610edc612554565b73ffffffffffffffffffffffffffffffffffffffff16610efa611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613fd5565b60405180910390fd5b600e60059054906101000a900460ff1615600e60056101000a81548160ff0219169083151502179055506001600e60046101000a81548160ff021916908315150217905550565b60116020528060005260406000206000915054906101000a900460ff1681565b610fbf612554565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613fd5565b60405180910390fd5b600e60069054906101000a900460ff1615600e60066101000a81548160ff021916908315150217905550565b611067612554565b73ffffffffffffffffffffffffffffffffffffffff16611085611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290613fd5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611126573d6000803e3d6000fd5b5050565b6111458383836040518060200160405280600081525061202a565b505050565b611152612554565b73ffffffffffffffffffffffffffffffffffffffff16611170611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613fd5565b60405180910390fd5b80600c8190555050565b6111d8612554565b73ffffffffffffffffffffffffffffffffffffffff166111f6611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613fd5565b60405180910390fd5b80600e60036101000a81548160ff021916908360ff1602179055506000905050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600e60059054906101000a900460ff1681565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590613fb5565b60405180910390fd5b600e60029054906101000a900460ff1660ff16828261139d9190614273565b60ff1611156113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890614075565b60405180910390fd5b600e60049054906101000a900460ff1615611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613f95565b60405180910390fd5b600e60039054906101000a900460ff1660ff168160ff16106114a5578160ff16600d5461145e91906142db565b3410156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790614095565b60405180910390fd5b611545565b600081836114b39190614273565b9050600e60039054906101000a900460ff1660ff168160ff16111561154357600e60039054906101000a900460ff16816114ed9190614369565b90508060ff16600d5461150091906142db565b341015611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614095565b60405180910390fd5b5b505b611552338360ff16612b17565b818161155e9190614273565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060009150600090505050565b60006115cc82612b35565b600001519050919050565b60006115e1610ead565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600e60009054906101000a900461ffff1661ffff168360ff168361165891906141e5565b61ffff16111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614035565b60405180910390fd5b600e60029054906101000a900460ff1660ff1681846116bc9190614273565b60ff161115611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790614055565b60405180910390fd5b600e60059054906101000a900460ff1615611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790613ff5565b60405180910390fd5b600e60039054906101000a900460ff1660ff168160ff16106117c4578260ff16600c5461177d91906142db565b3410156117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690614095565b60405180910390fd5b611864565b600081846117d29190614273565b9050600e60039054906101000a900460ff1660ff168160ff16111561186257600e60039054906101000a900460ff168161180c9190614369565b90508060ff16600c5461181f91906142db565b341015611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890614095565b60405180910390fd5b5b505b611871338460ff16612b17565b808361187d9190614273565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506000915060009250505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611949576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119b9612554565b73ffffffffffffffffffffffffffffffffffffffff166119d7611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2490613fd5565b60405180910390fd5b611a376000612dc4565b565b611a41612554565b73ffffffffffffffffffffffffffffffffffffffff16611a5f611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613fd5565b60405180910390fd5b8060099080519060200190611acb9291906135ec565b5050565b600e60049054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b14612554565b73ffffffffffffffffffffffffffffffffffffffff16611b32611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613fd5565b60405180910390fd5b60005b828290508160ff161015611c2e5760016011600085858560ff16818110611bb557611bb4614602565b5b9050602002016020810190611bca919061389b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c269061451a565b915050611b8b565b505050565b611c3b612554565b73ffffffffffffffffffffffffffffffffffffffff16611c59611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690613fd5565b60405180910390fd5b60005b828290508160ff161015611d555760006011600085858560ff16818110611cdc57611cdb614602565b5b9050602002016020810190611cf1919061389b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4d9061451a565b915050611cb2565b505050565b600d5481565b600e60029054906101000a900460ff1681565b606060038054611d829061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054611dae9061446e565b8015611dfb5780601f10611dd057610100808354040283529160200191611dfb565b820191906000526020600020905b815481529060010190602001808311611dde57829003601f168201915b5050505050905090565b611e0d612554565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e72576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611e7f612554565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f2c612554565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f719190613f38565b60405180910390a35050565b600e60069054906101000a900460ff1681565b611f98612554565b73ffffffffffffffffffffffffffffffffffffffff16611fb6611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613fd5565b60405180910390fd5b80600e60026101000a81548160ff021916908360ff16021790555050565b612035848484612661565b6120548373ffffffffffffffffffffffffffffffffffffffff16612e8a565b8015612069575061206784848484612ead565b155b156120a0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606120b18261255c565b6120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614015565b60405180910390fd5b60001515600e60069054906101000a900460ff161515141561219e57600b80546121199061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546121459061446e565b80156121925780601f1061216757610100808354040283529160200191612192565b820191906000526020600020905b81548152906001019060200180831161217557829003601f168201915b505050505090506121fa565b60006121a861300d565b905060008151116121c857604051806020016040528060008152506121f6565b806121d28461309f565b600a6040516020016121e693929190613ea0565b6040516020818303038152906040525b9150505b919050565b612207612554565b73ffffffffffffffffffffffffffffffffffffffff16612225611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290613fd5565b60405180910390fd5b80600d819055506000905050565b600e60009054906101000a900461ffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b805461235e9061446e565b80601f016020809104026020016040519081016040528092919081815260200182805461238a9061446e565b80156123d75780601f106123ac576101008083540402835291602001916123d7565b820191906000526020600020905b8154815290600101906020018083116123ba57829003601f168201915b505050505081565b6123e7612554565b73ffffffffffffffffffffffffffffffffffffffff16612405611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290613fd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290613f75565b60405180910390fd5b6124d481612dc4565b50565b600e60039054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161256761265c565b11158015612576575060005482105b80156125a3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061266c82612b35565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126d7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166126f8612554565b73ffffffffffffffffffffffffffffffffffffffff161480612727575061272685612721612554565b6122bd565b5b8061276c5750612735612554565b73ffffffffffffffffffffffffffffffffffffffff1661275484610be2565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806127a5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561280c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128198585856001613200565b612825600084876125aa565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aa5576000548214612aa457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b108585856001613206565b5050505050565b612b3182826040518060200160405280600081525061320c565b5050565b612b3d613672565b600082905080612b4b61265c565b11158015612b5a575060005481105b15612d8d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d8b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c6f578092505050612dbf565b5b600115612d8a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d85578092505050612dbf565b612c70565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed3612554565b8786866040518563ffffffff1660e01b8152600401612ef59493929190613eec565b602060405180830381600087803b158015612f0f57600080fd5b505af1925050508015612f4057506040513d601f19601f82011682018060405250810190612f3d9190613ad8565b60015b612fba573d8060008114612f70576040519150601f19603f3d011682016040523d82523d6000602084013e612f75565b606091505b50600081511415612fb2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606009805461301c9061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546130489061446e565b80156130955780601f1061306a57610100808354040283529160200191613095565b820191906000526020600020905b81548152906001019060200180831161307857829003601f168201915b5050505050905090565b606060008214156130e7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131fb565b600082905060005b60008214613119578080613102906144d1565b915050600a8261311291906142aa565b91506130ef565b60008167ffffffffffffffff81111561313557613134614631565b5b6040519080825280601f01601f1916602001820160405280156131675781602001600182028036833780820191505090505b5090505b600085146131f4576001826131809190614335565b9150600a8561318f9190614544565b603061319b919061421d565b60f81b8183815181106131b1576131b0614602565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131ed91906142aa565b945061316b565b8093505050505b919050565b50505050565b50505050565b613219838383600161321e565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561328b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132c6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132d36000868387613200565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561349d575061349c8773ffffffffffffffffffffffffffffffffffffffff16612e8a565b5b15613563575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135126000888480600101955088612ead565b613548576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156134a357826000541461355e57600080fd5b6135cf565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613564575b8160008190555050506135e56000868387613206565b5050505050565b8280546135f89061446e565b90600052602060002090601f01602090048101928261361a5760008555613661565b82601f1061363357805160ff1916838001178555613661565b82800160010185558215613661579182015b82811115613660578251825591602001919060010190613645565b5b50905061366e91906136b5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136ce5760008160009055506001016136b6565b5090565b60006136e56136e08461412b565b614106565b9050828152602081018484840111156137015761370061466f565b5b61370c84828561442c565b509392505050565b60006137276137228461415c565b614106565b9050828152602081018484840111156137435761374261466f565b5b61374e84828561442c565b509392505050565b60008135905061376581614875565b92915050565b60008083601f84011261378157613780614665565b5b8235905067ffffffffffffffff81111561379e5761379d614660565b5b6020830191508360208202830111156137ba576137b961466a565b5b9250929050565b6000813590506137d08161488c565b92915050565b6000813590506137e5816148a3565b92915050565b6000815190506137fa816148a3565b92915050565b600082601f83011261381557613814614665565b5b81356138258482602086016136d2565b91505092915050565b600082601f83011261384357613842614665565b5b8135613853848260208601613714565b91505092915050565b60008135905061386b816148ba565b92915050565b600081359050613880816148d1565b92915050565b600081359050613895816148e8565b92915050565b6000602082840312156138b1576138b0614679565b5b60006138bf84828501613756565b91505092915050565b600080604083850312156138df576138de614679565b5b60006138ed85828601613756565b92505060206138fe85828601613756565b9150509250929050565b60008060006060848603121561392157613920614679565b5b600061392f86828701613756565b935050602061394086828701613756565b925050604061395186828701613871565b9150509250925092565b6000806000806080858703121561397557613974614679565b5b600061398387828801613756565b945050602061399487828801613756565b93505060406139a587828801613871565b925050606085013567ffffffffffffffff8111156139c6576139c5614674565b5b6139d287828801613800565b91505092959194509250565b600080604083850312156139f5576139f4614679565b5b6000613a0385828601613756565b9250506020613a14858286016137c1565b9150509250929050565b60008060408385031215613a3557613a34614679565b5b6000613a4385828601613756565b9250506020613a5485828601613871565b9150509250929050565b60008060208385031215613a7557613a74614679565b5b600083013567ffffffffffffffff811115613a9357613a92614674565b5b613a9f8582860161376b565b92509250509250929050565b600060208284031215613ac157613ac0614679565b5b6000613acf848285016137d6565b91505092915050565b600060208284031215613aee57613aed614679565b5b6000613afc848285016137eb565b91505092915050565b600060208284031215613b1b57613b1a614679565b5b600082013567ffffffffffffffff811115613b3957613b38614674565b5b613b458482850161382e565b91505092915050565b600060208284031215613b6457613b63614679565b5b6000613b728482850161385c565b91505092915050565b600060208284031215613b9157613b90614679565b5b6000613b9f84828501613871565b91505092915050565b600060208284031215613bbe57613bbd614679565b5b6000613bcc84828501613886565b91505092915050565b613bde8161439d565b82525050565b613bed816143af565b82525050565b6000613bfe826141a2565b613c0881856141b8565b9350613c1881856020860161443b565b613c218161467e565b840191505092915050565b6000613c37826141ad565b613c4181856141c9565b9350613c5181856020860161443b565b613c5a8161467e565b840191505092915050565b6000613c70826141ad565b613c7a81856141da565b9350613c8a81856020860161443b565b80840191505092915050565b60008154613ca38161446e565b613cad81866141da565b94506001821660008114613cc85760018114613cd957613d0c565b60ff19831686528186019350613d0c565b613ce28561418d565b60005b83811015613d0457815481890152600182019150602081019050613ce5565b838801955050505b50505092915050565b6000613d226026836141c9565b9150613d2d8261468f565b604082019050919050565b6000613d45601a836141c9565b9150613d50826146de565b602082019050919050565b6000613d686017836141c9565b9150613d7382614707565b602082019050919050565b6000613d8b6020836141c9565b9150613d9682614730565b602082019050919050565b6000613dae6017836141c9565b9150613db982614759565b602082019050919050565b6000613dd1602f836141c9565b9150613ddc82614782565b604082019050919050565b6000613df46013836141c9565b9150613dff826147d1565b602082019050919050565b6000613e17601c836141c9565b9150613e22826147fa565b602082019050919050565b6000613e3a601f836141c9565b9150613e4582614823565b602082019050919050565b6000613e5d6013836141c9565b9150613e688261484c565b602082019050919050565b613e7c816143e7565b82525050565b613e8b81614415565b82525050565b613e9a8161441f565b82525050565b6000613eac8286613c65565b9150613eb88285613c65565b9150613ec48284613c96565b9150819050949350505050565b6000602082019050613ee66000830184613bd5565b92915050565b6000608082019050613f016000830187613bd5565b613f0e6020830186613bd5565b613f1b6040830185613e82565b8181036060830152613f2d8184613bf3565b905095945050505050565b6000602082019050613f4d6000830184613be4565b92915050565b60006020820190508181036000830152613f6d8184613c2c565b905092915050565b60006020820190508181036000830152613f8e81613d15565b9050919050565b60006020820190508181036000830152613fae81613d38565b9050919050565b60006020820190508181036000830152613fce81613d5b565b9050919050565b60006020820190508181036000830152613fee81613d7e565b9050919050565b6000602082019050818103600083015261400e81613da1565b9050919050565b6000602082019050818103600083015261402e81613dc4565b9050919050565b6000602082019050818103600083015261404e81613de7565b9050919050565b6000602082019050818103600083015261406e81613e0a565b9050919050565b6000602082019050818103600083015261408e81613e2d565b9050919050565b600060208201905081810360008301526140ae81613e50565b9050919050565b60006020820190506140ca6000830184613e73565b92915050565b60006020820190506140e56000830184613e82565b92915050565b60006020820190506141006000830184613e91565b92915050565b6000614110614121565b905061411c82826144a0565b919050565b6000604051905090565b600067ffffffffffffffff82111561414657614145614631565b5b61414f8261467e565b9050602081019050919050565b600067ffffffffffffffff82111561417757614176614631565b5b6141808261467e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f0826143e7565b91506141fb836143e7565b92508261ffff0382111561421257614211614575565b5b828201905092915050565b600061422882614415565b915061423383614415565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561426857614267614575565b5b828201905092915050565b600061427e8261441f565b91506142898361441f565b92508260ff0382111561429f5761429e614575565b5b828201905092915050565b60006142b582614415565b91506142c083614415565b9250826142d0576142cf6145a4565b5b828204905092915050565b60006142e682614415565b91506142f183614415565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561432a57614329614575565b5b828202905092915050565b600061434082614415565b915061434b83614415565b92508282101561435e5761435d614575565b5b828203905092915050565b60006143748261441f565b915061437f8361441f565b92508282101561439257614391614575565b5b828203905092915050565b60006143a8826143f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561445957808201518184015260208101905061443e565b83811115614468576000848401525b50505050565b6000600282049050600182168061448657607f821691505b6020821081141561449a576144996145d3565b5b50919050565b6144a98261467e565b810181811067ffffffffffffffff821117156144c8576144c7614631565b5b80604052505050565b60006144dc82614415565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561450f5761450e614575565b5b600182019050919050565b60006145258261441f565b915060ff82141561453957614538614575565b5b600182019050919050565b600061454f82614415565b915061455a83614415565b92508261456a576145696145a4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f45786365656473206d617820206c696d69742020706572206164647265737300600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61487e8161439d565b811461488957600080fd5b50565b614895816143af565b81146148a057600080fd5b50565b6148ac816143bb565b81146148b757600080fd5b50565b6148c3816143e7565b81146148ce57600080fd5b50565b6148da81614415565b81146148e557600080fd5b50565b6148f18161441f565b81146148fc57600080fd5b5056fea26469706673582212201316e876e05448878e9d0f01e2b2660a279233dce45c824a794ae7e2a6b362c764736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102675760003560e01c806370a0823111610144578063a475b5dd116100b6578063d5abeb011161007a578063d5abeb01146108ae578063e94053c7146108d9578063e985e9c514610916578063eef440af14610953578063f2fde38b1461097e578063f8bf5172146109a757610267565b8063a475b5dd146107cb578063aa062290146107f6578063b88d4fde1461081f578063c87b56dd14610848578063d1d192131461088557610267565b80638e07484c116101085780638e07484c146106cf5780638f65fe0a146106f85780639257e0441461072157806394354fd01461074c57806395d89b4114610777578063a22cb465146107a257610267565b806370a08231146105fc578063715018a6146106395780637ec4a659146106505780637f6e9093146106795780638da5cb5b146106a457610267565b80633af32abf116101dd5780634d9c1848116101a15780634d9c1848146104f657806359bf5dbb1461051f5780635c975abb1461055c57806360e85cde146105875780636352211e146105a35780636ecd2306146105e057610267565b80633af32abf146104395780633bd64968146104765780633ccfd60b1461048d57806342842e0e146104a457806344a0d68a146104cd57610267565b8063095ea7b31161022f578063095ea7b3146103515780631067fcc71461037a57806313faede6146103a357806318160ddd146103ce57806323b872dd146103f957806337a66d851461042257610267565b806301ffc9a71461026c57806306421c2f146102a957806306fdde03146102d2578063081812fc146102fd578063093cfa631461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e9190613aab565b6109d2565b6040516102a09190613f38565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613b4e565b610ab4565b005b3480156102de57600080fd5b506102e7610b50565b6040516102f49190613f53565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613b7b565b610be2565b6040516103319190613ed1565b60405180910390f35b34801561034657600080fd5b5061034f610c5e565b005b34801561035d57600080fd5b5061037860048036038101906103739190613a1e565b610d06565b005b34801561038657600080fd5b506103a1600480360381019061039c9190613b05565b610e11565b005b3480156103af57600080fd5b506103b8610ea7565b6040516103c591906140d0565b60405180910390f35b3480156103da57600080fd5b506103e3610ead565b6040516103f091906140d0565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b9190613908565b610ec4565b005b34801561042e57600080fd5b50610437610ed4565b005b34801561044557600080fd5b50610460600480360381019061045b919061389b565b610f97565b60405161046d9190613f38565b60405180910390f35b34801561048257600080fd5b5061048b610fb7565b005b34801561049957600080fd5b506104a261105f565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613908565b61112a565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613b7b565b61114a565b005b34801561050257600080fd5b5061051d60048036038101906105189190613ba8565b6111d0565b005b34801561052b57600080fd5b506105466004803603810190610541919061389b565b61126e565b60405161055391906140eb565b60405180910390f35b34801561056857600080fd5b5061057161128e565b60405161057e9190613f38565b60405180910390f35b6105a1600480360381019061059c9190613ba8565b6112a1565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190613b7b565b6115c1565b6040516105d79190613ed1565b60405180910390f35b6105fa60048036038101906105f59190613ba8565b6115d7565b005b34801561060857600080fd5b50610623600480360381019061061e919061389b565b6118e1565b60405161063091906140d0565b60405180910390f35b34801561064557600080fd5b5061064e6119b1565b005b34801561065c57600080fd5b5061067760048036038101906106729190613b05565b611a39565b005b34801561068557600080fd5b5061068e611acf565b60405161069b9190613f38565b60405180910390f35b3480156106b057600080fd5b506106b9611ae2565b6040516106c69190613ed1565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190613a5e565b611b0c565b005b34801561070457600080fd5b5061071f600480360381019061071a9190613a5e565b611c33565b005b34801561072d57600080fd5b50610736611d5a565b60405161074391906140d0565b60405180910390f35b34801561075857600080fd5b50610761611d60565b60405161076e91906140eb565b60405180910390f35b34801561078357600080fd5b5061078c611d73565b6040516107999190613f53565b60405180910390f35b3480156107ae57600080fd5b506107c960048036038101906107c491906139de565b611e05565b005b3480156107d757600080fd5b506107e0611f7d565b6040516107ed9190613f38565b60405180910390f35b34801561080257600080fd5b5061081d60048036038101906108189190613ba8565b611f90565b005b34801561082b57600080fd5b506108466004803603810190610841919061395b565b61202a565b005b34801561085457600080fd5b5061086f600480360381019061086a9190613b7b565b6120a6565b60405161087c9190613f53565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613b7b565b6121ff565b005b3480156108ba57600080fd5b506108c3612289565b6040516108d091906140b5565b60405180910390f35b3480156108e557600080fd5b5061090060048036038101906108fb919061389b565b61229d565b60405161090d91906140eb565b60405180910390f35b34801561092257600080fd5b5061093d600480360381019061093891906138c8565b6122bd565b60405161094a9190613f38565b60405180910390f35b34801561095f57600080fd5b50610968612351565b6040516109759190613f53565b60405180910390f35b34801561098a57600080fd5b506109a560048036038101906109a0919061389b565b6123df565b005b3480156109b357600080fd5b506109bc6124d7565b6040516109c991906140eb565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a9d57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610aad5750610aac826124ea565b5b9050919050565b610abc612554565b73ffffffffffffffffffffffffffffffffffffffff16610ada611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2790613fd5565b60405180910390fd5b80600e60006101000a81548161ffff021916908361ffff16021790555050565b606060028054610b5f9061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054610b8b9061446e565b8015610bd85780601f10610bad57610100808354040283529160200191610bd8565b820191906000526020600020905b815481529060010190602001808311610bbb57829003601f168201915b5050505050905090565b6000610bed8261255c565b610c23576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c66612554565b73ffffffffffffffffffffffffffffffffffffffff16610c84611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd190613fd5565b60405180910390fd5b600e60049054906101000a900460ff1615600e60046101000a81548160ff021916908315150217905550565b6000610d11826115c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d79576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d98612554565b73ffffffffffffffffffffffffffffffffffffffff1614158015610dca5750610dc881610dc3612554565b6122bd565b155b15610e01576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610e0c8383836125aa565b505050565b610e19612554565b73ffffffffffffffffffffffffffffffffffffffff16610e37611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490613fd5565b60405180910390fd5b80600b9080519060200190610ea39291906135ec565b5050565b600c5481565b6000610eb761265c565b6001546000540303905090565b610ecf838383612661565b505050565b610edc612554565b73ffffffffffffffffffffffffffffffffffffffff16610efa611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614610f50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4790613fd5565b60405180910390fd5b600e60059054906101000a900460ff1615600e60056101000a81548160ff0219169083151502179055506001600e60046101000a81548160ff021916908315150217905550565b60116020528060005260406000206000915054906101000a900460ff1681565b610fbf612554565b73ffffffffffffffffffffffffffffffffffffffff16610fdd611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102a90613fd5565b60405180910390fd5b600e60069054906101000a900460ff1615600e60066101000a81548160ff021916908315150217905550565b611067612554565b73ffffffffffffffffffffffffffffffffffffffff16611085611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290613fd5565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611126573d6000803e3d6000fd5b5050565b6111458383836040518060200160405280600081525061202a565b505050565b611152612554565b73ffffffffffffffffffffffffffffffffffffffff16611170611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613fd5565b60405180910390fd5b80600c8190555050565b6111d8612554565b73ffffffffffffffffffffffffffffffffffffffff166111f6611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461124c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124390613fd5565b60405180910390fd5b80600e60036101000a81548160ff021916908360ff1602179055506000905050565b600f6020528060005260406000206000915054906101000a900460ff1681565b600e60059054906101000a900460ff1681565b6000600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661137e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137590613fb5565b60405180910390fd5b600e60029054906101000a900460ff1660ff16828261139d9190614273565b60ff1611156113e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d890614075565b60405180910390fd5b600e60049054906101000a900460ff1615611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613f95565b60405180910390fd5b600e60039054906101000a900460ff1660ff168160ff16106114a5578160ff16600d5461145e91906142db565b3410156114a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149790614095565b60405180910390fd5b611545565b600081836114b39190614273565b9050600e60039054906101000a900460ff1660ff168160ff16111561154357600e60039054906101000a900460ff16816114ed9190614369565b90508060ff16600d5461150091906142db565b341015611542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153990614095565b60405180910390fd5b5b505b611552338360ff16612b17565b818161155e9190614273565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555060009150600090505050565b60006115cc82612b35565b600001519050919050565b60006115e1610ead565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600e60009054906101000a900461ffff1661ffff168360ff168361165891906141e5565b61ffff16111561169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169490614035565b60405180910390fd5b600e60029054906101000a900460ff1660ff1681846116bc9190614273565b60ff161115611700576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f790614055565b60405180910390fd5b600e60059054906101000a900460ff1615611750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174790613ff5565b60405180910390fd5b600e60039054906101000a900460ff1660ff168160ff16106117c4578260ff16600c5461177d91906142db565b3410156117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690614095565b60405180910390fd5b611864565b600081846117d29190614273565b9050600e60039054906101000a900460ff1660ff168160ff16111561186257600e60039054906101000a900460ff168161180c9190614369565b90508060ff16600c5461181f91906142db565b341015611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185890614095565b60405180910390fd5b5b505b611871338460ff16612b17565b808361187d9190614273565b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506000915060009250505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611949576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119b9612554565b73ffffffffffffffffffffffffffffffffffffffff166119d7611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2490613fd5565b60405180910390fd5b611a376000612dc4565b565b611a41612554565b73ffffffffffffffffffffffffffffffffffffffff16611a5f611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611ab5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aac90613fd5565b60405180910390fd5b8060099080519060200190611acb9291906135ec565b5050565b600e60049054906101000a900460ff1681565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b14612554565b73ffffffffffffffffffffffffffffffffffffffff16611b32611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613fd5565b60405180910390fd5b60005b828290508160ff161015611c2e5760016011600085858560ff16818110611bb557611bb4614602565b5b9050602002016020810190611bca919061389b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611c269061451a565b915050611b8b565b505050565b611c3b612554565b73ffffffffffffffffffffffffffffffffffffffff16611c59611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690613fd5565b60405180910390fd5b60005b828290508160ff161015611d555760006011600085858560ff16818110611cdc57611cdb614602565b5b9050602002016020810190611cf1919061389b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4d9061451a565b915050611cb2565b505050565b600d5481565b600e60029054906101000a900460ff1681565b606060038054611d829061446e565b80601f0160208091040260200160405190810160405280929190818152602001828054611dae9061446e565b8015611dfb5780601f10611dd057610100808354040283529160200191611dfb565b820191906000526020600020905b815481529060010190602001808311611dde57829003601f168201915b5050505050905090565b611e0d612554565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e72576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611e7f612554565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611f2c612554565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611f719190613f38565b60405180910390a35050565b600e60069054906101000a900460ff1681565b611f98612554565b73ffffffffffffffffffffffffffffffffffffffff16611fb6611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461200c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200390613fd5565b60405180910390fd5b80600e60026101000a81548160ff021916908360ff16021790555050565b612035848484612661565b6120548373ffffffffffffffffffffffffffffffffffffffff16612e8a565b8015612069575061206784848484612ead565b155b156120a0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60606120b18261255c565b6120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790614015565b60405180910390fd5b60001515600e60069054906101000a900460ff161515141561219e57600b80546121199061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546121459061446e565b80156121925780601f1061216757610100808354040283529160200191612192565b820191906000526020600020905b81548152906001019060200180831161217557829003601f168201915b505050505090506121fa565b60006121a861300d565b905060008151116121c857604051806020016040528060008152506121f6565b806121d28461309f565b600a6040516020016121e693929190613ea0565b6040516020818303038152906040525b9150505b919050565b612207612554565b73ffffffffffffffffffffffffffffffffffffffff16612225611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461227b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227290613fd5565b60405180910390fd5b80600d819055506000905050565b600e60009054906101000a900461ffff1681565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b805461235e9061446e565b80601f016020809104026020016040519081016040528092919081815260200182805461238a9061446e565b80156123d75780601f106123ac576101008083540402835291602001916123d7565b820191906000526020600020905b8154815290600101906020018083116123ba57829003601f168201915b505050505081565b6123e7612554565b73ffffffffffffffffffffffffffffffffffffffff16612405611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461245b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245290613fd5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c290613f75565b60405180910390fd5b6124d481612dc4565b50565b600e60039054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008161256761265c565b11158015612576575060005482105b80156125a3575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061266c82612b35565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146126d7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff166126f8612554565b73ffffffffffffffffffffffffffffffffffffffff161480612727575061272685612721612554565b6122bd565b5b8061276c5750612735612554565b73ffffffffffffffffffffffffffffffffffffffff1661275484610be2565b73ffffffffffffffffffffffffffffffffffffffff16145b9050806127a5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561280c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128198585856001613200565b612825600084876125aa565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612aa5576000548214612aa457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b108585856001613206565b5050505050565b612b3182826040518060200160405280600081525061320c565b5050565b612b3d613672565b600082905080612b4b61265c565b11158015612b5a575060005481105b15612d8d576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151612d8b57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612c6f578092505050612dbf565b5b600115612d8a57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612d85578092505050612dbf565b612c70565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed3612554565b8786866040518563ffffffff1660e01b8152600401612ef59493929190613eec565b602060405180830381600087803b158015612f0f57600080fd5b505af1925050508015612f4057506040513d601f19601f82011682018060405250810190612f3d9190613ad8565b60015b612fba573d8060008114612f70576040519150601f19603f3d011682016040523d82523d6000602084013e612f75565b606091505b50600081511415612fb2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606009805461301c9061446e565b80601f01602080910402602001604051908101604052809291908181526020018280546130489061446e565b80156130955780601f1061306a57610100808354040283529160200191613095565b820191906000526020600020905b81548152906001019060200180831161307857829003601f168201915b5050505050905090565b606060008214156130e7576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506131fb565b600082905060005b60008214613119578080613102906144d1565b915050600a8261311291906142aa565b91506130ef565b60008167ffffffffffffffff81111561313557613134614631565b5b6040519080825280601f01601f1916602001820160405280156131675781602001600182028036833780820191505090505b5090505b600085146131f4576001826131809190614335565b9150600a8561318f9190614544565b603061319b919061421d565b60f81b8183815181106131b1576131b0614602565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856131ed91906142aa565b945061316b565b8093505050505b919050565b50505050565b50505050565b613219838383600161321e565b505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141561328b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156132c6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6132d36000868387613200565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060008190506000858201905083801561349d575061349c8773ffffffffffffffffffffffffffffffffffffffff16612e8a565b5b15613563575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46135126000888480600101955088612ead565b613548576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808214156134a357826000541461355e57600080fd5b6135cf565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415613564575b8160008190555050506135e56000868387613206565b5050505050565b8280546135f89061446e565b90600052602060002090601f01602090048101928261361a5760008555613661565b82601f1061363357805160ff1916838001178555613661565b82800160010185558215613661579182015b82811115613660578251825591602001919060010190613645565b5b50905061366e91906136b5565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b808211156136ce5760008160009055506001016136b6565b5090565b60006136e56136e08461412b565b614106565b9050828152602081018484840111156137015761370061466f565b5b61370c84828561442c565b509392505050565b60006137276137228461415c565b614106565b9050828152602081018484840111156137435761374261466f565b5b61374e84828561442c565b509392505050565b60008135905061376581614875565b92915050565b60008083601f84011261378157613780614665565b5b8235905067ffffffffffffffff81111561379e5761379d614660565b5b6020830191508360208202830111156137ba576137b961466a565b5b9250929050565b6000813590506137d08161488c565b92915050565b6000813590506137e5816148a3565b92915050565b6000815190506137fa816148a3565b92915050565b600082601f83011261381557613814614665565b5b81356138258482602086016136d2565b91505092915050565b600082601f83011261384357613842614665565b5b8135613853848260208601613714565b91505092915050565b60008135905061386b816148ba565b92915050565b600081359050613880816148d1565b92915050565b600081359050613895816148e8565b92915050565b6000602082840312156138b1576138b0614679565b5b60006138bf84828501613756565b91505092915050565b600080604083850312156138df576138de614679565b5b60006138ed85828601613756565b92505060206138fe85828601613756565b9150509250929050565b60008060006060848603121561392157613920614679565b5b600061392f86828701613756565b935050602061394086828701613756565b925050604061395186828701613871565b9150509250925092565b6000806000806080858703121561397557613974614679565b5b600061398387828801613756565b945050602061399487828801613756565b93505060406139a587828801613871565b925050606085013567ffffffffffffffff8111156139c6576139c5614674565b5b6139d287828801613800565b91505092959194509250565b600080604083850312156139f5576139f4614679565b5b6000613a0385828601613756565b9250506020613a14858286016137c1565b9150509250929050565b60008060408385031215613a3557613a34614679565b5b6000613a4385828601613756565b9250506020613a5485828601613871565b9150509250929050565b60008060208385031215613a7557613a74614679565b5b600083013567ffffffffffffffff811115613a9357613a92614674565b5b613a9f8582860161376b565b92509250509250929050565b600060208284031215613ac157613ac0614679565b5b6000613acf848285016137d6565b91505092915050565b600060208284031215613aee57613aed614679565b5b6000613afc848285016137eb565b91505092915050565b600060208284031215613b1b57613b1a614679565b5b600082013567ffffffffffffffff811115613b3957613b38614674565b5b613b458482850161382e565b91505092915050565b600060208284031215613b6457613b63614679565b5b6000613b728482850161385c565b91505092915050565b600060208284031215613b9157613b90614679565b5b6000613b9f84828501613871565b91505092915050565b600060208284031215613bbe57613bbd614679565b5b6000613bcc84828501613886565b91505092915050565b613bde8161439d565b82525050565b613bed816143af565b82525050565b6000613bfe826141a2565b613c0881856141b8565b9350613c1881856020860161443b565b613c218161467e565b840191505092915050565b6000613c37826141ad565b613c4181856141c9565b9350613c5181856020860161443b565b613c5a8161467e565b840191505092915050565b6000613c70826141ad565b613c7a81856141da565b9350613c8a81856020860161443b565b80840191505092915050565b60008154613ca38161446e565b613cad81866141da565b94506001821660008114613cc85760018114613cd957613d0c565b60ff19831686528186019350613d0c565b613ce28561418d565b60005b83811015613d0457815481890152600182019150602081019050613ce5565b838801955050505b50505092915050565b6000613d226026836141c9565b9150613d2d8261468f565b604082019050919050565b6000613d45601a836141c9565b9150613d50826146de565b602082019050919050565b6000613d686017836141c9565b9150613d7382614707565b602082019050919050565b6000613d8b6020836141c9565b9150613d9682614730565b602082019050919050565b6000613dae6017836141c9565b9150613db982614759565b602082019050919050565b6000613dd1602f836141c9565b9150613ddc82614782565b604082019050919050565b6000613df46013836141c9565b9150613dff826147d1565b602082019050919050565b6000613e17601c836141c9565b9150613e22826147fa565b602082019050919050565b6000613e3a601f836141c9565b9150613e4582614823565b602082019050919050565b6000613e5d6013836141c9565b9150613e688261484c565b602082019050919050565b613e7c816143e7565b82525050565b613e8b81614415565b82525050565b613e9a8161441f565b82525050565b6000613eac8286613c65565b9150613eb88285613c65565b9150613ec48284613c96565b9150819050949350505050565b6000602082019050613ee66000830184613bd5565b92915050565b6000608082019050613f016000830187613bd5565b613f0e6020830186613bd5565b613f1b6040830185613e82565b8181036060830152613f2d8184613bf3565b905095945050505050565b6000602082019050613f4d6000830184613be4565b92915050565b60006020820190508181036000830152613f6d8184613c2c565b905092915050565b60006020820190508181036000830152613f8e81613d15565b9050919050565b60006020820190508181036000830152613fae81613d38565b9050919050565b60006020820190508181036000830152613fce81613d5b565b9050919050565b60006020820190508181036000830152613fee81613d7e565b9050919050565b6000602082019050818103600083015261400e81613da1565b9050919050565b6000602082019050818103600083015261402e81613dc4565b9050919050565b6000602082019050818103600083015261404e81613de7565b9050919050565b6000602082019050818103600083015261406e81613e0a565b9050919050565b6000602082019050818103600083015261408e81613e2d565b9050919050565b600060208201905081810360008301526140ae81613e50565b9050919050565b60006020820190506140ca6000830184613e73565b92915050565b60006020820190506140e56000830184613e82565b92915050565b60006020820190506141006000830184613e91565b92915050565b6000614110614121565b905061411c82826144a0565b919050565b6000604051905090565b600067ffffffffffffffff82111561414657614145614631565b5b61414f8261467e565b9050602081019050919050565b600067ffffffffffffffff82111561417757614176614631565b5b6141808261467e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006141f0826143e7565b91506141fb836143e7565b92508261ffff0382111561421257614211614575565b5b828201905092915050565b600061422882614415565b915061423383614415565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561426857614267614575565b5b828201905092915050565b600061427e8261441f565b91506142898361441f565b92508260ff0382111561429f5761429e614575565b5b828201905092915050565b60006142b582614415565b91506142c083614415565b9250826142d0576142cf6145a4565b5b828204905092915050565b60006142e682614415565b91506142f183614415565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561432a57614329614575565b5b828202905092915050565b600061434082614415565b915061434b83614415565b92508282101561435e5761435d614575565b5b828203905092915050565b60006143748261441f565b915061437f8361441f565b92508282101561439257614391614575565b5b828203905092915050565b60006143a8826143f5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561445957808201518184015260208101905061443e565b83811115614468576000848401525b50505050565b6000600282049050600182168061448657607f821691505b6020821081141561449a576144996145d3565b5b50919050565b6144a98261467e565b810181811067ffffffffffffffff821117156144c8576144c7614631565b5b80604052505050565b60006144dc82614415565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561450f5761450e614575565b5b600182019050919050565b60006145258261441f565b915060ff82141561453957614538614575565b5b600182019050919050565b600061454f82614415565b915061455a83614415565b92508261456a576145696145a4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74696e67206973206f76657221000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c792e00000000000000000000000000600082015250565b7f45786365656473206d617820706572207472616e73616374696f6e2e00000000600082015250565b7f45786365656473206d617820206c696d69742020706572206164647265737300600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61487e8161439d565b811461488957600080fd5b50565b614895816143af565b81146148a057600080fd5b50565b6148ac816143bb565b81146148b757600080fd5b50565b6148c3816143e7565b81146148ce57600080fd5b50565b6148da81614415565b81146148e557600080fd5b50565b6148f18161441f565b81146148fc57600080fd5b5056fea26469706673582212201316e876e05448878e9d0f01e2b2660a279233dce45c824a794ae7e2a6b362c764736f6c63430008070033

Deployed Bytecode Sourcemap

50149:4968:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30473:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51918:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33586:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35089:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52528:75;;;;;;;;;;;;;:::i;:::-;;34652:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54383:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50333:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29722:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35954:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54493:91;;;;;;;;;;;;;:::i;:::-;;50791:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54671:70;;;;;;;;;;;;;:::i;:::-;;54865:144;;;;;;;;;;;;;:::i;:::-;;36195:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54590:76;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52722:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50678:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50618:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53284:986;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33394:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50929:976;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30842:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49295:103;;;;;;;;;;;;;:::i;:::-;;54276:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50586:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48643:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52868:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53076:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50371:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50444:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33755:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35365:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50648:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54747:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36451:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52030:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52607:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50409:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50733:53;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35723:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50293:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49553:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50485:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30473:305;30575:4;30627:25;30612:40;;;:11;:40;;;;:105;;;;30684:33;30669:48;;;:11;:48;;;;30612:105;:158;;;;30734:36;30758:11;30734:23;:36::i;:::-;30612:158;30592:178;;30473:305;;;:::o;51918:97::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;51999:10:::1;51987:9;;:22;;;;;;;;;;;;;;;;;;51918:97:::0;:::o;33586:100::-;33640:13;33673:5;33666:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33586:100;:::o;35089:204::-;35157:7;35182:16;35190:7;35182;:16::i;:::-;35177:64;;35207:34;;;;;;;;;;;;;;35177:64;35261:15;:24;35277:7;35261:24;;;;;;;;;;;;;;;;;;;;;35254:31;;35089:204;;;:::o;52528:75::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52589:8:::1;;;;;;;;;;;52588:9;52577:8;;:20;;;;;;;;;;;;;;;;;;52528:75::o:0;34652:371::-;34725:13;34741:24;34757:7;34741:15;:24::i;:::-;34725:40;;34786:5;34780:11;;:2;:11;;;34776:48;;;34800:24;;;;;;;;;;;;;;34776:48;34857:5;34841:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34867:37;34884:5;34891:12;:10;:12::i;:::-;34867:16;:37::i;:::-;34866:38;34841:63;34837:138;;;34928:35;;;;;;;;;;;;;;34837:138;34987:28;34996:2;35000:7;35009:5;34987:8;:28::i;:::-;34714:309;34652:371;;:::o;54383:102::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54469:10:::1;54457:9;:22;;;;;;;;;;;;:::i;:::-;;54383:102:::0;:::o;50333:33::-;;;;:::o;29722:303::-;29766:7;29991:15;:13;:15::i;:::-;29976:12;;29960:13;;:28;:46;29953:53;;29722:303;:::o;35954:170::-;36088:28;36098:4;36104:2;36108:7;36088:9;:28::i;:::-;35954:170;;;:::o;54493:91::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54550:6:::1;;;;;;;;;;;54549:7;54540:6;;:16;;;;;;;;;;;;;;;;;;54574:4;54563:8;;:15;;;;;;;;;;;;;;;;;;54493:91::o:0;50791:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;54671:70::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54730:6:::1;;;;;;;;;;;54729:7;54720:6;;:16;;;;;;;;;;;;;;;;;;54671:70::o:0;54865:144::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54909:13:::1;54925:21;54909:37;;54962:10;54954:28;;:39;54983:8;54954:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;54904:105;54865:144::o:0;36195:185::-;36333:39;36350:4;36356:2;36360:7;36333:39;;;;;;;;;;;;:16;:39::i;:::-;36195:185;;;:::o;54590:76::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54653:5:::1;54646:4;:12;;;;54590:76:::0;:::o;52722:134::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52825:6:::1;52796:26;;:35;;;;;;;;;;;;;;;;;;52837:13;;;52722:134:::0;:::o;50678:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;50618:25::-;;;;;;;;;;;;;:::o;53284:986::-;53370:9;53382:15;:27;53398:10;53382:27;;;;;;;;;;;;;;;;;;;;;;;;;53370:39;;53427:13;:25;53441:10;53427:25;;;;;;;;;;;;;;;;;;;;;;;;;53419:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;53523:18;;;;;;;;;;;53502:39;;53508:11;53502:3;:17;;;;:::i;:::-;:39;;;;53493:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;53605:8;;;;;;;;;;;53604:9;53596:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;53666:26;;;;;;;;;;;53659:33;;:3;:33;;;53656:435;;53743:11;53727:27;;:13;;:27;;;;:::i;:::-;53714:9;:40;;53706:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;53656:435;;;53809:16;53842:3;53828:11;:17;;;;:::i;:::-;53809:36;;53872:26;;;;;;;;;;;53859:39;;:10;:39;;;53856:208;;;53945:26;;;;;;;;;;;53932:10;:39;;;;:::i;:::-;53919:52;;54019:10;54003:26;;:13;;:26;;;;:::i;:::-;53990:9;:39;;53982:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;53856:208;53797:294;53656:435;54112:35;54122:10;54135:11;54112:35;;:9;:35::i;:::-;54191:11;54185:3;:17;;;;:::i;:::-;54156:15;:27;54172:10;54156:27;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;54218:18;;;54246:10;;;53343:927;53284:986;:::o;33394:125::-;33458:7;33485:21;33498:7;33485:12;:21::i;:::-;:26;;;33478:33;;33394:125;;;:::o;50929:976::-;50988:18;51016:13;:11;:13::i;:::-;50988:42;;51038:9;51050:19;:31;51070:10;51050:31;;;;;;;;;;;;;;;;;;;;;;;;;51038:43;;51125:9;;;;;;;;;;;51096:38;;51110:11;51096:25;;:11;:25;;;;:::i;:::-;:38;;;;51088:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51194:18;;;;;;;;;;;51173:39;;51187:3;51173:11;:17;;;;:::i;:::-;:39;;;;51165:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51263:6;;;;;;;;;;;51262:7;51254:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;51322:26;;;;;;;;;;;51315:33;;:3;:33;;;51312:417;;51390:11;51383:18;;:4;;:18;;;;:::i;:::-;51370:9;:31;;51362:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;51312:417;;;51456:16;51489:3;51475:11;:17;;;;:::i;:::-;51456:36;;51519:26;;;;;;;;;;;51506:39;;:10;:39;;;51503:199;;;51592:26;;;;;;;;;;;51579:10;:39;;;;:::i;:::-;51566:52;;51657:10;51650:17;;:4;;:17;;;;:::i;:::-;51637:9;:30;;51629:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;51503:199;51444:285;51312:417;51745:35;51755:10;51768:11;51745:35;;:9;:35::i;:::-;51837:3;51823:11;:17;;;;:::i;:::-;51789:19;:31;51809:10;51789:31;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;51855:18;;;51881;;;50980:925;;50929:976;:::o;30842:206::-;30906:7;30947:1;30930:19;;:5;:19;;;30926:60;;;30958:28;;;;;;;;;;;;;;30926:60;31012:12;:19;31025:5;31012:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;31004:36;;30997:43;;30842:206;;;:::o;49295:103::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49360:30:::1;49387:1;49360:18;:30::i;:::-;49295:103::o:0;54276:102::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54362:10:::1;54350:9;:22;;;;;;;;;;;;:::i;:::-;;54276:102:::0;:::o;50586:27::-;;;;;;;;;;;;;:::o;48643:87::-;48689:7;48716:6;;;;;;;;;;;48709:13;;48643:87;:::o;52868:200::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52961:7:::1;52957:101;52978:7;;:14;;52974:1;:18;;;52957:101;;;53042:4;53014:13;:25;53028:7;;53036:1;53028:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53014:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;52994:3;;;;;:::i;:::-;;;;52957:101;;;;52868:200:::0;;:::o;53076:204::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;53174:7:::1;53170:103;53191:7;;:14;;53187:1;:18;;;53170:103;;;53256:5;53228:13;:25;53242:7;;53250:1;53242:10;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53228:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;53207:3;;;;;:::i;:::-;;;;53170:103;;;;53076:204:::0;;:::o;50371:32::-;;;;:::o;50444:36::-;;;;;;;;;;;;;:::o;33755:104::-;33811:13;33844:7;33837:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33755:104;:::o;35365:287::-;35476:12;:10;:12::i;:::-;35464:24;;:8;:24;;;35460:54;;;35497:17;;;;;;;;;;;;;;35460:54;35572:8;35527:18;:32;35546:12;:10;:12::i;:::-;35527:32;;;;;;;;;;;;;;;:42;35560:8;35527:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;35625:8;35596:48;;35611:12;:10;:12::i;:::-;35596:48;;;35635:8;35596:48;;;;;;:::i;:::-;;;;;;;;35365:287;;:::o;50648:25::-;;;;;;;;;;;;;:::o;54747:107::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;54840:6:::1;54819:18;;:27;;;;;;;;;;;;;;;;;;54747:107:::0;:::o;36451:369::-;36618:28;36628:4;36634:2;36638:7;36618:9;:28::i;:::-;36661:15;:2;:13;;;:15::i;:::-;:76;;;;;36681:56;36712:4;36718:2;36722:7;36731:5;36681:30;:56::i;:::-;36680:57;36661:76;36657:156;;;36761:40;;;;;;;;;;;;;;36657:156;36451:369;;;;:::o;52030:490::-;52129:13;52170:17;52178:8;52170:7;:17::i;:::-;52154:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;52280:5;52270:15;;:6;;;;;;;;;;;:15;;;52265:50;;;52302:9;52295:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52265:50;52329:28;52360:10;:8;:10::i;:::-;52329:41;;52415:1;52390:14;52384:28;:32;:130;;;;;;;;;;;;;;;;;52452:14;52468:19;:8;:17;:19::i;:::-;52489:9;52435:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52384:130;52377:137;;;52030:490;;;;:::o;52607:106::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;52683:5:::1;52667:13;:21;;;;52695:12;;;52607:106:::0;:::o;50409:30::-;;;;;;;;;;;;;:::o;50733:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;35723:164::-;35820:4;35844:18;:25;35863:5;35844:25;;;;;;;;;;;;;;;:35;35870:8;35844:35;;;;;;;;;;;;;;;;;;;;;;;;;35837:42;;35723:164;;;;:::o;50293:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49553:201::-;48874:12;:10;:12::i;:::-;48863:23;;:7;:5;:7::i;:::-;:23;;;48855:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;49662:1:::1;49642:22;;:8;:22;;;;49634:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;49718:28;49737:8;49718:18;:28::i;:::-;49553:201:::0;:::o;50485:43::-;;;;;;;;;;;;;:::o;20398:157::-;20483:4;20522:25;20507:40;;;:11;:40;;;;20500:47;;20398:157;;;:::o;8868:98::-;8921:7;8948:10;8941:17;;8868:98;:::o;37075:187::-;37132:4;37175:7;37156:15;:13;:15::i;:::-;:26;;:53;;;;;37196:13;;37186:7;:23;37156:53;:98;;;;;37227:11;:20;37239:7;37227:20;;;;;;;;;;;:27;;;;;;;;;;;;37226:28;37156:98;37149:105;;37075:187;;;:::o;45245:196::-;45387:2;45360:15;:24;45376:7;45360:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;45425:7;45421:2;45405:28;;45414:5;45405:28;;;;;;;;;;;;45245:196;;;:::o;29496:92::-;29552:7;29496:92;:::o;40188:2130::-;40303:35;40341:21;40354:7;40341:12;:21::i;:::-;40303:59;;40401:4;40379:26;;:13;:18;;;:26;;;40375:67;;40414:28;;;;;;;;;;;;;;40375:67;40455:22;40497:4;40481:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;40518:36;40535:4;40541:12;:10;:12::i;:::-;40518:16;:36::i;:::-;40481:73;:126;;;;40595:12;:10;:12::i;:::-;40571:36;;:20;40583:7;40571:11;:20::i;:::-;:36;;;40481:126;40455:153;;40626:17;40621:66;;40652:35;;;;;;;;;;;;;;40621:66;40716:1;40702:16;;:2;:16;;;40698:52;;;40727:23;;;;;;;;;;;;;;40698:52;40763:43;40785:4;40791:2;40795:7;40804:1;40763:21;:43::i;:::-;40871:35;40888:1;40892:7;40901:4;40871:8;:35::i;:::-;41232:1;41202:12;:18;41215:4;41202:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41276:1;41248:12;:16;41261:2;41248:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41294:31;41328:11;:20;41340:7;41328:20;;;;;;;;;;;41294:54;;41379:2;41363:8;:13;;;:18;;;;;;;;;;;;;;;;;;41429:15;41396:8;:23;;;:49;;;;;;;;;;;;;;;;;;41697:19;41729:1;41719:7;:11;41697:33;;41745:31;41779:11;:24;41791:11;41779:24;;;;;;;;;;;41745:58;;41847:1;41822:27;;:8;:13;;;;;;;;;;;;:27;;;41818:384;;;42032:13;;42017:11;:28;42013:174;;42086:4;42070:8;:13;;;:20;;;;;;;;;;;;;;;;;;42139:13;:28;;;42113:8;:23;;;:54;;;;;;;;;;;;;;;;;;42013:174;41818:384;41177:1036;;;42249:7;42245:2;42230:27;;42239:4;42230:27;;;;;;;;;;;;42268:42;42289:4;42295:2;42299:7;42308:1;42268:20;:42::i;:::-;40292:2026;;40188:2130;;;:::o;37270:104::-;37339:27;37349:2;37353:8;37339:27;;;;;;;;;;;;:9;:27::i;:::-;37270:104;;:::o;32223:1109::-;32285:21;;:::i;:::-;32319:12;32334:7;32319:22;;32402:4;32383:15;:13;:15::i;:::-;:23;;:47;;;;;32417:13;;32410:4;:20;32383:47;32379:886;;;32451:31;32485:11;:17;32497:4;32485:17;;;;;;;;;;;32451:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32526:9;:16;;;32521:729;;32597:1;32571:28;;:9;:14;;;:28;;;32567:101;;32635:9;32628:16;;;;;;32567:101;32970:261;32977:4;32970:261;;;33010:6;;;;;;;;33055:11;:17;33067:4;33055:17;;;;;;;;;;;33043:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33129:1;33103:28;;:9;:14;;;:28;;;33099:109;;33171:9;33164:16;;;;;;33099:109;32970:261;;;32521:729;32432:833;32379:886;33293:31;;;;;;;;;;;;;;32223:1109;;;;:::o;49914:191::-;49988:16;50007:6;;;;;;;;;;;49988:25;;50033:8;50024:6;;:17;;;;;;;;;;;;;;;;;;50088:8;50057:40;;50078:8;50057:40;;;;;;;;;;;;49977:128;49914:191;:::o;10315:326::-;10375:4;10632:1;10610:7;:19;;;:23;10603:30;;10315:326;;;:::o;45933:667::-;46096:4;46133:2;46117:36;;;46154:12;:10;:12::i;:::-;46168:4;46174:7;46183:5;46117:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46113:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46368:1;46351:6;:13;:18;46347:235;;;46397:40;;;;;;;;;;;;;;46347:235;46540:6;46534:13;46525:6;46521:2;46517:15;46510:38;46113:480;46246:45;;;46236:55;;;:6;:55;;;;46229:62;;;45933:667;;;;;;:::o;55017:97::-;55070:13;55099:9;55092:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;55017:97;:::o;6430:723::-;6486:13;6716:1;6707:5;:10;6703:53;;;6734:10;;;;;;;;;;;;;;;;;;;;;6703:53;6766:12;6781:5;6766:20;;6797:14;6822:78;6837:1;6829:4;:9;6822:78;;6855:8;;;;;:::i;:::-;;;;6886:2;6878:10;;;;;:::i;:::-;;;6822:78;;;6910:19;6942:6;6932:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6910:39;;6960:154;6976:1;6967:5;:10;6960:154;;7004:1;6994:11;;;;;:::i;:::-;;;7071:2;7063:5;:10;;;;:::i;:::-;7050:2;:24;;;;:::i;:::-;7037:39;;7020:6;7027;7020:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7100:2;7091:11;;;;;:::i;:::-;;;6960:154;;;7138:6;7124:21;;;;;6430:723;;;;:::o;47248:159::-;;;;;:::o;48066:158::-;;;;;:::o;37737:163::-;37860:32;37866:2;37870:8;37880:5;37887:4;37860:5;:32::i;:::-;37737:163;;;:::o;38159:1775::-;38298:20;38321:13;;38298:36;;38363:1;38349:16;;:2;:16;;;38345:48;;;38374:19;;;;;;;;;;;;;;38345:48;38420:1;38408:8;:13;38404:44;;;38430:18;;;;;;;;;;;;;;38404:44;38461:61;38491:1;38495:2;38499:12;38513:8;38461:21;:61::i;:::-;38834:8;38799:12;:16;38812:2;38799:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38898:8;38858:12;:16;38871:2;38858:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38957:2;38924:11;:25;38936:12;38924:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;39024:15;38974:11;:25;38986:12;38974:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;39057:20;39080:12;39057:35;;39107:11;39136:8;39121:12;:23;39107:37;;39165:4;:23;;;;;39173:15;:2;:13;;;:15::i;:::-;39165:23;39161:641;;;39209:314;39265:12;39261:2;39240:38;;39257:1;39240:38;;;;;;;;;;;;39306:69;39345:1;39349:2;39353:14;;;;;;39369:5;39306:30;:69::i;:::-;39301:174;;39411:40;;;;;;;;;;;;;;39301:174;39518:3;39502:12;:19;;39209:314;;39604:12;39587:13;;:29;39583:43;;39618:8;;;39583:43;39161:641;;;39667:120;39723:14;;;;;;39719:2;39698:40;;39715:1;39698:40;;;;;;;;;;;;39782:3;39766:12;:19;;39667:120;;39161:641;39832:12;39816:13;:28;;;;38774:1082;;39866:60;39895:1;39899:2;39903:12;39917:8;39866:20;:60::i;:::-;38287:1647;38159:1775;;;;:::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;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:137::-;2768:5;2806:6;2793:20;2784:29;;2822:32;2848:5;2822:32;:::i;:::-;2723:137;;;;:::o;2866:139::-;2912:5;2950:6;2937:20;2928:29;;2966:33;2993:5;2966:33;:::i;:::-;2866:139;;;;:::o;3011:135::-;3055:5;3093:6;3080:20;3071:29;;3109:31;3134:5;3109:31;:::i;:::-;3011:135;;;;:::o;3152:329::-;3211:6;3260:2;3248:9;3239:7;3235:23;3231:32;3228:119;;;3266:79;;:::i;:::-;3228:119;3386:1;3411:53;3456:7;3447:6;3436:9;3432:22;3411:53;:::i;:::-;3401:63;;3357:117;3152:329;;;;:::o;3487:474::-;3555:6;3563;3612:2;3600:9;3591:7;3587:23;3583:32;3580:119;;;3618:79;;:::i;:::-;3580:119;3738:1;3763:53;3808:7;3799:6;3788:9;3784:22;3763:53;:::i;:::-;3753:63;;3709:117;3865:2;3891:53;3936:7;3927:6;3916:9;3912:22;3891:53;:::i;:::-;3881:63;;3836:118;3487:474;;;;;:::o;3967:619::-;4044:6;4052;4060;4109:2;4097:9;4088:7;4084:23;4080:32;4077:119;;;4115:79;;:::i;:::-;4077:119;4235:1;4260:53;4305:7;4296:6;4285:9;4281:22;4260:53;:::i;:::-;4250:63;;4206:117;4362:2;4388:53;4433:7;4424:6;4413:9;4409:22;4388:53;:::i;:::-;4378:63;;4333:118;4490:2;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;:::i;:::-;4506:63;;4461:118;3967:619;;;;;:::o;4592:943::-;4687:6;4695;4703;4711;4760:3;4748:9;4739:7;4735:23;4731:33;4728:120;;;4767:79;;:::i;:::-;4728:120;4887:1;4912:53;4957:7;4948:6;4937:9;4933:22;4912:53;:::i;:::-;4902:63;;4858:117;5014:2;5040:53;5085:7;5076:6;5065:9;5061:22;5040:53;:::i;:::-;5030:63;;4985:118;5142:2;5168:53;5213:7;5204:6;5193:9;5189:22;5168:53;:::i;:::-;5158:63;;5113:118;5298:2;5287:9;5283:18;5270:32;5329:18;5321:6;5318:30;5315:117;;;5351:79;;:::i;:::-;5315:117;5456:62;5510:7;5501:6;5490:9;5486:22;5456:62;:::i;:::-;5446:72;;5241:287;4592:943;;;;;;;:::o;5541:468::-;5606:6;5614;5663:2;5651:9;5642:7;5638:23;5634:32;5631:119;;;5669:79;;:::i;:::-;5631:119;5789:1;5814:53;5859:7;5850:6;5839:9;5835:22;5814:53;:::i;:::-;5804:63;;5760:117;5916:2;5942:50;5984:7;5975:6;5964:9;5960:22;5942:50;:::i;:::-;5932:60;;5887:115;5541:468;;;;;:::o;6015:474::-;6083:6;6091;6140:2;6128:9;6119:7;6115:23;6111:32;6108:119;;;6146:79;;:::i;:::-;6108:119;6266:1;6291:53;6336:7;6327:6;6316:9;6312:22;6291:53;:::i;:::-;6281:63;;6237:117;6393:2;6419:53;6464:7;6455:6;6444:9;6440:22;6419:53;:::i;:::-;6409:63;;6364:118;6015:474;;;;;:::o;6495:559::-;6581:6;6589;6638:2;6626:9;6617:7;6613:23;6609:32;6606:119;;;6644:79;;:::i;:::-;6606:119;6792:1;6781:9;6777:17;6764:31;6822:18;6814:6;6811:30;6808:117;;;6844:79;;:::i;:::-;6808:117;6957:80;7029:7;7020:6;7009:9;7005:22;6957:80;:::i;:::-;6939:98;;;;6735:312;6495:559;;;;;:::o;7060:327::-;7118:6;7167:2;7155:9;7146:7;7142:23;7138:32;7135:119;;;7173:79;;:::i;:::-;7135:119;7293:1;7318:52;7362:7;7353:6;7342:9;7338:22;7318:52;:::i;:::-;7308:62;;7264:116;7060:327;;;;:::o;7393:349::-;7462:6;7511:2;7499:9;7490:7;7486:23;7482:32;7479:119;;;7517:79;;:::i;:::-;7479:119;7637:1;7662:63;7717:7;7708:6;7697:9;7693:22;7662:63;:::i;:::-;7652:73;;7608:127;7393:349;;;;:::o;7748:509::-;7817:6;7866:2;7854:9;7845:7;7841:23;7837:32;7834:119;;;7872:79;;:::i;:::-;7834:119;8020:1;8009:9;8005:17;7992:31;8050:18;8042:6;8039:30;8036:117;;;8072:79;;:::i;:::-;8036:117;8177:63;8232:7;8223:6;8212:9;8208:22;8177:63;:::i;:::-;8167:73;;7963:287;7748:509;;;;:::o;8263:327::-;8321:6;8370:2;8358:9;8349:7;8345:23;8341:32;8338:119;;;8376:79;;:::i;:::-;8338:119;8496:1;8521:52;8565:7;8556:6;8545:9;8541:22;8521:52;:::i;:::-;8511:62;;8467:116;8263:327;;;;:::o;8596:329::-;8655:6;8704:2;8692:9;8683:7;8679:23;8675:32;8672:119;;;8710:79;;:::i;:::-;8672:119;8830:1;8855:53;8900:7;8891:6;8880:9;8876:22;8855:53;:::i;:::-;8845:63;;8801:117;8596:329;;;;:::o;8931:325::-;8988:6;9037:2;9025:9;9016:7;9012:23;9008:32;9005:119;;;9043:79;;:::i;:::-;9005:119;9163:1;9188:51;9231:7;9222:6;9211:9;9207:22;9188:51;:::i;:::-;9178:61;;9134:115;8931:325;;;;:::o;9262:118::-;9349:24;9367:5;9349:24;:::i;:::-;9344:3;9337:37;9262:118;;:::o;9386:109::-;9467:21;9482:5;9467:21;:::i;:::-;9462:3;9455:34;9386:109;;:::o;9501:360::-;9587:3;9615:38;9647:5;9615:38;:::i;:::-;9669:70;9732:6;9727:3;9669:70;:::i;:::-;9662:77;;9748:52;9793:6;9788:3;9781:4;9774:5;9770:16;9748:52;:::i;:::-;9825:29;9847:6;9825:29;:::i;:::-;9820:3;9816:39;9809:46;;9591:270;9501:360;;;;:::o;9867:364::-;9955:3;9983:39;10016:5;9983:39;:::i;:::-;10038:71;10102:6;10097:3;10038:71;:::i;:::-;10031:78;;10118:52;10163:6;10158:3;10151:4;10144:5;10140:16;10118:52;:::i;:::-;10195:29;10217:6;10195:29;:::i;:::-;10190:3;10186:39;10179:46;;9959:272;9867:364;;;;:::o;10237:377::-;10343:3;10371:39;10404:5;10371:39;:::i;:::-;10426:89;10508:6;10503:3;10426:89;:::i;:::-;10419:96;;10524:52;10569:6;10564:3;10557:4;10550:5;10546:16;10524:52;:::i;:::-;10601:6;10596:3;10592:16;10585:23;;10347:267;10237:377;;;;:::o;10644:845::-;10747:3;10784:5;10778:12;10813:36;10839:9;10813:36;:::i;:::-;10865:89;10947:6;10942:3;10865:89;:::i;:::-;10858:96;;10985:1;10974:9;10970:17;11001:1;10996:137;;;;11147:1;11142:341;;;;10963:520;;10996:137;11080:4;11076:9;11065;11061:25;11056:3;11049:38;11116:6;11111:3;11107:16;11100:23;;10996:137;;11142:341;11209:38;11241:5;11209:38;:::i;:::-;11269:1;11283:154;11297:6;11294:1;11291:13;11283:154;;;11371:7;11365:14;11361:1;11356:3;11352:11;11345:35;11421:1;11412:7;11408:15;11397:26;;11319:4;11316:1;11312:12;11307:17;;11283:154;;;11466:6;11461:3;11457:16;11450:23;;11149:334;;10963:520;;10751:738;;10644:845;;;;:::o;11495:366::-;11637:3;11658:67;11722:2;11717:3;11658:67;:::i;:::-;11651:74;;11734:93;11823:3;11734:93;:::i;:::-;11852:2;11847:3;11843:12;11836:19;;11495:366;;;:::o;11867:::-;12009:3;12030:67;12094:2;12089:3;12030:67;:::i;:::-;12023:74;;12106:93;12195:3;12106:93;:::i;:::-;12224:2;12219:3;12215:12;12208:19;;11867:366;;;:::o;12239:::-;12381:3;12402:67;12466:2;12461:3;12402:67;:::i;:::-;12395:74;;12478:93;12567:3;12478:93;:::i;:::-;12596:2;12591:3;12587:12;12580:19;;12239:366;;;:::o;12611:::-;12753:3;12774:67;12838:2;12833:3;12774:67;:::i;:::-;12767:74;;12850:93;12939:3;12850:93;:::i;:::-;12968:2;12963:3;12959:12;12952:19;;12611:366;;;:::o;12983:::-;13125:3;13146:67;13210:2;13205:3;13146:67;:::i;:::-;13139:74;;13222:93;13311:3;13222:93;:::i;:::-;13340:2;13335:3;13331:12;13324:19;;12983:366;;;:::o;13355:::-;13497:3;13518:67;13582:2;13577:3;13518:67;:::i;:::-;13511:74;;13594:93;13683:3;13594:93;:::i;:::-;13712:2;13707:3;13703:12;13696:19;;13355:366;;;:::o;13727:::-;13869:3;13890:67;13954:2;13949:3;13890:67;:::i;:::-;13883:74;;13966:93;14055:3;13966:93;:::i;:::-;14084:2;14079:3;14075:12;14068:19;;13727:366;;;:::o;14099:::-;14241:3;14262:67;14326:2;14321:3;14262:67;:::i;:::-;14255:74;;14338:93;14427:3;14338:93;:::i;:::-;14456:2;14451:3;14447:12;14440:19;;14099:366;;;:::o;14471:::-;14613:3;14634:67;14698:2;14693:3;14634:67;:::i;:::-;14627:74;;14710:93;14799:3;14710:93;:::i;:::-;14828:2;14823:3;14819:12;14812:19;;14471:366;;;:::o;14843:::-;14985:3;15006:67;15070:2;15065:3;15006:67;:::i;:::-;14999:74;;15082:93;15171:3;15082:93;:::i;:::-;15200:2;15195:3;15191:12;15184:19;;14843:366;;;:::o;15215:115::-;15300:23;15317:5;15300:23;:::i;:::-;15295:3;15288:36;15215:115;;:::o;15336:118::-;15423:24;15441:5;15423:24;:::i;:::-;15418:3;15411:37;15336:118;;:::o;15460:112::-;15543:22;15559:5;15543:22;:::i;:::-;15538:3;15531:35;15460:112;;:::o;15578:589::-;15803:3;15825:95;15916:3;15907:6;15825:95;:::i;:::-;15818:102;;15937:95;16028:3;16019:6;15937:95;:::i;:::-;15930:102;;16049:92;16137:3;16128:6;16049:92;:::i;:::-;16042:99;;16158:3;16151:10;;15578:589;;;;;;:::o;16173:222::-;16266:4;16304:2;16293:9;16289:18;16281:26;;16317:71;16385:1;16374:9;16370:17;16361:6;16317:71;:::i;:::-;16173:222;;;;:::o;16401:640::-;16596:4;16634:3;16623:9;16619:19;16611:27;;16648:71;16716:1;16705:9;16701:17;16692:6;16648:71;:::i;:::-;16729:72;16797:2;16786:9;16782:18;16773:6;16729:72;:::i;:::-;16811;16879:2;16868:9;16864:18;16855:6;16811:72;:::i;:::-;16930:9;16924:4;16920:20;16915:2;16904:9;16900:18;16893:48;16958:76;17029:4;17020:6;16958:76;:::i;:::-;16950:84;;16401:640;;;;;;;:::o;17047:210::-;17134:4;17172:2;17161:9;17157:18;17149:26;;17185:65;17247:1;17236:9;17232:17;17223:6;17185:65;:::i;:::-;17047:210;;;;:::o;17263:313::-;17376:4;17414:2;17403:9;17399:18;17391:26;;17463:9;17457:4;17453:20;17449:1;17438:9;17434:17;17427:47;17491:78;17564:4;17555:6;17491:78;:::i;:::-;17483:86;;17263:313;;;;:::o;17582:419::-;17748:4;17786:2;17775:9;17771:18;17763:26;;17835:9;17829:4;17825:20;17821:1;17810:9;17806:17;17799:47;17863:131;17989:4;17863:131;:::i;:::-;17855:139;;17582:419;;;:::o;18007:::-;18173:4;18211:2;18200:9;18196:18;18188:26;;18260:9;18254:4;18250:20;18246:1;18235:9;18231:17;18224:47;18288:131;18414:4;18288:131;:::i;:::-;18280:139;;18007:419;;;:::o;18432:::-;18598:4;18636:2;18625:9;18621:18;18613:26;;18685:9;18679:4;18675:20;18671:1;18660:9;18656:17;18649:47;18713:131;18839:4;18713:131;:::i;:::-;18705:139;;18432:419;;;:::o;18857:::-;19023:4;19061:2;19050:9;19046:18;19038:26;;19110:9;19104:4;19100:20;19096:1;19085:9;19081:17;19074:47;19138:131;19264:4;19138:131;:::i;:::-;19130:139;;18857:419;;;:::o;19282:::-;19448:4;19486:2;19475:9;19471:18;19463:26;;19535:9;19529:4;19525:20;19521:1;19510:9;19506:17;19499:47;19563:131;19689:4;19563:131;:::i;:::-;19555:139;;19282:419;;;:::o;19707:::-;19873:4;19911:2;19900:9;19896:18;19888:26;;19960:9;19954:4;19950:20;19946:1;19935:9;19931:17;19924:47;19988:131;20114:4;19988:131;:::i;:::-;19980:139;;19707:419;;;:::o;20132:::-;20298:4;20336:2;20325:9;20321:18;20313:26;;20385:9;20379:4;20375:20;20371:1;20360:9;20356:17;20349:47;20413:131;20539:4;20413:131;:::i;:::-;20405:139;;20132:419;;;:::o;20557:::-;20723:4;20761:2;20750:9;20746:18;20738:26;;20810:9;20804:4;20800:20;20796:1;20785:9;20781:17;20774:47;20838:131;20964:4;20838:131;:::i;:::-;20830:139;;20557:419;;;:::o;20982:::-;21148:4;21186:2;21175:9;21171:18;21163:26;;21235:9;21229:4;21225:20;21221:1;21210:9;21206:17;21199:47;21263:131;21389:4;21263:131;:::i;:::-;21255:139;;20982:419;;;:::o;21407:::-;21573:4;21611:2;21600:9;21596:18;21588:26;;21660:9;21654:4;21650:20;21646:1;21635:9;21631:17;21624:47;21688:131;21814:4;21688:131;:::i;:::-;21680:139;;21407:419;;;:::o;21832:218::-;21923:4;21961:2;21950:9;21946:18;21938:26;;21974:69;22040:1;22029:9;22025:17;22016:6;21974:69;:::i;:::-;21832:218;;;;:::o;22056:222::-;22149:4;22187:2;22176:9;22172:18;22164:26;;22200:71;22268:1;22257:9;22253:17;22244:6;22200:71;:::i;:::-;22056:222;;;;:::o;22284:214::-;22373:4;22411:2;22400:9;22396:18;22388:26;;22424:67;22488:1;22477:9;22473:17;22464:6;22424:67;:::i;:::-;22284:214;;;;:::o;22504:129::-;22538:6;22565:20;;:::i;:::-;22555:30;;22594:33;22622:4;22614:6;22594:33;:::i;:::-;22504:129;;;:::o;22639:75::-;22672:6;22705:2;22699:9;22689:19;;22639:75;:::o;22720:307::-;22781:4;22871:18;22863:6;22860:30;22857:56;;;22893:18;;:::i;:::-;22857:56;22931:29;22953:6;22931:29;:::i;:::-;22923:37;;23015:4;23009;23005:15;22997:23;;22720:307;;;:::o;23033:308::-;23095:4;23185:18;23177:6;23174:30;23171:56;;;23207:18;;:::i;:::-;23171:56;23245:29;23267:6;23245:29;:::i;:::-;23237:37;;23329:4;23323;23319:15;23311:23;;23033:308;;;:::o;23347:141::-;23396:4;23419:3;23411:11;;23442:3;23439:1;23432:14;23476:4;23473:1;23463:18;23455:26;;23347:141;;;:::o;23494:98::-;23545:6;23579:5;23573:12;23563:22;;23494:98;;;:::o;23598:99::-;23650:6;23684:5;23678:12;23668:22;;23598:99;;;:::o;23703:168::-;23786:11;23820:6;23815:3;23808:19;23860:4;23855:3;23851:14;23836:29;;23703:168;;;;:::o;23877:169::-;23961:11;23995:6;23990:3;23983:19;24035:4;24030:3;24026:14;24011:29;;23877:169;;;;:::o;24052:148::-;24154:11;24191:3;24176:18;;24052:148;;;;:::o;24206:242::-;24245:3;24264:19;24281:1;24264:19;:::i;:::-;24259:24;;24297:19;24314:1;24297:19;:::i;:::-;24292:24;;24390:1;24382:6;24378:14;24375:1;24372:21;24369:47;;;24396:18;;:::i;:::-;24369:47;24440:1;24437;24433:9;24426:16;;24206:242;;;;:::o;24454:305::-;24494:3;24513:20;24531:1;24513:20;:::i;:::-;24508:25;;24547:20;24565:1;24547:20;:::i;:::-;24542:25;;24701:1;24633:66;24629:74;24626:1;24623:81;24620:107;;;24707:18;;:::i;:::-;24620:107;24751:1;24748;24744:9;24737:16;;24454:305;;;;:::o;24765:237::-;24803:3;24822:18;24838:1;24822:18;:::i;:::-;24817:23;;24854:18;24870:1;24854:18;:::i;:::-;24849:23;;24944:1;24938:4;24934:12;24931:1;24928:19;24925:45;;;24950:18;;:::i;:::-;24925:45;24994:1;24991;24987:9;24980:16;;24765:237;;;;:::o;25008:185::-;25048:1;25065:20;25083:1;25065:20;:::i;:::-;25060:25;;25099:20;25117:1;25099:20;:::i;:::-;25094:25;;25138:1;25128:35;;25143:18;;:::i;:::-;25128:35;25185:1;25182;25178:9;25173:14;;25008:185;;;;:::o;25199:348::-;25239:7;25262:20;25280:1;25262:20;:::i;:::-;25257:25;;25296:20;25314:1;25296:20;:::i;:::-;25291:25;;25484:1;25416:66;25412:74;25409:1;25406:81;25401:1;25394:9;25387:17;25383:105;25380:131;;;25491:18;;:::i;:::-;25380:131;25539:1;25536;25532:9;25521:20;;25199:348;;;;:::o;25553:191::-;25593:4;25613:20;25631:1;25613:20;:::i;:::-;25608:25;;25647:20;25665:1;25647:20;:::i;:::-;25642:25;;25686:1;25683;25680:8;25677:34;;;25691:18;;:::i;:::-;25677:34;25736:1;25733;25729:9;25721:17;;25553:191;;;;:::o;25750:185::-;25788:4;25808:18;25824:1;25808:18;:::i;:::-;25803:23;;25840:18;25856:1;25840:18;:::i;:::-;25835:23;;25877:1;25874;25871:8;25868:34;;;25882:18;;:::i;:::-;25868:34;25927:1;25924;25920:9;25912:17;;25750:185;;;;:::o;25941:96::-;25978:7;26007:24;26025:5;26007:24;:::i;:::-;25996:35;;25941:96;;;:::o;26043:90::-;26077:7;26120:5;26113:13;26106:21;26095:32;;26043:90;;;:::o;26139:149::-;26175:7;26215:66;26208:5;26204:78;26193:89;;26139:149;;;:::o;26294:89::-;26330:7;26370:6;26363:5;26359:18;26348:29;;26294:89;;;:::o;26389:126::-;26426:7;26466:42;26459:5;26455:54;26444:65;;26389:126;;;:::o;26521:77::-;26558:7;26587:5;26576:16;;26521:77;;;:::o;26604:86::-;26639:7;26679:4;26672:5;26668:16;26657:27;;26604:86;;;:::o;26696:154::-;26780:6;26775:3;26770;26757:30;26842:1;26833:6;26828:3;26824:16;26817:27;26696:154;;;:::o;26856:307::-;26924:1;26934:113;26948:6;26945:1;26942:13;26934:113;;;27033:1;27028:3;27024:11;27018:18;27014:1;27009:3;27005:11;26998:39;26970:2;26967:1;26963:10;26958:15;;26934:113;;;27065:6;27062:1;27059:13;27056:101;;;27145:1;27136:6;27131:3;27127:16;27120:27;27056:101;26905:258;26856:307;;;:::o;27169:320::-;27213:6;27250:1;27244:4;27240:12;27230:22;;27297:1;27291:4;27287:12;27318:18;27308:81;;27374:4;27366:6;27362:17;27352:27;;27308:81;27436:2;27428:6;27425:14;27405:18;27402:38;27399:84;;;27455:18;;:::i;:::-;27399:84;27220:269;27169:320;;;:::o;27495:281::-;27578:27;27600:4;27578:27;:::i;:::-;27570:6;27566:40;27708:6;27696:10;27693:22;27672:18;27660:10;27657:34;27654:62;27651:88;;;27719:18;;:::i;:::-;27651:88;27759:10;27755:2;27748:22;27538:238;27495:281;;:::o;27782:233::-;27821:3;27844:24;27862:5;27844:24;:::i;:::-;27835:33;;27890:66;27883:5;27880:77;27877:103;;;27960:18;;:::i;:::-;27877:103;28007:1;28000:5;27996:13;27989:20;;27782:233;;;:::o;28021:167::-;28058:3;28081:22;28097:5;28081:22;:::i;:::-;28072:31;;28125:4;28118:5;28115:15;28112:41;;;28133:18;;:::i;:::-;28112:41;28180:1;28173:5;28169:13;28162:20;;28021:167;;;:::o;28194:176::-;28226:1;28243:20;28261:1;28243:20;:::i;:::-;28238:25;;28277:20;28295:1;28277:20;:::i;:::-;28272:25;;28316:1;28306:35;;28321:18;;:::i;:::-;28306:35;28362:1;28359;28355:9;28350:14;;28194:176;;;;:::o;28376:180::-;28424:77;28421:1;28414:88;28521:4;28518:1;28511:15;28545:4;28542:1;28535:15;28562:180;28610:77;28607:1;28600:88;28707:4;28704:1;28697:15;28731:4;28728:1;28721:15;28748:180;28796:77;28793:1;28786:88;28893:4;28890:1;28883:15;28917:4;28914:1;28907:15;28934:180;28982:77;28979:1;28972:88;29079:4;29076:1;29069:15;29103:4;29100:1;29093:15;29120:180;29168:77;29165:1;29158:88;29265:4;29262:1;29255:15;29289:4;29286:1;29279:15;29306:117;29415:1;29412;29405:12;29429:117;29538:1;29535;29528:12;29552:117;29661:1;29658;29651:12;29675:117;29784:1;29781;29774:12;29798:117;29907:1;29904;29897:12;29921:117;30030:1;30027;30020:12;30044:102;30085:6;30136:2;30132:7;30127:2;30120:5;30116:14;30112:28;30102:38;;30044:102;;;:::o;30152:225::-;30292:34;30288:1;30280:6;30276:14;30269:58;30361:8;30356:2;30348:6;30344:15;30337:33;30152:225;:::o;30383:176::-;30523:28;30519:1;30511:6;30507:14;30500:52;30383:176;:::o;30565:173::-;30705:25;30701:1;30693:6;30689:14;30682:49;30565:173;:::o;30744:182::-;30884:34;30880:1;30872:6;30868:14;30861:58;30744:182;:::o;30932:173::-;31072:25;31068:1;31060:6;31056:14;31049:49;30932:173;:::o;31111:234::-;31251:34;31247:1;31239:6;31235:14;31228:58;31320:17;31315:2;31307:6;31303:15;31296:42;31111:234;:::o;31351:169::-;31491:21;31487:1;31479:6;31475:14;31468:45;31351:169;:::o;31526:178::-;31666:30;31662:1;31654:6;31650:14;31643:54;31526:178;:::o;31710:181::-;31850:33;31846:1;31838:6;31834:14;31827:57;31710:181;:::o;31897:169::-;32037:21;32033:1;32025:6;32021:14;32014:45;31897:169;:::o;32072:122::-;32145:24;32163:5;32145:24;:::i;:::-;32138:5;32135:35;32125:63;;32184:1;32181;32174:12;32125:63;32072:122;:::o;32200:116::-;32270:21;32285:5;32270:21;:::i;:::-;32263:5;32260:32;32250:60;;32306:1;32303;32296:12;32250:60;32200:116;:::o;32322:120::-;32394:23;32411:5;32394:23;:::i;:::-;32387:5;32384:34;32374:62;;32432:1;32429;32422:12;32374:62;32322:120;:::o;32448:::-;32520:23;32537:5;32520:23;:::i;:::-;32513:5;32510:34;32500:62;;32558:1;32555;32548:12;32500:62;32448:120;:::o;32574:122::-;32647:24;32665:5;32647:24;:::i;:::-;32640:5;32637:35;32627:63;;32686:1;32683;32676:12;32627:63;32574:122;:::o;32702:118::-;32773:22;32789:5;32773:22;:::i;:::-;32766:5;32763:33;32753:61;;32810:1;32807;32800:12;32753:61;32702:118;:::o

Swarm Source

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