ETH Price: $3,375.48 (+0.61%)
Gas: 9 Gwei

Token

Doodle Dickz (DD)
 

Overview

Max Total Supply

512 DD

Holders

82

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 DD
0xc9f24e31f3caeffe3fabf3120807636a5d070cd7
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:
doodledickz

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-02-21
*/

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// 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: https://github.com/chiru-labs/ERC721A/blob/main/contracts/ERC721A.sol


// Creator: Chiru Labs

pragma solidity ^0.8.4;









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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

            uint256 updatedIndex = startTokenId;

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/doodledickz721a.sol



pragma solidity >=0.8.4 <0.9.0;




contract doodledickz is Ownable, ERC721A {
    
    uint public tokenPrice = 0.04 ether;
    uint constant maxSupply = 5500;
    uint public presale_price = 0.03 ether;
    uint public totalNFTSupply = 0;

    bool public Presale_status = false;
    bool public public_sale_status = false;

    // dickbuts
    address public presalewhiteaddress1 = 0x42069ABFE407C60cf4ae4112bEDEaD391dBa1cdB;
    // Cryptoadz
    address public presalewhiteaddress2 = 0x1CB1A5e65610AEFF2551A50f76a87a7d3fB649C6;
    // Mfers
    address public presalewhiteaddress3 = 0x79FCDEF22feeD20eDDacbB2587640e45491b757f;
    
    mapping(address => bool) private presaleList;
    string public baseURI;
    uint public maxPerTransaction = 10;  //Max Limit for Sale
  
         
    constructor() ERC721A("Doodle Dickz", "DD"){}

   function buy(uint _count) public payable{
         require(public_sale_status == true, "Sale is Paused.");
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction 10");
        require(totalNFTSupply + _count <= maxSupply, "Not enough tokens left");
        require(msg.value >= tokenPrice * _count, "incorrect ether amount");
      

      
        _safeMint(msg.sender, _count);
        totalNFTSupply += _count;
    }

   function buy_presale(uint _count) public payable{ 
        require(Presale_status == true, "Sale is Paused.");
        require(checkPresale() == true || checknftholder1(msg.sender) > 0  || checknftholder2(msg.sender) > 0 || checknftholder3(msg.sender) > 0 , "You are not in Presale List.");
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction 10");
        require(totalNFTSupply + _count<= maxSupply, "Not enough tokens left");
        require(msg.value >= presale_price, "incorrect ether amount");
       
         _safeMint(msg.sender, _count);
        totalNFTSupply += _count;
    }

    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(_wallets.length > 0, "mint at least one token");
        require(_wallets.length <= maxPerTransaction, "max per transaction 10");
        require(totalNFTSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], 1);
        totalNFTSupply += 1;
    }
    
    function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }
    
    function is_presale_active() public view returns(uint){
        require(Presale_status == true,"Sale not Started Yet.");
        return 1;
     }
      function is_sale_active() public view returns(uint){
      require(public_sale_status == true,"Sale not Started Yet.");
        return 1;
     }
     function checkPresale() public view returns(bool){
        return presaleList[msg.sender];
    }
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
     function pre_Sale_status(bool temp) external onlyOwner {
        Presale_status = temp;
    }
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
     function update_public_price(uint price) external onlyOwner {
        tokenPrice = price;
    }
       function update_preSale_price(uint price) external onlyOwner {
        presale_price = price;
    }
  
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

      function withdraw() external onlyOwner {
               uint _balance = address(this).balance;
        payable(0xf8bE93b9F36cADD14c6246414FA87Af02591aF63).transfer(_balance * 50 / 100); 
        payable(0xB03Df7aEC4DAA6BCD6328f95982C5e51A8a98a5a).transfer(_balance * 50 / 100); 
    }


    function checknftholder1(address recnft) public view returns(uint) {
    address othercontractadd=presalewhiteaddress1;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

   function checknftholder2(address recnft) public view returns(uint) {
    address othercontractadd=presalewhiteaddress2;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

   function checknftholder3(address recnft) public view returns(uint) {
    address othercontractadd=presalewhiteaddress3;
    IERC20 tokenob = IERC20(othercontractadd);
    return tokenob.balanceOf(recnft);
  }

   function presale_whiteaddress1(address temp) external onlyOwner {
        presalewhiteaddress1 = temp;
    }

    function presale_whiteaddress2(address temp) external onlyOwner {
        presalewhiteaddress2 = temp;
    }

    function presale_whiteaddress3(address temp) external onlyOwner {
        presalewhiteaddress3 = temp;
    }
}

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":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Presale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recnft","type":"address"}],"name":"checknftholder3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_presale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_sale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"pre_Sale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presale_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"temp","type":"address"}],"name":"presale_whiteaddress1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"temp","type":"address"}],"name":"presale_whiteaddress2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"temp","type":"address"}],"name":"presale_whiteaddress3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"presalewhiteaddress1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalewhiteaddress2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalewhiteaddress3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalNFTSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_preSale_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"update_public_price","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052668e1bc9bf040000600855666a94d74f4300006009556000600a556000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055507342069abfe407c60cf4ae4112bedead391dba1cdb600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731cb1a5e65610aeff2551a50f76a87a7d3fb649c6600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507379fcdef22feed20eddacbb2587640e45491b757f600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a6010553480156200016657600080fd5b506040518060400160405280600c81526020017f446f6f646c65204469636b7a00000000000000000000000000000000000000008152506040518060400160405280600281526020017f4444000000000000000000000000000000000000000000000000000000000000815250620001f3620001e76200022d60201b60201c565b6200023560201b60201c565b81600290805190602001906200020b929190620002f9565b50806003908051906020019062000224929190620002f9565b5050506200040e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200030790620003a9565b90600052602060002090601f0160209004810192826200032b576000855562000377565b82601f106200034657805160ff191683800117855562000377565b8280016001018555821562000377579182015b828111156200037657825182559160200191906001019062000359565b5b5090506200038691906200038a565b5090565b5b80821115620003a55760008160009055506001016200038b565b5090565b60006002820490506001821680620003c257607f821691505b60208210811415620003d957620003d8620003df565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d2c806200041e6000396000f3fe6080604052600436106102935760003560e01c80637c8255db1161015a578063ba6dd6f0116100c1578063e2a70eaf1161007a578063e2a70eaf146109fc578063e2c7928114610a25578063e985e9c514610a50578063ebb3151014610a8d578063ef5f198514610ab6578063f2fde38b14610adf57610293565b8063ba6dd6f014610906578063bb2841c514610931578063c6ec6af71461094d578063c87b56dd14610978578063cd7de458146109b5578063d96a094a146109e057610293565b806395ea5e671161011357806395ea5e671461080a578063969745e814610835578063996953fc14610860578063a0bcfc7f1461088b578063a22cb465146108b4578063b88d4fde146108dd57610293565b80637c8255db146106f85780637dbf1ce7146107215780637ff9b5961461075e5780638da5cb5b146107895780638effe73c146107b457806395d89b41146107df57610293565b806333c49344116101fe5780636352211e116101b75780636352211e146105d657806363adc5a5146106135780636c0360eb1461063c57806370a0823114610667578063715018a6146106a45780637a7907a6146106bb57610293565b806333c49344146104da5780633ccfd60b1461050357806342842e0e1461051a5780634b980d67146105435780634f6ccce71461056e5780635b3917d6146105ab57610293565b806318160ddd1161025057806318160ddd146103ce5780631cef37e4146103f95780632251c6b51461042257806322c46a6f1461044b57806323b872dd146104745780632f745c591461049d57610293565b806301ffc9a71461029857806302689663146102d557806306fdde0314610300578063078709c71461032b578063081812fc14610368578063095ea7b3146103a5575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906140d9565b610b08565b6040516102cc919061448f565b60405180910390f35b3480156102e157600080fd5b506102ea610c52565b6040516102f7919061448f565b60405180910390f35b34801561030c57600080fd5b50610315610ca6565b60405161032291906144aa565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613ea0565b610d38565b60405161035f919061460c565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061417c565b610df7565b60405161039c9190614428565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190614023565b610e73565b005b3480156103da57600080fd5b506103e3610f7e565b6040516103f0919061460c565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140ac565b610fd6565b005b34801561042e57600080fd5b5061044960048036038101906104449190613ea0565b61106f565b005b34801561045757600080fd5b50610472600480360381019061046d9190613ea0565b61112f565b005b34801561048057600080fd5b5061049b60048036038101906104969190613f0d565b6111ef565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190614023565b6111ff565b6040516104d1919061460c565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190613ea0565b611407565b005b34801561050f57600080fd5b506105186114c7565b005b34801561052657600080fd5b50610541600480360381019061053c9190613f0d565b611631565b005b34801561054f57600080fd5b50610558611651565b604051610565919061460c565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061417c565b611657565b6040516105a2919061460c565b60405180910390f35b3480156105b757600080fd5b506105c06117ca565b6040516105cd9190614428565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061417c565b6117f0565b60405161060a9190614428565b60405180910390f35b34801561061f57600080fd5b5061063a6004803603810190610635919061417c565b611806565b005b34801561064857600080fd5b5061065161188c565b60405161065e91906144aa565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613ea0565b61191a565b60405161069b919061460c565b60405180910390f35b3480156106b057600080fd5b506106b96119ea565b005b3480156106c757600080fd5b506106e260048036038101906106dd9190613ea0565b611a72565b6040516106ef919061460c565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190614063565b611b31565b005b34801561072d57600080fd5b5061074860048036038101906107439190613ea0565b611cec565b604051610755919061460c565b60405180910390f35b34801561076a57600080fd5b50610773611dab565b604051610780919061460c565b60405180910390f35b34801561079557600080fd5b5061079e611db1565b6040516107ab9190614428565b60405180910390f35b3480156107c057600080fd5b506107c9611dda565b6040516107d69190614428565b60405180910390f35b3480156107eb57600080fd5b506107f4611e00565b60405161080191906144aa565b60405180910390f35b34801561081657600080fd5b5061081f611e92565b60405161082c919061448f565b60405180910390f35b34801561084157600080fd5b5061084a611ea5565b604051610857919061460c565b60405180910390f35b34801561086c57600080fd5b50610875611eab565b604051610882919061460c565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614133565b611f0a565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613fe3565b611fa0565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613f60565b612118565b005b34801561091257600080fd5b5061091b61216b565b604051610928919061448f565b60405180910390f35b61094b6004803603810190610946919061417c565b61217e565b005b34801561095957600080fd5b506109626123a0565b60405161096f9190614428565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061417c565b6123c6565b6040516109ac91906144aa565b60405180910390f35b3480156109c157600080fd5b506109ca612465565b6040516109d7919061460c565b60405180910390f35b6109fa60048036038101906109f5919061417c565b6124c4565b005b348015610a0857600080fd5b50610a236004803603810190610a1e919061417c565b61266a565b005b348015610a3157600080fd5b50610a3a6126f0565b604051610a47919061460c565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613ecd565b6126f6565b604051610a84919061448f565b60405180910390f35b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614063565b61278a565b005b348015610ac257600080fd5b50610add6004803603810190610ad891906140ac565b61289b565b005b348015610aeb57600080fd5b50610b066004803603810190610b019190613ea0565b612934565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c3b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c4b5750610c4a82612a2c565b5b9050919050565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b606060028054610cb5906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce1906148e8565b8015610d2e5780601f10610d0357610100808354040283529160200191610d2e565b820191906000526020600020905b815481529060010190602001808311610d1157829003601f168201915b5050505050905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610d9e9190614428565b60206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee91906141a9565b92505050919050565b6000610e0282612a96565b610e38576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e7e826117f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee6576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f05612aff565b73ffffffffffffffffffffffffffffffffffffffff1614158015610f375750610f3581610f30612aff565b6126f6565b155b15610f6e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f79838383612b07565b505050565b6000600160109054906101000a90046fffffffffffffffffffffffffffffffff16600160009054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610fde612aff565b73ffffffffffffffffffffffffffffffffffffffff16610ffc611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110499061452c565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b611077612aff565b73ffffffffffffffffffffffffffffffffffffffff16611095611db1565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061452c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611137612aff565b73ffffffffffffffffffffffffffffffffffffffff16611155611db1565b73ffffffffffffffffffffffffffffffffffffffff16146111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061452c565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111fa838383612bb9565b505050565b600061120a8361191a565b8210611242576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b838110156113fb576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561135a57506113ee565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461139a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ec57868414156113e3578195505050505050611401565b83806001019450505b505b808060010191505061127d565b50600080fd5b92915050565b61140f612aff565b73ffffffffffffffffffffffffffffffffffffffff1661142d611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a9061452c565b60405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114cf612aff565b73ffffffffffffffffffffffffffffffffffffffff166114ed611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a9061452c565b60405180910390fd5b600047905073f8be93b9f36cadd14c6246414fa87af02591af6373ffffffffffffffffffffffffffffffffffffffff166108fc606460328461158591906147a4565b61158f9190614773565b9081150290604051600060405180830381858888f193505050501580156115ba573d6000803e3d6000fd5b5073b03df7aec4daa6bcd6328f95982c5e51a8a98a5a73ffffffffffffffffffffffffffffffffffffffff166108fc60646032846115f891906147a4565b6116029190614773565b9081150290604051600060405180830381858888f1935050505015801561162d573d6000803e3d6000fd5b5050565b61164c83838360405180602001604052806000815250612118565b505050565b60105481565b600080600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611792576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611784578583141561177b57819450505050506117c5565b82806001019350505b508080600101915050611691565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117fb826130d8565b600001519050919050565b61180e612aff565b73ffffffffffffffffffffffffffffffffffffffff1661182c611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061452c565b60405180910390fd5b8060098190555050565b600f8054611899906148e8565b80601f01602080910402602001604051908101604052809291908181526020018280546118c5906148e8565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119f2612aff565b73ffffffffffffffffffffffffffffffffffffffff16611a10611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d9061452c565b60405180910390fd5b611a706000613382565b565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401611ad89190614428565b60206040518083038186803b158015611af057600080fd5b505afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2891906141a9565b92505050919050565b611b39612aff565b73ffffffffffffffffffffffffffffffffffffffff16611b57611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba49061452c565b60405180910390fd5b6000815111611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061458c565b60405180910390fd5b60105481511115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061456c565b60405180910390fd5b61157c8151600a54611c49919061471d565b1115611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c81906145cc565b60405180910390fd5b60005b8151811015611cce57611cbb828281518110611cac57611cab614a52565b5b60200260200101516001613446565b8080611cc69061494b565b915050611c8d565b506001600a6000828254611ce2919061471d565b9250508190555050565b600080600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401611d529190614428565b60206040518083038186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906141a9565b92505050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054611e0f906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3b906148e8565b8015611e885780601f10611e5d57610100808354040283529160200191611e88565b820191906000526020600020905b815481529060010190602001808311611e6b57829003601f168201915b5050505050905090565b600b60019054906101000a900460ff1681565b60095481565b600060011515600b60009054906101000a900460ff16151514611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa9061454c565b60405180910390fd5b6001905090565b611f12612aff565b73ffffffffffffffffffffffffffffffffffffffff16611f30611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d9061452c565b60405180910390fd5b80600f9080519060200190611f9c929190613bbe565b5050565b611fa8612aff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561200d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061201a612aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120c7612aff565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210c919061448f565b60405180910390a35050565b612123848484612bb9565b61212f84848484613464565b612165576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600b60009054906101000a900460ff1681565b60011515600b60009054906101000a900460ff161515146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb906145ec565b60405180910390fd5b600115156121e0610c52565b151514806121f6575060006121f433611cec565b115b806122095750600061220733611a72565b115b8061221c5750600061221a33610d38565b115b61225b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612252906145ac565b60405180910390fd5b6000811161229e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122959061458c565b60405180910390fd5b6010548111156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da9061456c565b60405180910390fd5b61157c81600a546122f4919061471d565b1115612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061450c565b60405180910390fd5b60095434101561237a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612371906144ec565b60405180910390fd5b6123843382613446565b80600a6000828254612396919061471d565b9250508190555050565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606123d182612a96565b612407576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006124116135f2565b9050600081511415612432576040518060200160405280600081525061245d565b8061243c84613684565b60405160200161244d929190614404565b6040516020818303038152906040525b915050919050565b600060011515600b60019054906101000a900460ff161515146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b49061454c565b60405180910390fd5b6001905090565b60011515600b60019054906101000a900460ff1615151461251a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612511906145ec565b60405180910390fd5b6000811161255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125549061458c565b60405180910390fd5b6010548111156125a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125999061456c565b60405180910390fd5b61157c81600a546125b3919061471d565b11156125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb9061450c565b60405180910390fd5b8060085461260291906147a4565b341015612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b906144ec565b60405180910390fd5b61264e3382613446565b80600a6000828254612660919061471d565b9250508190555050565b612672612aff565b73ffffffffffffffffffffffffffffffffffffffff16612690611db1565b73ffffffffffffffffffffffffffffffffffffffff16146126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd9061452c565b60405180910390fd5b8060088190555050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612792612aff565b73ffffffffffffffffffffffffffffffffffffffff166127b0611db1565b73ffffffffffffffffffffffffffffffffffffffff1614612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd9061452c565b60405180910390fd5b60005b8151811015612897576001600e600084848151811061282b5761282a614a52565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061288f9061494b565b915050612809565b5050565b6128a3612aff565b73ffffffffffffffffffffffffffffffffffffffff166128c1611db1565b73ffffffffffffffffffffffffffffffffffffffff1614612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e9061452c565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b61293c612aff565b73ffffffffffffffffffffffffffffffffffffffff1661295a611db1565b73ffffffffffffffffffffffffffffffffffffffff16146129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a79061452c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a17906144cc565b60405180910390fd5b612a2981613382565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612af8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612bc4826130d8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612beb612aff565b73ffffffffffffffffffffffffffffffffffffffff161480612c1e5750612c1d8260000151612c18612aff565b6126f6565b5b80612c635750612c2c612aff565b73ffffffffffffffffffffffffffffffffffffffff16612c4b84610df7565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612c9c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612d05576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d6c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7985858560016137e5565b612d896000848460000151612b07565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561306857600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156130675782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130d185858560016137eb565b5050505050565b6130e0613c44565b6000829050600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681101561334b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161334957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461322d57809250505061337d565b5b60011561334857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461334357809250505061337d565b61322e565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134608282604051806020016040528060008152506137f1565b5050565b60006134858473ffffffffffffffffffffffffffffffffffffffff16613803565b156135e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134ae612aff565b8786866040518563ffffffff1660e01b81526004016134d09493929190614443565b602060405180830381600087803b1580156134ea57600080fd5b505af192505050801561351b57506040513d601f19601f820116820180604052508101906135189190614106565b60015b613595573d806000811461354b576040519150601f19603f3d011682016040523d82523d6000602084013e613550565b606091505b5060008151141561358d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135ea565b600190505b949350505050565b6060600f8054613601906148e8565b80601f016020809104026020016040519081016040528092919081815260200182805461362d906148e8565b801561367a5780601f1061364f5761010080835404028352916020019161367a565b820191906000526020600020905b81548152906001019060200180831161365d57829003601f168201915b5050505050905090565b606060008214156136cc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137e0565b600082905060005b600082146136fe5780806136e79061494b565b915050600a826136f79190614773565b91506136d4565b60008167ffffffffffffffff81111561371a57613719614a81565b5b6040519080825280601f01601f19166020018201604052801561374c5781602001600182028036833780820191505090505b5090505b600085146137d95760018261376591906147fe565b9150600a856137749190614994565b6030613780919061471d565b60f81b81838151811061379657613795614a52565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137d29190614773565b9450613750565b8093505050505b919050565b50505050565b50505050565b6137fe8383836001613826565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156138c2576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156138fd576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61390a60008683876137e5565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613b6f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015613b235750613b216000888488613464565b155b15613b5a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613aa8565b5080600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613bb760008683876137eb565b5050505050565b828054613bca906148e8565b90600052602060002090601f016020900481019282613bec5760008555613c33565b82601f10613c0557805160ff1916838001178555613c33565b82800160010185558215613c33579182015b82811115613c32578251825591602001919060010190613c17565b5b509050613c409190613c87565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613ca0576000816000905550600101613c88565b5090565b6000613cb7613cb28461464c565b614627565b90508083825260208201905082856020860282011115613cda57613cd9614ab5565b5b60005b85811015613d0a5781613cf08882613d98565b845260208401935060208301925050600181019050613cdd565b5050509392505050565b6000613d27613d2284614678565b614627565b905082815260208101848484011115613d4357613d42614aba565b5b613d4e8482856148a6565b509392505050565b6000613d69613d64846146a9565b614627565b905082815260208101848484011115613d8557613d84614aba565b5b613d908482856148a6565b509392505050565b600081359050613da781614c9a565b92915050565b600082601f830112613dc257613dc1614ab0565b5b8135613dd2848260208601613ca4565b91505092915050565b600081359050613dea81614cb1565b92915050565b600081359050613dff81614cc8565b92915050565b600081519050613e1481614cc8565b92915050565b600082601f830112613e2f57613e2e614ab0565b5b8135613e3f848260208601613d14565b91505092915050565b600082601f830112613e5d57613e5c614ab0565b5b8135613e6d848260208601613d56565b91505092915050565b600081359050613e8581614cdf565b92915050565b600081519050613e9a81614cdf565b92915050565b600060208284031215613eb657613eb5614ac4565b5b6000613ec484828501613d98565b91505092915050565b60008060408385031215613ee457613ee3614ac4565b5b6000613ef285828601613d98565b9250506020613f0385828601613d98565b9150509250929050565b600080600060608486031215613f2657613f25614ac4565b5b6000613f3486828701613d98565b9350506020613f4586828701613d98565b9250506040613f5686828701613e76565b9150509250925092565b60008060008060808587031215613f7a57613f79614ac4565b5b6000613f8887828801613d98565b9450506020613f9987828801613d98565b9350506040613faa87828801613e76565b925050606085013567ffffffffffffffff811115613fcb57613fca614abf565b5b613fd787828801613e1a565b91505092959194509250565b60008060408385031215613ffa57613ff9614ac4565b5b600061400885828601613d98565b925050602061401985828601613ddb565b9150509250929050565b6000806040838503121561403a57614039614ac4565b5b600061404885828601613d98565b925050602061405985828601613e76565b9150509250929050565b60006020828403121561407957614078614ac4565b5b600082013567ffffffffffffffff81111561409757614096614abf565b5b6140a384828501613dad565b91505092915050565b6000602082840312156140c2576140c1614ac4565b5b60006140d084828501613ddb565b91505092915050565b6000602082840312156140ef576140ee614ac4565b5b60006140fd84828501613df0565b91505092915050565b60006020828403121561411c5761411b614ac4565b5b600061412a84828501613e05565b91505092915050565b60006020828403121561414957614148614ac4565b5b600082013567ffffffffffffffff81111561416757614166614abf565b5b61417384828501613e48565b91505092915050565b60006020828403121561419257614191614ac4565b5b60006141a084828501613e76565b91505092915050565b6000602082840312156141bf576141be614ac4565b5b60006141cd84828501613e8b565b91505092915050565b6141df81614832565b82525050565b6141ee81614844565b82525050565b60006141ff826146da565b61420981856146f0565b93506142198185602086016148b5565b61422281614ac9565b840191505092915050565b6000614238826146e5565b6142428185614701565b93506142528185602086016148b5565b61425b81614ac9565b840191505092915050565b6000614271826146e5565b61427b8185614712565b935061428b8185602086016148b5565b80840191505092915050565b60006142a4602683614701565b91506142af82614ada565b604082019050919050565b60006142c7601683614701565b91506142d282614b29565b602082019050919050565b60006142ea601683614701565b91506142f582614b52565b602082019050919050565b600061430d602083614701565b915061431882614b7b565b602082019050919050565b6000614330601583614701565b915061433b82614ba4565b602082019050919050565b6000614353601683614701565b915061435e82614bcd565b602082019050919050565b6000614376601783614701565b915061438182614bf6565b602082019050919050565b6000614399601c83614701565b91506143a482614c1f565b602082019050919050565b60006143bc601683614701565b91506143c782614c48565b602082019050919050565b60006143df600f83614701565b91506143ea82614c71565b602082019050919050565b6143fe8161489c565b82525050565b60006144108285614266565b915061441c8284614266565b91508190509392505050565b600060208201905061443d60008301846141d6565b92915050565b600060808201905061445860008301876141d6565b61446560208301866141d6565b61447260408301856143f5565b818103606083015261448481846141f4565b905095945050505050565b60006020820190506144a460008301846141e5565b92915050565b600060208201905081810360008301526144c4818461422d565b905092915050565b600060208201905081810360008301526144e581614297565b9050919050565b60006020820190508181036000830152614505816142ba565b9050919050565b60006020820190508181036000830152614525816142dd565b9050919050565b6000602082019050818103600083015261454581614300565b9050919050565b6000602082019050818103600083015261456581614323565b9050919050565b6000602082019050818103600083015261458581614346565b9050919050565b600060208201905081810360008301526145a581614369565b9050919050565b600060208201905081810360008301526145c58161438c565b9050919050565b600060208201905081810360008301526145e5816143af565b9050919050565b60006020820190508181036000830152614605816143d2565b9050919050565b600060208201905061462160008301846143f5565b92915050565b6000614631614642565b905061463d828261491a565b919050565b6000604051905090565b600067ffffffffffffffff82111561466757614666614a81565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561469357614692614a81565b5b61469c82614ac9565b9050602081019050919050565b600067ffffffffffffffff8211156146c4576146c3614a81565b5b6146cd82614ac9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147288261489c565b91506147338361489c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614768576147676149c5565b5b828201905092915050565b600061477e8261489c565b91506147898361489c565b925082614799576147986149f4565b5b828204905092915050565b60006147af8261489c565b91506147ba8361489c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f3576147f26149c5565b5b828202905092915050565b60006148098261489c565b91506148148361489c565b925082821015614827576148266149c5565b5b828203905092915050565b600061483d8261487c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d35780820151818401526020810190506148b8565b838111156148e2576000848401525b50505050565b6000600282049050600182168061490057607f821691505b6020821081141561491457614913614a23565b5b50919050565b61492382614ac9565b810181811067ffffffffffffffff8211171561494257614941614a81565b5b80604052505050565b60006149568261489c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614989576149886149c5565b5b600182019050919050565b600061499f8261489c565b91506149aa8361489c565b9250826149ba576149b96149f4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20313000000000000000000000600082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b614ca381614832565b8114614cae57600080fd5b50565b614cba81614844565b8114614cc557600080fd5b50565b614cd181614850565b8114614cdc57600080fd5b50565b614ce88161489c565b8114614cf357600080fd5b5056fea264697066735822122067619aee494fef1450a93f253e5cd5c1d3bad7a84fd991e8dca2cd492a44834f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102935760003560e01c80637c8255db1161015a578063ba6dd6f0116100c1578063e2a70eaf1161007a578063e2a70eaf146109fc578063e2c7928114610a25578063e985e9c514610a50578063ebb3151014610a8d578063ef5f198514610ab6578063f2fde38b14610adf57610293565b8063ba6dd6f014610906578063bb2841c514610931578063c6ec6af71461094d578063c87b56dd14610978578063cd7de458146109b5578063d96a094a146109e057610293565b806395ea5e671161011357806395ea5e671461080a578063969745e814610835578063996953fc14610860578063a0bcfc7f1461088b578063a22cb465146108b4578063b88d4fde146108dd57610293565b80637c8255db146106f85780637dbf1ce7146107215780637ff9b5961461075e5780638da5cb5b146107895780638effe73c146107b457806395d89b41146107df57610293565b806333c49344116101fe5780636352211e116101b75780636352211e146105d657806363adc5a5146106135780636c0360eb1461063c57806370a0823114610667578063715018a6146106a45780637a7907a6146106bb57610293565b806333c49344146104da5780633ccfd60b1461050357806342842e0e1461051a5780634b980d67146105435780634f6ccce71461056e5780635b3917d6146105ab57610293565b806318160ddd1161025057806318160ddd146103ce5780631cef37e4146103f95780632251c6b51461042257806322c46a6f1461044b57806323b872dd146104745780632f745c591461049d57610293565b806301ffc9a71461029857806302689663146102d557806306fdde0314610300578063078709c71461032b578063081812fc14610368578063095ea7b3146103a5575b600080fd5b3480156102a457600080fd5b506102bf60048036038101906102ba91906140d9565b610b08565b6040516102cc919061448f565b60405180910390f35b3480156102e157600080fd5b506102ea610c52565b6040516102f7919061448f565b60405180910390f35b34801561030c57600080fd5b50610315610ca6565b60405161032291906144aa565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613ea0565b610d38565b60405161035f919061460c565b60405180910390f35b34801561037457600080fd5b5061038f600480360381019061038a919061417c565b610df7565b60405161039c9190614428565b60405180910390f35b3480156103b157600080fd5b506103cc60048036038101906103c79190614023565b610e73565b005b3480156103da57600080fd5b506103e3610f7e565b6040516103f0919061460c565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906140ac565b610fd6565b005b34801561042e57600080fd5b5061044960048036038101906104449190613ea0565b61106f565b005b34801561045757600080fd5b50610472600480360381019061046d9190613ea0565b61112f565b005b34801561048057600080fd5b5061049b60048036038101906104969190613f0d565b6111ef565b005b3480156104a957600080fd5b506104c460048036038101906104bf9190614023565b6111ff565b6040516104d1919061460c565b60405180910390f35b3480156104e657600080fd5b5061050160048036038101906104fc9190613ea0565b611407565b005b34801561050f57600080fd5b506105186114c7565b005b34801561052657600080fd5b50610541600480360381019061053c9190613f0d565b611631565b005b34801561054f57600080fd5b50610558611651565b604051610565919061460c565b60405180910390f35b34801561057a57600080fd5b506105956004803603810190610590919061417c565b611657565b6040516105a2919061460c565b60405180910390f35b3480156105b757600080fd5b506105c06117ca565b6040516105cd9190614428565b60405180910390f35b3480156105e257600080fd5b506105fd60048036038101906105f8919061417c565b6117f0565b60405161060a9190614428565b60405180910390f35b34801561061f57600080fd5b5061063a6004803603810190610635919061417c565b611806565b005b34801561064857600080fd5b5061065161188c565b60405161065e91906144aa565b60405180910390f35b34801561067357600080fd5b5061068e60048036038101906106899190613ea0565b61191a565b60405161069b919061460c565b60405180910390f35b3480156106b057600080fd5b506106b96119ea565b005b3480156106c757600080fd5b506106e260048036038101906106dd9190613ea0565b611a72565b6040516106ef919061460c565b60405180910390f35b34801561070457600080fd5b5061071f600480360381019061071a9190614063565b611b31565b005b34801561072d57600080fd5b5061074860048036038101906107439190613ea0565b611cec565b604051610755919061460c565b60405180910390f35b34801561076a57600080fd5b50610773611dab565b604051610780919061460c565b60405180910390f35b34801561079557600080fd5b5061079e611db1565b6040516107ab9190614428565b60405180910390f35b3480156107c057600080fd5b506107c9611dda565b6040516107d69190614428565b60405180910390f35b3480156107eb57600080fd5b506107f4611e00565b60405161080191906144aa565b60405180910390f35b34801561081657600080fd5b5061081f611e92565b60405161082c919061448f565b60405180910390f35b34801561084157600080fd5b5061084a611ea5565b604051610857919061460c565b60405180910390f35b34801561086c57600080fd5b50610875611eab565b604051610882919061460c565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad9190614133565b611f0a565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613fe3565b611fa0565b005b3480156108e957600080fd5b5061090460048036038101906108ff9190613f60565b612118565b005b34801561091257600080fd5b5061091b61216b565b604051610928919061448f565b60405180910390f35b61094b6004803603810190610946919061417c565b61217e565b005b34801561095957600080fd5b506109626123a0565b60405161096f9190614428565b60405180910390f35b34801561098457600080fd5b5061099f600480360381019061099a919061417c565b6123c6565b6040516109ac91906144aa565b60405180910390f35b3480156109c157600080fd5b506109ca612465565b6040516109d7919061460c565b60405180910390f35b6109fa60048036038101906109f5919061417c565b6124c4565b005b348015610a0857600080fd5b50610a236004803603810190610a1e919061417c565b61266a565b005b348015610a3157600080fd5b50610a3a6126f0565b604051610a47919061460c565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613ecd565b6126f6565b604051610a84919061448f565b60405180910390f35b348015610a9957600080fd5b50610ab46004803603810190610aaf9190614063565b61278a565b005b348015610ac257600080fd5b50610add6004803603810190610ad891906140ac565b61289b565b005b348015610aeb57600080fd5b50610b066004803603810190610b019190613ea0565b612934565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c3b57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c4b5750610c4a82612a2c565b5b9050919050565b6000600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b606060028054610cb5906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce1906148e8565b8015610d2e5780601f10610d0357610100808354040283529160200191610d2e565b820191906000526020600020905b815481529060010190602001808311610d1157829003601f168201915b5050505050905090565b600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401610d9e9190614428565b60206040518083038186803b158015610db657600080fd5b505afa158015610dca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dee91906141a9565b92505050919050565b6000610e0282612a96565b610e38576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e7e826117f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ee6576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610f05612aff565b73ffffffffffffffffffffffffffffffffffffffff1614158015610f375750610f3581610f30612aff565b6126f6565b155b15610f6e576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f79838383612b07565b505050565b6000600160109054906101000a90046fffffffffffffffffffffffffffffffff16600160009054906101000a90046fffffffffffffffffffffffffffffffff16036fffffffffffffffffffffffffffffffff16905090565b610fde612aff565b73ffffffffffffffffffffffffffffffffffffffff16610ffc611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611052576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110499061452c565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b611077612aff565b73ffffffffffffffffffffffffffffffffffffffff16611095611db1565b73ffffffffffffffffffffffffffffffffffffffff16146110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e29061452c565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611137612aff565b73ffffffffffffffffffffffffffffffffffffffff16611155611db1565b73ffffffffffffffffffffffffffffffffffffffff16146111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a29061452c565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6111fa838383612bb9565b505050565b600061120a8361191a565b8210611242576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff16905060008060005b838110156113fb576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001511561135a57506113ee565b600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461139a57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113ec57868414156113e3578195505050505050611401565b83806001019450505b505b808060010191505061127d565b50600080fd5b92915050565b61140f612aff565b73ffffffffffffffffffffffffffffffffffffffff1661142d611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a9061452c565b60405180910390fd5b80600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114cf612aff565b73ffffffffffffffffffffffffffffffffffffffff166114ed611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153a9061452c565b60405180910390fd5b600047905073f8be93b9f36cadd14c6246414fa87af02591af6373ffffffffffffffffffffffffffffffffffffffff166108fc606460328461158591906147a4565b61158f9190614773565b9081150290604051600060405180830381858888f193505050501580156115ba573d6000803e3d6000fd5b5073b03df7aec4daa6bcd6328f95982c5e51a8a98a5a73ffffffffffffffffffffffffffffffffffffffff166108fc60646032846115f891906147a4565b6116029190614773565b9081150290604051600060405180830381858888f1935050505015801561162d573d6000803e3d6000fd5b5050565b61164c83838360405180602001604052806000815250612118565b505050565b60105481565b600080600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1690506000805b82811015611792576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff16151515158152505090508060400151611784578583141561177b57819450505050506117c5565b82806001019350505b508080600101915050611691565b506040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117fb826130d8565b600001519050919050565b61180e612aff565b73ffffffffffffffffffffffffffffffffffffffff1661182c611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061452c565b60405180910390fd5b8060098190555050565b600f8054611899906148e8565b80601f01602080910402602001604051908101604052809291908181526020018280546118c5906148e8565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6119f2612aff565b73ffffffffffffffffffffffffffffffffffffffff16611a10611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5d9061452c565b60405180910390fd5b611a706000613382565b565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401611ad89190614428565b60206040518083038186803b158015611af057600080fd5b505afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2891906141a9565b92505050919050565b611b39612aff565b73ffffffffffffffffffffffffffffffffffffffff16611b57611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba49061452c565b60405180910390fd5b6000815111611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061458c565b60405180910390fd5b60105481511115611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e9061456c565b60405180910390fd5b61157c8151600a54611c49919061471d565b1115611c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c81906145cc565b60405180910390fd5b60005b8151811015611cce57611cbb828281518110611cac57611cab614a52565b5b60200260200101516001613446565b8080611cc69061494b565b915050611c8d565b506001600a6000828254611ce2919061471d565b9250508190555050565b600080600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190508073ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401611d529190614428565b60206040518083038186803b158015611d6a57600080fd5b505afa158015611d7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da291906141a9565b92505050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054611e0f906148e8565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3b906148e8565b8015611e885780601f10611e5d57610100808354040283529160200191611e88565b820191906000526020600020905b815481529060010190602001808311611e6b57829003601f168201915b5050505050905090565b600b60019054906101000a900460ff1681565b60095481565b600060011515600b60009054906101000a900460ff16151514611f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efa9061454c565b60405180910390fd5b6001905090565b611f12612aff565b73ffffffffffffffffffffffffffffffffffffffff16611f30611db1565b73ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d9061452c565b60405180910390fd5b80600f9080519060200190611f9c929190613bbe565b5050565b611fa8612aff565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561200d576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806007600061201a612aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166120c7612aff565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161210c919061448f565b60405180910390a35050565b612123848484612bb9565b61212f84848484613464565b612165576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600b60009054906101000a900460ff1681565b60011515600b60009054906101000a900460ff161515146121d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cb906145ec565b60405180910390fd5b600115156121e0610c52565b151514806121f6575060006121f433611cec565b115b806122095750600061220733611a72565b115b8061221c5750600061221a33610d38565b115b61225b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612252906145ac565b60405180910390fd5b6000811161229e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122959061458c565b60405180910390fd5b6010548111156122e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122da9061456c565b60405180910390fd5b61157c81600a546122f4919061471d565b1115612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c9061450c565b60405180910390fd5b60095434101561237a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612371906144ec565b60405180910390fd5b6123843382613446565b80600a6000828254612396919061471d565b9250508190555050565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606123d182612a96565b612407576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006124116135f2565b9050600081511415612432576040518060200160405280600081525061245d565b8061243c84613684565b60405160200161244d929190614404565b6040516020818303038152906040525b915050919050565b600060011515600b60019054906101000a900460ff161515146124bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b49061454c565b60405180910390fd5b6001905090565b60011515600b60019054906101000a900460ff1615151461251a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612511906145ec565b60405180910390fd5b6000811161255d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125549061458c565b60405180910390fd5b6010548111156125a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125999061456c565b60405180910390fd5b61157c81600a546125b3919061471d565b11156125f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125eb9061450c565b60405180910390fd5b8060085461260291906147a4565b341015612644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263b906144ec565b60405180910390fd5b61264e3382613446565b80600a6000828254612660919061471d565b9250508190555050565b612672612aff565b73ffffffffffffffffffffffffffffffffffffffff16612690611db1565b73ffffffffffffffffffffffffffffffffffffffff16146126e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dd9061452c565b60405180910390fd5b8060088190555050565b600a5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612792612aff565b73ffffffffffffffffffffffffffffffffffffffff166127b0611db1565b73ffffffffffffffffffffffffffffffffffffffff1614612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd9061452c565b60405180910390fd5b60005b8151811015612897576001600e600084848151811061282b5761282a614a52565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061288f9061494b565b915050612809565b5050565b6128a3612aff565b73ffffffffffffffffffffffffffffffffffffffff166128c1611db1565b73ffffffffffffffffffffffffffffffffffffffff1614612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e9061452c565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b61293c612aff565b73ffffffffffffffffffffffffffffffffffffffff1661295a611db1565b73ffffffffffffffffffffffffffffffffffffffff16146129b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a79061452c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a17906144cc565b60405180910390fd5b612a2981613382565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1682108015612af8575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000612bc4826130d8565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612beb612aff565b73ffffffffffffffffffffffffffffffffffffffff161480612c1e5750612c1d8260000151612c18612aff565b6126f6565b5b80612c635750612c2c612aff565b73ffffffffffffffffffffffffffffffffffffffff16612c4b84610df7565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612c9c576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612d05576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612d6c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612d7985858560016137e5565b612d896000848460000151612b07565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166004600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561306857600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff168110156130675782600001516004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130d185858560016137eb565b5050505050565b6130e0613c44565b6000829050600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff1681101561334b576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161334957600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461322d57809250505061337d565b5b60011561334857818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161461334357809250505061337d565b61322e565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6134608282604051806020016040528060008152506137f1565b5050565b60006134858473ffffffffffffffffffffffffffffffffffffffff16613803565b156135e5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026134ae612aff565b8786866040518563ffffffff1660e01b81526004016134d09493929190614443565b602060405180830381600087803b1580156134ea57600080fd5b505af192505050801561351b57506040513d601f19601f820116820180604052508101906135189190614106565b60015b613595573d806000811461354b576040519150601f19603f3d011682016040523d82523d6000602084013e613550565b606091505b5060008151141561358d576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135ea565b600190505b949350505050565b6060600f8054613601906148e8565b80601f016020809104026020016040519081016040528092919081815260200182805461362d906148e8565b801561367a5780601f1061364f5761010080835404028352916020019161367a565b820191906000526020600020905b81548152906001019060200180831161365d57829003601f168201915b5050505050905090565b606060008214156136cc576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506137e0565b600082905060005b600082146136fe5780806136e79061494b565b915050600a826136f79190614773565b91506136d4565b60008167ffffffffffffffff81111561371a57613719614a81565b5b6040519080825280601f01601f19166020018201604052801561374c5781602001600182028036833780820191505090505b5090505b600085146137d95760018261376591906147fe565b9150600a856137749190614994565b6030613780919061471d565b60f81b81838151811061379657613795614a52565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856137d29190614773565b9450613750565b8093505050505b919050565b50505050565b50505050565b6137fe8383836001613826565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000600160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156138c2576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008414156138fd576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61390a60008683876137e5565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b85811015613b6f57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4838015613b235750613b216000888488613464565b155b15613b5a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81806001019250508080600101915050613aa8565b5080600160006101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555050613bb760008683876137eb565b5050505050565b828054613bca906148e8565b90600052602060002090601f016020900481019282613bec5760008555613c33565b82601f10613c0557805160ff1916838001178555613c33565b82800160010185558215613c33579182015b82811115613c32578251825591602001919060010190613c17565b5b509050613c409190613c87565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115613ca0576000816000905550600101613c88565b5090565b6000613cb7613cb28461464c565b614627565b90508083825260208201905082856020860282011115613cda57613cd9614ab5565b5b60005b85811015613d0a5781613cf08882613d98565b845260208401935060208301925050600181019050613cdd565b5050509392505050565b6000613d27613d2284614678565b614627565b905082815260208101848484011115613d4357613d42614aba565b5b613d4e8482856148a6565b509392505050565b6000613d69613d64846146a9565b614627565b905082815260208101848484011115613d8557613d84614aba565b5b613d908482856148a6565b509392505050565b600081359050613da781614c9a565b92915050565b600082601f830112613dc257613dc1614ab0565b5b8135613dd2848260208601613ca4565b91505092915050565b600081359050613dea81614cb1565b92915050565b600081359050613dff81614cc8565b92915050565b600081519050613e1481614cc8565b92915050565b600082601f830112613e2f57613e2e614ab0565b5b8135613e3f848260208601613d14565b91505092915050565b600082601f830112613e5d57613e5c614ab0565b5b8135613e6d848260208601613d56565b91505092915050565b600081359050613e8581614cdf565b92915050565b600081519050613e9a81614cdf565b92915050565b600060208284031215613eb657613eb5614ac4565b5b6000613ec484828501613d98565b91505092915050565b60008060408385031215613ee457613ee3614ac4565b5b6000613ef285828601613d98565b9250506020613f0385828601613d98565b9150509250929050565b600080600060608486031215613f2657613f25614ac4565b5b6000613f3486828701613d98565b9350506020613f4586828701613d98565b9250506040613f5686828701613e76565b9150509250925092565b60008060008060808587031215613f7a57613f79614ac4565b5b6000613f8887828801613d98565b9450506020613f9987828801613d98565b9350506040613faa87828801613e76565b925050606085013567ffffffffffffffff811115613fcb57613fca614abf565b5b613fd787828801613e1a565b91505092959194509250565b60008060408385031215613ffa57613ff9614ac4565b5b600061400885828601613d98565b925050602061401985828601613ddb565b9150509250929050565b6000806040838503121561403a57614039614ac4565b5b600061404885828601613d98565b925050602061405985828601613e76565b9150509250929050565b60006020828403121561407957614078614ac4565b5b600082013567ffffffffffffffff81111561409757614096614abf565b5b6140a384828501613dad565b91505092915050565b6000602082840312156140c2576140c1614ac4565b5b60006140d084828501613ddb565b91505092915050565b6000602082840312156140ef576140ee614ac4565b5b60006140fd84828501613df0565b91505092915050565b60006020828403121561411c5761411b614ac4565b5b600061412a84828501613e05565b91505092915050565b60006020828403121561414957614148614ac4565b5b600082013567ffffffffffffffff81111561416757614166614abf565b5b61417384828501613e48565b91505092915050565b60006020828403121561419257614191614ac4565b5b60006141a084828501613e76565b91505092915050565b6000602082840312156141bf576141be614ac4565b5b60006141cd84828501613e8b565b91505092915050565b6141df81614832565b82525050565b6141ee81614844565b82525050565b60006141ff826146da565b61420981856146f0565b93506142198185602086016148b5565b61422281614ac9565b840191505092915050565b6000614238826146e5565b6142428185614701565b93506142528185602086016148b5565b61425b81614ac9565b840191505092915050565b6000614271826146e5565b61427b8185614712565b935061428b8185602086016148b5565b80840191505092915050565b60006142a4602683614701565b91506142af82614ada565b604082019050919050565b60006142c7601683614701565b91506142d282614b29565b602082019050919050565b60006142ea601683614701565b91506142f582614b52565b602082019050919050565b600061430d602083614701565b915061431882614b7b565b602082019050919050565b6000614330601583614701565b915061433b82614ba4565b602082019050919050565b6000614353601683614701565b915061435e82614bcd565b602082019050919050565b6000614376601783614701565b915061438182614bf6565b602082019050919050565b6000614399601c83614701565b91506143a482614c1f565b602082019050919050565b60006143bc601683614701565b91506143c782614c48565b602082019050919050565b60006143df600f83614701565b91506143ea82614c71565b602082019050919050565b6143fe8161489c565b82525050565b60006144108285614266565b915061441c8284614266565b91508190509392505050565b600060208201905061443d60008301846141d6565b92915050565b600060808201905061445860008301876141d6565b61446560208301866141d6565b61447260408301856143f5565b818103606083015261448481846141f4565b905095945050505050565b60006020820190506144a460008301846141e5565b92915050565b600060208201905081810360008301526144c4818461422d565b905092915050565b600060208201905081810360008301526144e581614297565b9050919050565b60006020820190508181036000830152614505816142ba565b9050919050565b60006020820190508181036000830152614525816142dd565b9050919050565b6000602082019050818103600083015261454581614300565b9050919050565b6000602082019050818103600083015261456581614323565b9050919050565b6000602082019050818103600083015261458581614346565b9050919050565b600060208201905081810360008301526145a581614369565b9050919050565b600060208201905081810360008301526145c58161438c565b9050919050565b600060208201905081810360008301526145e5816143af565b9050919050565b60006020820190508181036000830152614605816143d2565b9050919050565b600060208201905061462160008301846143f5565b92915050565b6000614631614642565b905061463d828261491a565b919050565b6000604051905090565b600067ffffffffffffffff82111561466757614666614a81565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561469357614692614a81565b5b61469c82614ac9565b9050602081019050919050565b600067ffffffffffffffff8211156146c4576146c3614a81565b5b6146cd82614ac9565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006147288261489c565b91506147338361489c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614768576147676149c5565b5b828201905092915050565b600061477e8261489c565b91506147898361489c565b925082614799576147986149f4565b5b828204905092915050565b60006147af8261489c565b91506147ba8361489c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f3576147f26149c5565b5b828202905092915050565b60006148098261489c565b91506148148361489c565b925082821015614827576148266149c5565b5b828203905092915050565b600061483d8261487c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156148d35780820151818401526020810190506148b8565b838111156148e2576000848401525b50505050565b6000600282049050600182168061490057607f821691505b6020821081141561491457614913614a23565b5b50919050565b61492382614ac9565b810181811067ffffffffffffffff8211171561494257614941614a81565b5b80604052505050565b60006149568261489c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614989576149886149c5565b5b600182019050919050565b600061499f8261489c565b91506149aa8361489c565b9250826149ba576149b96149f4565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f6d617820706572207472616e73616374696f6e20313000000000000000000000600082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b614ca381614832565b8114614cae57600080fd5b50565b614cba81614844565b8114614cc557600080fd5b50565b614cd181614850565b8114614cdc57600080fd5b50565b614ce88161489c565b8114614cf357600080fd5b5056fea264697066735822122067619aee494fef1450a93f253e5cd5c1d3bad7a84fd991e8dca2cd492a44834f64736f6c63430008070033

Deployed Bytecode Sourcemap

49310:4992:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30231:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52251:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32841:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53734:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34344:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33907:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27468:280;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52555:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54071:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35201:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29054:1105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53953:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52998:288;;;;;;;;;;;;;:::i;:::-;;35442:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50010:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28041:713;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49838:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32650:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52769:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49982:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30667:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48406:103;;;;;;;;;;;;;:::i;:::-;;53515:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51319:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53296:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49364:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47755:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49737:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33010:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49568:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49443;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51941:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52355:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34620:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35698:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49527:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50644:667;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49632:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33185:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52097:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50140:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52663:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49488:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34970:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51761:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52454:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48664:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30231:372;30333:4;30385:25;30370:40;;;:11;:40;;;;:105;;;;30442:33;30427:48;;;:11;:48;;;;30370:105;:172;;;;30507:35;30492:50;;;:11;:50;;;;30370:172;:225;;;;30559:36;30583:11;30559:23;:36::i;:::-;30370:225;30350:245;;30231:372;;;:::o;52251:98::-;52295:4;52318:11;:23;52330:10;52318:23;;;;;;;;;;;;;;;;;;;;;;;;;52311:30;;52251:98;:::o;32841:100::-;32895:13;32928:5;32921:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32841:100;:::o;53734:212::-;53795:4;53808:24;53833:20;;;;;;;;;;;53808:45;;53860:14;53884:16;53860:41;;53915:7;:17;;;53933:6;53915:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53908:32;;;;53734:212;;;:::o;34344:204::-;34412:7;34437:16;34445:7;34437;:16::i;:::-;34432:64;;34462:34;;;;;;;;;;;;;;34432:64;34516:15;:24;34532:7;34516:24;;;;;;;;;;;;;;;;;;;;;34509:31;;34344:204;;;:::o;33907:371::-;33980:13;33996:24;34012:7;33996:15;:24::i;:::-;33980:40;;34041:5;34035:11;;:2;:11;;;34031:48;;;34055:24;;;;;;;;;;;;;;34031:48;34112:5;34096:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;34122:37;34139:5;34146:12;:10;:12::i;:::-;34122:16;:37::i;:::-;34121:38;34096:63;34092:138;;;34183:35;;;;;;;;;;;;;;34092:138;34242:28;34251:2;34255:7;34264:5;34242:8;:28::i;:::-;33969:309;33907:371;;:::o;27468:280::-;27521:7;27713:12;;;;;;;;;;;27697:13;;;;;;;;;;;:28;27690:35;;;;27468:280;:::o;52555:101::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52644:4:::1;52623:18;;:25;;;;;;;;;;;;;;;;;;52555:101:::0;:::o;54071:110::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54169:4:::1;54146:20;;:27;;;;;;;;;;;;;;;;;;54071:110:::0;:::o;54189:::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54287:4:::1;54264:20;;:27;;;;;;;;;;;;;;;;;;54189:110:::0;:::o;35201:170::-;35335:28;35345:4;35351:2;35355:7;35335:9;:28::i;:::-;35201:170;;;:::o;29054:1105::-;29143:7;29176:16;29186:5;29176:9;:16::i;:::-;29167:5;:25;29163:61;;29201:23;;;;;;;;;;;;;;29163:61;29235:22;29260:13;;;;;;;;;;;29235:38;;;;29284:19;29314:25;29515:9;29510:557;29530:14;29526:1;:18;29510:557;;;29570:31;29604:11;:14;29616:1;29604:14;;;;;;;;;;;29570:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29641:9;:16;;;29637:73;;;29682:8;;;29637:73;29758:1;29732:28;;:9;:14;;;:28;;;29728:111;;29805:9;:14;;;29785:34;;29728:111;29882:5;29861:26;;:17;:26;;;29857:195;;;29931:5;29916:11;:20;29912:85;;;29972:1;29965:8;;;;;;;;;29912:85;30019:13;;;;;;;29857:195;29551:516;29510:557;29546:3;;;;;;;29510:557;;;;30143:8;;;29054:1105;;;;;:::o;53953:110::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54051:4:::1;54028:20;;:27;;;;;;;;;;;;;;;;;;53953:110:::0;:::o;52998:288::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53055:13:::1;53071:21;53055:37;;53111:42;53103:60;;:81;53180:3;53175:2;53164:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;53103:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53204:42;53196:60;;:81;53273:3;53268:2;53257:8;:13;;;;:::i;:::-;:19;;;;:::i;:::-;53196:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53037:249;52998:288::o:0;35442:185::-;35580:39;35597:4;35603:2;35607:7;35580:39;;;;;;;;;;;;:16;:39::i;:::-;35442:185;;;:::o;50010:34::-;;;;:::o;28041:713::-;28108:7;28128:22;28153:13;;;;;;;;;;;28128:38;;;;28177:19;28372:9;28367:328;28387:14;28383:1;:18;28367:328;;;28427:31;28461:11;:14;28473:1;28461:14;;;;;;;;;;;28427:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28499:9;:16;;;28494:186;;28559:5;28544:11;:20;28540:85;;;28600:1;28593:8;;;;;;;;28540:85;28647:13;;;;;;;28494:186;28408:287;28403:3;;;;;;;28367:328;;;;28723:23;;;;;;;;;;;;;;28041:713;;;;:::o;49838:80::-;;;;;;;;;;;;;:::o;32650:124::-;32714:7;32741:20;32753:7;32741:11;:20::i;:::-;:25;;;32734:32;;32650:124;;;:::o;52769:101::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52857:5:::1;52841:13;:21;;;;52769:101:::0;:::o;49982:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30667:206::-;30731:7;30772:1;30755:19;;:5;:19;;;30751:60;;;30783:28;;;;;;;;;;;;;;30751:60;30837:12;:19;30850:5;30837:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30829:36;;30822:43;;30667:206;;;:::o;48406:103::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48471:30:::1;48498:1;48471:18;:30::i;:::-;48406:103::o:0;53515:212::-;53576:4;53589:24;53614:20;;;;;;;;;;;53589:45;;53641:14;53665:16;53641:41;;53696:7;:17;;;53714:6;53696:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53689:32;;;;53515:212;;;:::o;51319:430::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51418:1:::1;51400:8;:15;:19;51392:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;51485:17;;51466:8;:15;:36;;51458:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;49432:4;51565:8;:15;51548:14;;:32;;;;:::i;:::-;:45;;51540:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51635:6;51631:80;51651:8;:15;51647:1;:19;51631:80;;;51686:25;51696:8;51705:1;51696:11;;;;;;;;:::i;:::-;;;;;;;;51709:1;51686:9;:25::i;:::-;51668:3;;;;;:::i;:::-;;;;51631:80;;;;51740:1;51722:14;;:19;;;;;;;:::i;:::-;;;;;;;;51319:430:::0;:::o;53296:212::-;53357:4;53370:24;53395:20;;;;;;;;;;;53370:45;;53422:14;53446:16;53422:41;;53477:7;:17;;;53495:6;53477:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53470:32;;;;53296:212;;;:::o;49364:35::-;;;;:::o;47755:87::-;47801:7;47828:6;;;;;;;;;;;47821:13;;47755:87;:::o;49737:80::-;;;;;;;;;;;;;:::o;33010:104::-;33066:13;33099:7;33092:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33010:104;:::o;49568:38::-;;;;;;;;;;;;;:::o;49443:::-;;;;:::o;51941:148::-;51990:4;52032;52014:22;;:14;;;;;;;;;;;:22;;;52006:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;52079:1;52072:8;;51941:148;:::o;52355:92::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52435:4:::1;52425:7;:14;;;;;;;;;;;;:::i;:::-;;52355:92:::0;:::o;34620:279::-;34723:12;:10;:12::i;:::-;34711:24;;:8;:24;;;34707:54;;;34744:17;;;;;;;;;;;;;;34707:54;34819:8;34774:18;:32;34793:12;:10;:12::i;:::-;34774:32;;;;;;;;;;;;;;;:42;34807:8;34774:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34872:8;34843:48;;34858:12;:10;:12::i;:::-;34843:48;;;34882:8;34843:48;;;;;;:::i;:::-;;;;;;;;34620:279;;:::o;35698:342::-;35865:28;35875:4;35881:2;35885:7;35865:9;:28::i;:::-;35909:48;35932:4;35938:2;35942:7;35951:5;35909:22;:48::i;:::-;35904:129;;35981:40;;;;;;;;;;;;;;35904:129;35698:342;;;;:::o;49527:34::-;;;;;;;;;;;;;:::o;50644:667::-;50730:4;50712:22;;:14;;;;;;;;;;;:22;;;50704:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;50791:4;50773:22;;:14;:12;:14::i;:::-;:22;;;:57;;;;50829:1;50799:27;50815:10;50799:15;:27::i;:::-;:31;50773:57;:93;;;;50865:1;50835:27;50851:10;50835:15;:27::i;:::-;:31;50773:93;:128;;;;50900:1;50870:27;50886:10;50870:15;:27::i;:::-;:31;50773:128;50765:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;50963:1;50954:6;:10;50946:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;51021:17;;51011:6;:27;;51003:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49432:4;51101:6;51084:14;;:23;;;;:::i;:::-;:35;;51076:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51178:13;;51165:9;:26;;51157:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;51239:29;51249:10;51261:6;51239:9;:29::i;:::-;51297:6;51279:14;;:24;;;;;;;:::i;:::-;;;;;;;;50644:667;:::o;49632:80::-;;;;;;;;;;;;;:::o;33185:318::-;33258:13;33289:16;33297:7;33289;:16::i;:::-;33284:59;;33314:29;;;;;;;;;;;;;;33284:59;33356:21;33380:10;:8;:10::i;:::-;33356:34;;33433:1;33414:7;33408:21;:26;;:87;;;;;;;;;;;;;;;;;33461:7;33470:18;:7;:16;:18::i;:::-;33444:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33408:87;33401:94;;;33185:318;;;:::o;52097:147::-;52143:4;52187;52165:26;;:18;;;;;;;;;;;:26;;;52157:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;52234:1;52227:8;;52097:147;:::o;50140:497::-;50222:4;50200:26;;:18;;;;;;;;;;;:26;;;50192:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50274:1;50265:6;:10;50257:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;50332:17;;50322:6;:27;;50314:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49432:4;50412:6;50395:14;;:23;;;;:::i;:::-;:36;;50387:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;50503:6;50490:10;;:19;;;;:::i;:::-;50477:9;:32;;50469:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;50565:29;50575:10;50587:6;50565:9;:29::i;:::-;50623:6;50605:14;;:24;;;;;;;:::i;:::-;;;;;;;;50140:497;:::o;52663:97::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52747:5:::1;52734:10;:18;;;;52663:97:::0;:::o;49488:30::-;;;;:::o;34970:164::-;35067:4;35091:18;:25;35110:5;35091:25;;;;;;;;;;;;;;;:35;35117:8;35091:35;;;;;;;;;;;;;;;;;;;;;;;;;35084:42;;34970:164;;;;:::o;51761:168::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51843:6:::1;51839:82;51855:8;:15;51851:1;:19;51839:82;;;51917:4;51890:11;:24;51902:8;51911:1;51902:11;;;;;;;;:::i;:::-;;;;;;;;51890:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;51872:3;;;;;:::i;:::-;;;;51839:82;;;;51761:168:::0;:::o;52454:95::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52537:4:::1;52520:14;;:21;;;;;;;;;;;;;;;;;;52454:95:::0;:::o;48664:201::-;47986:12;:10;:12::i;:::-;47975:23;;:7;:5;:7::i;:::-;:23;;;47967:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48773:1:::1;48753:22;;:8;:22;;;;48745:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48829:28;48848:8;48829:18;:28::i;:::-;48664:201:::0;:::o;13473:157::-;13558:4;13597:25;13582:40;;;:11;:40;;;;13575:47;;13473:157;;;:::o;36295:144::-;36352:4;36386:13;;;;;;;;;;;36376:23;;:7;:23;:55;;;;;36404:11;:20;36416:7;36404:20;;;;;;;;;;;:27;;;;;;;;;;;;36403:28;36376:55;36369:62;;36295:144;;;:::o;23950:98::-;24003:7;24030:10;24023:17;;23950:98;:::o;43511:196::-;43653:2;43626:15;:24;43642:7;43626:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43691:7;43687:2;43671:28;;43680:5;43671:28;;;;;;;;;;;;43511:196;;;:::o;39012:2112::-;39127:35;39165:20;39177:7;39165:11;:20::i;:::-;39127:58;;39198:22;39240:13;:18;;;39224:34;;:12;:10;:12::i;:::-;:34;;;:101;;;;39275:50;39292:13;:18;;;39312:12;:10;:12::i;:::-;39275:16;:50::i;:::-;39224:101;:154;;;;39366:12;:10;:12::i;:::-;39342:36;;:20;39354:7;39342:11;:20::i;:::-;:36;;;39224:154;39198:181;;39397:17;39392:66;;39423:35;;;;;;;;;;;;;;39392:66;39495:4;39473:26;;:13;:18;;;:26;;;39469:67;;39508:28;;;;;;;;;;;;;;39469:67;39565:1;39551:16;;:2;:16;;;39547:52;;;39576:23;;;;;;;;;;;;;;39547:52;39612:43;39634:4;39640:2;39644:7;39653:1;39612:21;:43::i;:::-;39720:49;39737:1;39741:7;39750:13;:18;;;39720:8;:49::i;:::-;40095:1;40065:12;:18;40078:4;40065:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40139:1;40111:12;:16;40124:2;40111:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40185:2;40157:11;:20;40169:7;40157:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;40247:15;40202:11;:20;40214:7;40202:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;40515:19;40547:1;40537:7;:11;40515:33;;40608:1;40567:43;;:11;:24;40579:11;40567:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;40563:445;;;40792:13;;;;;;;;;;;40778:27;;:11;:27;40774:219;;;40862:13;:18;;;40830:11;:24;40842:11;40830:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;40945:13;:28;;;40903:11;:24;40915:11;40903:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;40774:219;40563:445;40040:979;41055:7;41051:2;41036:27;;41045:4;41036:27;;;;;;;;;;;;41074:42;41095:4;41101:2;41105:7;41114:1;41074:20;:42::i;:::-;39116:2008;;39012:2112;;;:::o;31505:1083::-;31566:21;;:::i;:::-;31600:12;31615:7;31600:22;;31671:13;;;;;;;;;;;31664:20;;:4;:20;31660:861;;;31705:31;31739:11;:17;31751:4;31739:17;;;;;;;;;;;31705:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31780:9;:16;;;31775:731;;31851:1;31825:28;;:9;:14;;;:28;;;31821:101;;31889:9;31882:16;;;;;;31821:101;32226:261;32233:4;32226:261;;;32266:6;;;;;;;;32311:11;:17;32323:4;32311:17;;;;;;;;;;;32299:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32385:1;32359:28;;:9;:14;;;:28;;;32355:109;;32427:9;32420:16;;;;;;32355:109;32226:261;;;31775:731;31686:835;31660:861;32549:31;;;;;;;;;;;;;;31505:1083;;;;:::o;49025:191::-;49099:16;49118:6;;;;;;;;;;;49099:25;;49144:8;49135:6;;:17;;;;;;;;;;;;;;;;;;49199:8;49168:40;;49189:8;49168:40;;;;;;;;;;;;49088:128;49025:191;:::o;36447:104::-;36516:27;36526:2;36530:8;36516:27;;;;;;;;;;;;:9;:27::i;:::-;36447:104;;:::o;44272:790::-;44427:4;44448:15;:2;:13;;;:15::i;:::-;44444:611;;;44500:2;44484:36;;;44521:12;:10;:12::i;:::-;44535:4;44541:7;44550:5;44484:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44480:520;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44747:1;44730:6;:13;:18;44726:259;;;44780:40;;;;;;;;;;;;;;44726:259;44935:6;44929:13;44920:6;44916:2;44912:15;44905:38;44480:520;44617:45;;;44607:55;;;:6;:55;;;;44600:62;;;;;44444:611;45039:4;45032:11;;44272:790;;;;;;;:::o;52880:108::-;52940:13;52973:7;52966:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52880:108;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;45710:159::-;;;;;:::o;46528:158::-;;;;;:::o;36914:163::-;37037:32;37043:2;37047:8;37057:5;37064:4;37037:5;:32::i;:::-;36914:163;;;:::o;3390:326::-;3450:4;3707:1;3685:7;:19;;;:23;3678:30;;3390:326;;;:::o;37336:1422::-;37475:20;37498:13;;;;;;;;;;;37475:36;;;;37540:1;37526:16;;:2;:16;;;37522:48;;;37551:19;;;;;;;;;;;;;;37522:48;37597:1;37585:8;:13;37581:44;;;37607:18;;;;;;;;;;;;;;37581:44;37638:61;37668:1;37672:2;37676:12;37690:8;37638:21;:61::i;:::-;38012:8;37977:12;:16;37990:2;37977:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38076:8;38036:12;:16;38049:2;38036:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38135:2;38102:11;:25;38114:12;38102:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;38202:15;38152:11;:25;38164:12;38152:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;38235:20;38258:12;38235:35;;38292:9;38287:328;38307:8;38303:1;:12;38287:328;;;38371:12;38367:2;38346:38;;38363:1;38346:38;;;;;;;;;;;;38407:4;:68;;;;;38416:59;38447:1;38451:2;38455:12;38469:5;38416:22;:59::i;:::-;38415:60;38407:68;38403:164;;;38507:40;;;;;;;;;;;;;;38403:164;38585:14;;;;;;;38317:3;;;;;;;38287:328;;;;38655:12;38631:13;;:37;;;;;;;;;;;;;;;;;;37952:728;38690:60;38719:1;38723:2;38727:12;38741:8;38690:20;:60::i;:::-;37464:1294;37336:1422;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:143::-;3472:5;3503:6;3497:13;3488:22;;3519:33;3546:5;3519:33;:::i;:::-;3415:143;;;;:::o;3564:329::-;3623:6;3672:2;3660:9;3651:7;3647:23;3643:32;3640:119;;;3678:79;;:::i;:::-;3640:119;3798:1;3823:53;3868:7;3859:6;3848:9;3844:22;3823:53;:::i;:::-;3813:63;;3769:117;3564:329;;;;:::o;3899:474::-;3967:6;3975;4024:2;4012:9;4003:7;3999:23;3995:32;3992:119;;;4030:79;;:::i;:::-;3992:119;4150:1;4175:53;4220:7;4211:6;4200:9;4196:22;4175:53;:::i;:::-;4165:63;;4121:117;4277:2;4303:53;4348:7;4339:6;4328:9;4324:22;4303:53;:::i;:::-;4293:63;;4248:118;3899:474;;;;;:::o;4379:619::-;4456:6;4464;4472;4521:2;4509:9;4500:7;4496:23;4492:32;4489:119;;;4527:79;;:::i;:::-;4489:119;4647:1;4672:53;4717:7;4708:6;4697:9;4693:22;4672:53;:::i;:::-;4662:63;;4618:117;4774:2;4800:53;4845:7;4836:6;4825:9;4821:22;4800:53;:::i;:::-;4790:63;;4745:118;4902:2;4928:53;4973:7;4964:6;4953:9;4949:22;4928:53;:::i;:::-;4918:63;;4873:118;4379:619;;;;;:::o;5004:943::-;5099:6;5107;5115;5123;5172:3;5160:9;5151:7;5147:23;5143:33;5140:120;;;5179:79;;:::i;:::-;5140:120;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:117;;;5763:79;;:::i;:::-;5727:117;5868:62;5922:7;5913:6;5902:9;5898:22;5868:62;:::i;:::-;5858:72;;5653:287;5004:943;;;;;;;:::o;5953:468::-;6018:6;6026;6075:2;6063:9;6054:7;6050:23;6046:32;6043:119;;;6081:79;;:::i;:::-;6043:119;6201:1;6226:53;6271:7;6262:6;6251:9;6247:22;6226:53;:::i;:::-;6216:63;;6172:117;6328:2;6354:50;6396:7;6387:6;6376:9;6372:22;6354:50;:::i;:::-;6344:60;;6299:115;5953:468;;;;;:::o;6427:474::-;6495:6;6503;6552:2;6540:9;6531:7;6527:23;6523:32;6520:119;;;6558:79;;:::i;:::-;6520:119;6678:1;6703:53;6748:7;6739:6;6728:9;6724:22;6703:53;:::i;:::-;6693:63;;6649:117;6805:2;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6776:118;6427:474;;;;;:::o;6907:539::-;6991:6;7040:2;7028:9;7019:7;7015:23;7011:32;7008:119;;;7046:79;;:::i;:::-;7008:119;7194:1;7183:9;7179:17;7166:31;7224:18;7216:6;7213:30;7210:117;;;7246:79;;:::i;:::-;7210:117;7351:78;7421:7;7412:6;7401:9;7397:22;7351:78;:::i;:::-;7341:88;;7137:302;6907:539;;;;:::o;7452:323::-;7508:6;7557:2;7545:9;7536:7;7532:23;7528:32;7525:119;;;7563:79;;:::i;:::-;7525:119;7683:1;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7654:114;7452:323;;;;:::o;7781:327::-;7839:6;7888:2;7876:9;7867:7;7863:23;7859:32;7856:119;;;7894:79;;:::i;:::-;7856:119;8014:1;8039:52;8083:7;8074:6;8063:9;8059:22;8039:52;:::i;:::-;8029:62;;7985:116;7781:327;;;;:::o;8114:349::-;8183:6;8232:2;8220:9;8211:7;8207:23;8203:32;8200:119;;;8238:79;;:::i;:::-;8200:119;8358:1;8383:63;8438:7;8429:6;8418:9;8414:22;8383:63;:::i;:::-;8373:73;;8329:127;8114:349;;;;:::o;8469:509::-;8538:6;8587:2;8575:9;8566:7;8562:23;8558:32;8555:119;;;8593:79;;:::i;:::-;8555:119;8741:1;8730:9;8726:17;8713:31;8771:18;8763:6;8760:30;8757:117;;;8793:79;;:::i;:::-;8757:117;8898:63;8953:7;8944:6;8933:9;8929:22;8898:63;:::i;:::-;8888:73;;8684:287;8469:509;;;;:::o;8984:329::-;9043:6;9092:2;9080:9;9071:7;9067:23;9063:32;9060:119;;;9098:79;;:::i;:::-;9060:119;9218:1;9243:53;9288:7;9279:6;9268:9;9264:22;9243:53;:::i;:::-;9233:63;;9189:117;8984:329;;;;:::o;9319:351::-;9389:6;9438:2;9426:9;9417:7;9413:23;9409:32;9406:119;;;9444:79;;:::i;:::-;9406:119;9564:1;9589:64;9645:7;9636:6;9625:9;9621:22;9589:64;:::i;:::-;9579:74;;9535:128;9319:351;;;;:::o;9676:118::-;9763:24;9781:5;9763:24;:::i;:::-;9758:3;9751:37;9676:118;;:::o;9800:109::-;9881:21;9896:5;9881:21;:::i;:::-;9876:3;9869:34;9800:109;;:::o;9915:360::-;10001:3;10029:38;10061:5;10029:38;:::i;:::-;10083:70;10146:6;10141:3;10083:70;:::i;:::-;10076:77;;10162:52;10207:6;10202:3;10195:4;10188:5;10184:16;10162:52;:::i;:::-;10239:29;10261:6;10239:29;:::i;:::-;10234:3;10230:39;10223:46;;10005:270;9915:360;;;;:::o;10281:364::-;10369:3;10397:39;10430:5;10397:39;:::i;:::-;10452:71;10516:6;10511:3;10452:71;:::i;:::-;10445:78;;10532:52;10577:6;10572:3;10565:4;10558:5;10554:16;10532:52;:::i;:::-;10609:29;10631:6;10609:29;:::i;:::-;10604:3;10600:39;10593:46;;10373:272;10281:364;;;;:::o;10651:377::-;10757:3;10785:39;10818:5;10785:39;:::i;:::-;10840:89;10922:6;10917:3;10840:89;:::i;:::-;10833:96;;10938:52;10983:6;10978:3;10971:4;10964:5;10960:16;10938:52;:::i;:::-;11015:6;11010:3;11006:16;10999:23;;10761:267;10651:377;;;;:::o;11034:366::-;11176:3;11197:67;11261:2;11256:3;11197:67;:::i;:::-;11190:74;;11273:93;11362:3;11273:93;:::i;:::-;11391:2;11386:3;11382:12;11375:19;;11034:366;;;:::o;11406:::-;11548:3;11569:67;11633:2;11628:3;11569:67;:::i;:::-;11562:74;;11645:93;11734:3;11645:93;:::i;:::-;11763:2;11758:3;11754:12;11747:19;;11406:366;;;:::o;11778:::-;11920:3;11941:67;12005:2;12000:3;11941:67;:::i;:::-;11934:74;;12017:93;12106:3;12017:93;:::i;:::-;12135:2;12130:3;12126:12;12119:19;;11778:366;;;:::o;12150:::-;12292:3;12313:67;12377:2;12372:3;12313:67;:::i;:::-;12306:74;;12389:93;12478:3;12389:93;:::i;:::-;12507:2;12502:3;12498:12;12491:19;;12150:366;;;:::o;12522:::-;12664:3;12685:67;12749:2;12744:3;12685:67;:::i;:::-;12678:74;;12761:93;12850:3;12761:93;:::i;:::-;12879:2;12874:3;12870:12;12863:19;;12522:366;;;:::o;12894:::-;13036:3;13057:67;13121:2;13116:3;13057:67;:::i;:::-;13050:74;;13133:93;13222:3;13133:93;:::i;:::-;13251:2;13246:3;13242:12;13235:19;;12894:366;;;:::o;13266:::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13638:366;;;:::o;14010:::-;14152:3;14173:67;14237:2;14232:3;14173:67;:::i;:::-;14166:74;;14249:93;14338:3;14249:93;:::i;:::-;14367:2;14362:3;14358:12;14351:19;;14010:366;;;:::o;14382:::-;14524:3;14545:67;14609:2;14604:3;14545:67;:::i;:::-;14538:74;;14621:93;14710:3;14621:93;:::i;:::-;14739:2;14734:3;14730:12;14723:19;;14382:366;;;:::o;14754:118::-;14841:24;14859:5;14841:24;:::i;:::-;14836:3;14829:37;14754:118;;:::o;14878:435::-;15058:3;15080:95;15171:3;15162:6;15080:95;:::i;:::-;15073:102;;15192:95;15283:3;15274:6;15192:95;:::i;:::-;15185:102;;15304:3;15297:10;;14878:435;;;;;:::o;15319:222::-;15412:4;15450:2;15439:9;15435:18;15427:26;;15463:71;15531:1;15520:9;15516:17;15507:6;15463:71;:::i;:::-;15319:222;;;;:::o;15547:640::-;15742:4;15780:3;15769:9;15765:19;15757:27;;15794:71;15862:1;15851:9;15847:17;15838:6;15794:71;:::i;:::-;15875:72;15943:2;15932:9;15928:18;15919:6;15875:72;:::i;:::-;15957;16025:2;16014:9;16010:18;16001:6;15957:72;:::i;:::-;16076:9;16070:4;16066:20;16061:2;16050:9;16046:18;16039:48;16104:76;16175:4;16166:6;16104:76;:::i;:::-;16096:84;;15547:640;;;;;;;:::o;16193:210::-;16280:4;16318:2;16307:9;16303:18;16295:26;;16331:65;16393:1;16382:9;16378:17;16369:6;16331:65;:::i;:::-;16193:210;;;;:::o;16409:313::-;16522:4;16560:2;16549:9;16545:18;16537:26;;16609:9;16603:4;16599:20;16595:1;16584:9;16580:17;16573:47;16637:78;16710:4;16701:6;16637:78;:::i;:::-;16629:86;;16409:313;;;;:::o;16728:419::-;16894:4;16932:2;16921:9;16917:18;16909:26;;16981:9;16975:4;16971:20;16967:1;16956:9;16952:17;16945:47;17009:131;17135:4;17009:131;:::i;:::-;17001:139;;16728:419;;;:::o;17153:::-;17319:4;17357:2;17346:9;17342:18;17334:26;;17406:9;17400:4;17396:20;17392:1;17381:9;17377:17;17370:47;17434:131;17560:4;17434:131;:::i;:::-;17426:139;;17153:419;;;:::o;17578:::-;17744:4;17782:2;17771:9;17767:18;17759:26;;17831:9;17825:4;17821:20;17817:1;17806:9;17802:17;17795:47;17859:131;17985:4;17859:131;:::i;:::-;17851:139;;17578:419;;;:::o;18003:::-;18169:4;18207:2;18196:9;18192:18;18184:26;;18256:9;18250:4;18246:20;18242:1;18231:9;18227:17;18220:47;18284:131;18410:4;18284:131;:::i;:::-;18276:139;;18003:419;;;:::o;18428:::-;18594:4;18632:2;18621:9;18617:18;18609:26;;18681:9;18675:4;18671:20;18667:1;18656:9;18652:17;18645:47;18709:131;18835:4;18709:131;:::i;:::-;18701:139;;18428:419;;;:::o;18853:::-;19019:4;19057:2;19046:9;19042:18;19034:26;;19106:9;19100:4;19096:20;19092:1;19081:9;19077:17;19070:47;19134:131;19260:4;19134:131;:::i;:::-;19126:139;;18853:419;;;:::o;19278:::-;19444:4;19482:2;19471:9;19467:18;19459:26;;19531:9;19525:4;19521:20;19517:1;19506:9;19502:17;19495:47;19559:131;19685:4;19559:131;:::i;:::-;19551:139;;19278:419;;;:::o;19703:::-;19869:4;19907:2;19896:9;19892:18;19884:26;;19956:9;19950:4;19946:20;19942:1;19931:9;19927:17;19920:47;19984:131;20110:4;19984:131;:::i;:::-;19976:139;;19703:419;;;:::o;20128:::-;20294:4;20332:2;20321:9;20317:18;20309:26;;20381:9;20375:4;20371:20;20367:1;20356:9;20352:17;20345:47;20409:131;20535:4;20409:131;:::i;:::-;20401:139;;20128:419;;;:::o;20553:::-;20719:4;20757:2;20746:9;20742:18;20734:26;;20806:9;20800:4;20796:20;20792:1;20781:9;20777:17;20770:47;20834:131;20960:4;20834:131;:::i;:::-;20826:139;;20553:419;;;:::o;20978:222::-;21071:4;21109:2;21098:9;21094:18;21086:26;;21122:71;21190:1;21179:9;21175:17;21166:6;21122:71;:::i;:::-;20978:222;;;;:::o;21206:129::-;21240:6;21267:20;;:::i;:::-;21257:30;;21296:33;21324:4;21316:6;21296:33;:::i;:::-;21206:129;;;:::o;21341:75::-;21374:6;21407:2;21401:9;21391:19;;21341:75;:::o;21422:311::-;21499:4;21589:18;21581:6;21578:30;21575:56;;;21611:18;;:::i;:::-;21575:56;21661:4;21653:6;21649:17;21641:25;;21721:4;21715;21711:15;21703:23;;21422:311;;;:::o;21739:307::-;21800:4;21890:18;21882:6;21879:30;21876:56;;;21912:18;;:::i;:::-;21876:56;21950:29;21972:6;21950:29;:::i;:::-;21942:37;;22034:4;22028;22024:15;22016:23;;21739:307;;;:::o;22052:308::-;22114:4;22204:18;22196:6;22193:30;22190:56;;;22226:18;;:::i;:::-;22190:56;22264:29;22286:6;22264:29;:::i;:::-;22256:37;;22348:4;22342;22338:15;22330:23;;22052:308;;;:::o;22366:98::-;22417:6;22451:5;22445:12;22435:22;;22366:98;;;:::o;22470:99::-;22522:6;22556:5;22550:12;22540:22;;22470:99;;;:::o;22575:168::-;22658:11;22692:6;22687:3;22680:19;22732:4;22727:3;22723:14;22708:29;;22575:168;;;;:::o;22749:169::-;22833:11;22867:6;22862:3;22855:19;22907:4;22902:3;22898:14;22883:29;;22749:169;;;;:::o;22924:148::-;23026:11;23063:3;23048:18;;22924:148;;;;:::o;23078:305::-;23118:3;23137:20;23155:1;23137:20;:::i;:::-;23132:25;;23171:20;23189:1;23171:20;:::i;:::-;23166:25;;23325:1;23257:66;23253:74;23250:1;23247:81;23244:107;;;23331:18;;:::i;:::-;23244:107;23375:1;23372;23368:9;23361:16;;23078:305;;;;:::o;23389:185::-;23429:1;23446:20;23464:1;23446:20;:::i;:::-;23441:25;;23480:20;23498:1;23480:20;:::i;:::-;23475:25;;23519:1;23509:35;;23524:18;;:::i;:::-;23509:35;23566:1;23563;23559:9;23554:14;;23389:185;;;;:::o;23580:348::-;23620:7;23643:20;23661:1;23643:20;:::i;:::-;23638:25;;23677:20;23695:1;23677:20;:::i;:::-;23672:25;;23865:1;23797:66;23793:74;23790:1;23787:81;23782:1;23775:9;23768:17;23764:105;23761:131;;;23872:18;;:::i;:::-;23761:131;23920:1;23917;23913:9;23902:20;;23580:348;;;;:::o;23934:191::-;23974:4;23994:20;24012:1;23994:20;:::i;:::-;23989:25;;24028:20;24046:1;24028:20;:::i;:::-;24023:25;;24067:1;24064;24061:8;24058:34;;;24072:18;;:::i;:::-;24058:34;24117:1;24114;24110:9;24102:17;;23934:191;;;;:::o;24131:96::-;24168:7;24197:24;24215:5;24197:24;:::i;:::-;24186:35;;24131:96;;;:::o;24233:90::-;24267:7;24310:5;24303:13;24296:21;24285:32;;24233:90;;;:::o;24329:149::-;24365:7;24405:66;24398:5;24394:78;24383:89;;24329:149;;;:::o;24484:126::-;24521:7;24561:42;24554:5;24550:54;24539:65;;24484:126;;;:::o;24616:77::-;24653:7;24682:5;24671:16;;24616:77;;;:::o;24699:154::-;24783:6;24778:3;24773;24760:30;24845:1;24836:6;24831:3;24827:16;24820:27;24699:154;;;:::o;24859:307::-;24927:1;24937:113;24951:6;24948:1;24945:13;24937:113;;;25036:1;25031:3;25027:11;25021:18;25017:1;25012:3;25008:11;25001:39;24973:2;24970:1;24966:10;24961:15;;24937:113;;;25068:6;25065:1;25062:13;25059:101;;;25148:1;25139:6;25134:3;25130:16;25123:27;25059:101;24908:258;24859:307;;;:::o;25172:320::-;25216:6;25253:1;25247:4;25243:12;25233:22;;25300:1;25294:4;25290:12;25321:18;25311:81;;25377:4;25369:6;25365:17;25355:27;;25311:81;25439:2;25431:6;25428:14;25408:18;25405:38;25402:84;;;25458:18;;:::i;:::-;25402:84;25223:269;25172:320;;;:::o;25498:281::-;25581:27;25603:4;25581:27;:::i;:::-;25573:6;25569:40;25711:6;25699:10;25696:22;25675:18;25663:10;25660:34;25657:62;25654:88;;;25722:18;;:::i;:::-;25654:88;25762:10;25758:2;25751:22;25541:238;25498:281;;:::o;25785:233::-;25824:3;25847:24;25865:5;25847:24;:::i;:::-;25838:33;;25893:66;25886:5;25883:77;25880:103;;;25963:18;;:::i;:::-;25880:103;26010:1;26003:5;25999:13;25992:20;;25785:233;;;:::o;26024:176::-;26056:1;26073:20;26091:1;26073:20;:::i;:::-;26068:25;;26107:20;26125:1;26107:20;:::i;:::-;26102:25;;26146:1;26136:35;;26151:18;;:::i;:::-;26136:35;26192:1;26189;26185:9;26180:14;;26024:176;;;;:::o;26206:180::-;26254:77;26251:1;26244:88;26351:4;26348:1;26341:15;26375:4;26372:1;26365:15;26392:180;26440:77;26437:1;26430:88;26537:4;26534:1;26527:15;26561:4;26558:1;26551:15;26578:180;26626:77;26623:1;26616:88;26723:4;26720:1;26713:15;26747:4;26744:1;26737:15;26764:180;26812:77;26809:1;26802:88;26909:4;26906:1;26899:15;26933:4;26930:1;26923:15;26950:180;26998:77;26995:1;26988:88;27095:4;27092:1;27085:15;27119:4;27116:1;27109:15;27136:117;27245:1;27242;27235:12;27259:117;27368:1;27365;27358:12;27382:117;27491:1;27488;27481:12;27505:117;27614:1;27611;27604:12;27628:117;27737:1;27734;27727:12;27751:102;27792:6;27843:2;27839:7;27834:2;27827:5;27823:14;27819:28;27809:38;;27751:102;;;:::o;27859:225::-;27999:34;27995:1;27987:6;27983:14;27976:58;28068:8;28063:2;28055:6;28051:15;28044:33;27859:225;:::o;28090:172::-;28230:24;28226:1;28218:6;28214:14;28207:48;28090:172;:::o;28268:::-;28408:24;28404:1;28396:6;28392:14;28385:48;28268:172;:::o;28446:182::-;28586:34;28582:1;28574:6;28570:14;28563:58;28446:182;:::o;28634:171::-;28774:23;28770:1;28762:6;28758:14;28751:47;28634:171;:::o;28811:172::-;28951:24;28947:1;28939:6;28935:14;28928:48;28811:172;:::o;28989:173::-;29129:25;29125:1;29117:6;29113:14;29106:49;28989:173;:::o;29168:178::-;29308:30;29304:1;29296:6;29292:14;29285:54;29168:178;:::o;29352:172::-;29492:24;29488:1;29480:6;29476:14;29469:48;29352:172;:::o;29530:165::-;29670:17;29666:1;29658:6;29654:14;29647:41;29530:165;:::o;29701:122::-;29774:24;29792:5;29774:24;:::i;:::-;29767:5;29764:35;29754:63;;29813:1;29810;29803:12;29754:63;29701:122;:::o;29829:116::-;29899:21;29914:5;29899:21;:::i;:::-;29892:5;29889:32;29879:60;;29935:1;29932;29925:12;29879:60;29829:116;:::o;29951:120::-;30023:23;30040:5;30023:23;:::i;:::-;30016:5;30013:34;30003:62;;30061:1;30058;30051:12;30003:62;29951:120;:::o;30077:122::-;30150:24;30168:5;30150:24;:::i;:::-;30143:5;30140:35;30130:63;;30189:1;30186;30179:12;30130:63;30077:122;:::o

Swarm Source

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