ETH Price: $2,944.76 (-4.00%)
Gas: 1 Gwei

Token

LIMAH (LIMH)
 

Overview

Max Total Supply

334 LIMH

Holders

175

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
simonemonte.eth
Balance
1 LIMH
0x2da903666829f302b0501f76144339213259c260
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:
Limah

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-15
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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



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



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



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



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 tokenId);

    /**
     * @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



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/ERC721/ERC721.sol



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/Limah.sol


pragma solidity ^0.8.0;






contract Limah is ERC721, ERC721Enumerable, Ownable {
    using SafeMath for uint256;
    using SafeMath for uint64;
    
    uint256 public constant maxSupply = 555;
    uint256 public constant reservedCount = 13;
    uint256 private _price = 0.1 ether;
    uint256 private _reservedClaimed = 0;
    uint256 public currentMintId = 1;

    bool private _saleStarted;
    bool private _presaleStarted;
    string public baseURI;
    mapping(address => uint256) public whitelistBalance;
    mapping(address => uint256) public whitelistMinted;
    mapping(uint256 => uint64) public metadata;

    event Minted(address account, uint256 amount, uint256 cost);
    event PresaleMinted(address account, uint256 amount, uint256 cost);

    constructor() ERC721("LIMAH", "LIMH") {
        _saleStarted = false;
        _presaleStarted = false;

        whitelistBalance[0xBcc462c488F8DA534aF98F0f2E529CDed02D9CB5] = 4;
        whitelistBalance[0x8e258E1Aa12b8f165B69f760575b90d877AfE9b6] = 3;
        whitelistBalance[0xE39CB1c2f6dC891A1685ee411B4D36827e4F860E] = 1;
        whitelistBalance[0x881475210E75b814D5b711090a064942b6f30605] = 1;
        whitelistBalance[0x74E094Be60Be8DB1e39a0b2aB395b888b478B6De] = 3;
        whitelistBalance[0x149884b699FE3E1b042f85fA3B54843EB689b2d4] = 3;
        whitelistBalance[0x62756BEdC2c98f80cE83E45BC9f8062345b65d8e] = 4;
        whitelistBalance[0x80965566ceDc9b9C8aeDa24bbc12e44eb476dEf6] = 2;
        whitelistBalance[0xE4Abc24b5A6732a8945A85B768B4a3120CB2E37C] = 1;
        whitelistBalance[0x3c64DA143Bf741A3fa833Dd46900d28EFE8893B3] = 5;
        whitelistBalance[0x1024A91b5Ba768601e2bf4f28D2458885652cFa4] = 4;
        whitelistBalance[0x4003EC66153c090ed649CE822E30CaBa11727527] = 2;
        whitelistBalance[0xBc68c859fc8Ea2de63C60F236688dEE448C8B70e] = 1;
        whitelistBalance[0x1Ce7A7F4a2af7c690A7CBEce89e919753E409aDD] = 2;
        whitelistBalance[0xfb9699DE6f7eFc7F7D64A40852a68602ac7ef403] = 1;
        whitelistBalance[0x6D21b1D31A6Aa760F396729D85460e2F887B8764] = 1;
        whitelistBalance[0xa65f5eBFfd31ed58cC3CD5c96B2989B9F58d637C] = 1;
        whitelistBalance[0x098753abA8de1e88Fb32E045Ed8eba66735E6391] = 1;
        whitelistBalance[0x8Dfa76A3E8f290e6224b93BeBA163B90449B0e38] = 7;
        whitelistBalance[0xb1877ec8638a32F68e5DcCeA1202570CbB096357] = 6;
        whitelistBalance[0xcC4CCA9F8A1739Ac629acf8761ce4F3720764a96] = 1;
        whitelistBalance[0x0e53dbb8d5d58D957480FE522258353408D1d2a6] = 2;
        whitelistBalance[0x126438c3A64DA4eF5a8dde07366270367310f855] = 1;
        whitelistBalance[0x9a7eE28B4d734378f34c617C488cD8C5805C3B84] = 1;
        whitelistBalance[0x7B59793aD075e4ce1e35181054759C080B8D965D] = 4;
        whitelistBalance[0x52C8fe1c30a22AF561B1bF1e1D6a476b37d61c68] = 1;
        whitelistBalance[0xcE7DEb8fc70838F019a33797e1D2A5De8B7Ae2cC] = 2;
        whitelistBalance[0xF0C81C3d9102DDaD3568312d11738C902aB355C2] = 1;
        whitelistBalance[0xC60F2319eEC9B91ac6428055eeD38A946014571D] = 3;
        whitelistBalance[0xBB46314634470eD16eeDBE16F301DFE074091375] = 1;
        whitelistBalance[0xb6332Be30366Ef76174eFD011c471893c86FC36b] = 1;
        whitelistBalance[0x4C33294c13C5e783dd1d28c9844950B33d4DE9a0] = 1;
        whitelistBalance[0xc39253C74D2454e8ceBF5d8C6a219505bbe8744a] = 2;
        whitelistBalance[0xdF01F73C69b1adBdb74798E531EC08DC1C136d49] = 1;
        whitelistBalance[0xB7c6d7406e2F370290111A585D1a7A76B86C8776] = 1;
        whitelistBalance[0xA14964479Ebf9cD336011ad80652b08CD83dFE3A] = 2;
        whitelistBalance[0x27D998A81b5510Ed61D94aFDAA747e9719b45d0B] = 2;
        whitelistBalance[0xC653501899b8740379A3BA78EfD242ca93f76D7A] = 3;
        whitelistBalance[0xdD88E38cD55CD5F7e3AA4ce6C28fb73bFddbF0E7] = 1;
        whitelistBalance[0x815C187c70Ef6F52c0C9EDc6bb28a619E14057d3] = 2;
        whitelistBalance[0xCC75F6166E230CBBE484d534bBB0cC546366DC7D] = 1;
        whitelistBalance[0x943bCc065c6a09d8aA26C71F72Af4cdC137D1f84] = 1;
        whitelistBalance[0x0701d19c4D9364b69Ca001061aE3eD169a40691B] = 1;
        whitelistBalance[0x599eC7E5449E41a0204A0ed17daa1059Ee2C5F28] = 1;
        whitelistBalance[0xa9c5b41605f51f3Ba6aeb62258b0DF9B9384d8A1] = 1;
        whitelistBalance[0xC585d35FB8C9D136d6443A30FD88CCbb5F4CB86D] = 4;
        whitelistBalance[0xD9Bf0EF73403C9DC9490af5c6A2F6f7516286F32] = 1;
        whitelistBalance[0x02CBDB002D578b2b83b73b9f6019FADF39fFf6b6] = 1;
        whitelistBalance[0x09bC19CD33faF805E55b708C2dB3De87979B3950] = 1;
        whitelistBalance[0x532a2707D598d7Ae6B02eF0e0BA897DaF44b1603] = 1;
        whitelistBalance[0xC683915268E712F9960Ce59736a32119165Cc962] = 2;
        whitelistBalance[0xfDC4364C13E2c892De20Ab2Acb9a80534DE493Fc] = 1;
        whitelistBalance[0x248AfBEc09C971372278C1052253E4c308d5430C] = 1;
        whitelistBalance[0xb7bB1C09b6fB19e94ac700867ff35FbEd354C1BD] = 3;
        whitelistBalance[0x461e76A4fE9f27605d4097A646837c32F1ccc31c] = 1;
        whitelistBalance[0xFa46fB8d0a991ac62bD83E1Db1Fe8aba51ef6dd2] = 1;
        whitelistBalance[0x1F0Da8D6c0F517c2a67a3F34D1BBebfbD07B6236] = 1;
        whitelistBalance[0x83c20F72736E86EA3C64994b38B5102c78120324] = 2;
        whitelistBalance[0xbDE914699063F6EA14951AF723D2F13c822bF4ad] = 1;
        whitelistBalance[0x33569c101562e1fAF5b24581057E5cEE4c8288D7] = 1;
        whitelistBalance[0x15E875bD7De4C3d1F57a9837c411a30ff5f12B38] = 2;
        whitelistBalance[0x5078110476Cd2Aa096160F2D988aE80aEaFB5Ae4] = 2;
        whitelistBalance[0x2176426a886cbA262308Ba916cC3532B3b1ce06a] = 3;
        whitelistBalance[0xea40b0f6BA2aD77fF2FedAe98Ca67EaefCBCBE4A] = 5;
        whitelistBalance[0x42f34449209059717e6C48eD0110783A7df82abF] = 8;
        whitelistBalance[0x28411D470fc1B40E52AcccF47e43D39e815FfBf0] = 2;
        whitelistBalance[0xf7520F1D4D96Da54cF0F938f3f4D33e4bd276453] = 1;
        whitelistBalance[0x01dB485f57Dc000E761b85641F78C9D212A2eEaB] = 2;
        whitelistBalance[0x00668bd79Ede077B99BbE1C4db59418bC333d4Cf] = 2;
        whitelistBalance[0x3ef13C577311Fd6736B23525bC5E3E95060716Fe] = 2;
        whitelistBalance[0x05fc3A360944Ba03aBB2bBCcE275F89c96cB1385] = 3;
        whitelistBalance[0xD19d92c23Be2c965825f31462F3d8D1f84C17BFc] = 2;
        whitelistBalance[0x5482b90E0F59Fb4a926f7FFe9DB9EADE142CF86D] = 1;
        whitelistBalance[0x7Da3236aF88181a8AB8bd3929f17EfAD5417DF3A] = 1;
        whitelistBalance[0x92B57222582EfB77295454340529c411021c7Bc5] = 2;
        whitelistBalance[0x66b19A1241FD54fE74dD8E40B7df8C419492e423] = 1;
        whitelistBalance[0x94F0FaA3c83C9Bc78b675dDeA82fcB982fa89690] = 2;
        whitelistBalance[0x95e62E8FF84ed8456fDc9739eE4A9597Bb6E4c1f] = 1;
        whitelistBalance[0xBE837e4a956cC8118A013563a9E291D8D4D4b8B4] = 1;
        whitelistBalance[0xE84b1B9593865cb14846908910bb4B9a85746770] = 1;
        whitelistBalance[0x6eF2376fA6e12Dabb3a3ED0Fb44E4ff29847Af68] = 3;
        whitelistBalance[0x460b26B95b251B477e2bc52aB731C70F42299adC] = 1;
        whitelistBalance[0x3ebFdE946baD00D005A7Abb94bcab866fE11E84F] = 1;
        whitelistBalance[0xb7fa496E5166b39a114f5DeF4ae38015b977FeC8] = 1;
        whitelistBalance[0x3943b578D00D61b622Fd99AB6F16921e54F7612b] = 1;
        whitelistBalance[0x3E4D97C22571C5Ff22f0DAaBDa2d3835E67738EB] = 1;
        whitelistBalance[0xd561ba5bdBFEA7A39bF073b7520a7273bc767131] = 1;
        whitelistBalance[0xAB00e849A18b2ae3381c8895Cf4b15494CA27561] = 1;
        whitelistBalance[0xc2bd956DcaC8268ca78F55d6b33BbA92EEac443D] = 1;
        whitelistBalance[0x89097a0A657e42627E05f33DF494dE7f10123651] = 1;
        whitelistBalance[0x6ab615CF8deCFc488186E54066Fc10589C9293A3] = 2;
        whitelistBalance[0x2DBd479974967b8a0717d8B84c2172D8b26Cdf44] = 8;
        whitelistBalance[0xaee2Ae13EBf81d38df5a9Ed7013E80EA3f72e39b] = 4;
        whitelistBalance[0x0B4338671b26d40e1177A8A0f64D75f253f15e05] = 1;
        whitelistBalance[0x6007dC12910639e692b50E3dAc02747eF6048dB2] = 1;
        whitelistBalance[0x2cb9AE536fc474159b95dF01c5a708CAcD9F84B2] = 1;
        whitelistBalance[0xbA3df119299a11EA9cFeBC2801a8Bf0102A2bE3d] = 1;
        whitelistBalance[0x34Ba3E288c3674e73ab9D3B1B75EE064628d72c6] = 1;
        whitelistBalance[0x3AEf5d2384298DB7C7F711224221F229E43cBbA7] = 1;
        whitelistBalance[0x7430EA2c3b2F2468Bba97C2B1CCa33f42Af2e57c] = 1;
        whitelistBalance[0x115406837DE7D8194421126De6Fa7dc90bDe1663] = 3;
        whitelistBalance[0x693e1AEa486c80D34124C6dC3eddDd325A41ABE9] = 1;
        whitelistBalance[0x8eE6D1daE8eCeA729bD40a6F3BEde58bF048eD9e] = 2;
        whitelistBalance[0xd0c31E46C73B386432A3DdF768587df604dD52BE] = 1;
        whitelistBalance[0x2d408F3160B15F09Df792eFCb395B828d3E55a95] = 1;
        whitelistBalance[0xcB748f312b8e0557587862225697AAe325052f7D] = 1;
        whitelistBalance[0x18655651F4DFA30dA7E47852265db731C3059E1b] = 2;
        whitelistBalance[0x1168a0Ac3f249a011a3A52C662591d6383a91d97] = 1;
        whitelistBalance[0x45698cdCC733cBA4f8B1150C2f580587adF1Df92] = 3;
        whitelistBalance[0xd3745F1ba3c0280F0Fb3456676dE2Fa714d1fcb7] = 1;
        whitelistBalance[0x9DDf691De5e1F4f7764262Be936B61f46d9f9d70] = 1;
        whitelistBalance[0x100e4F6D92965C2f2dEc3A08ACeb63A8de69c99D] = 2;
        whitelistBalance[0x3E7898c5851635D5212B07F0124a15a2d3C547EB] = 3;
        whitelistBalance[0x4e1c52008b0cd3bE1819745695E85Ffe3B9494B0] = 1;
        whitelistBalance[0x33494fB9B491B1328c90BE2c926B6A5080AbAfDA] = 4;
        whitelistBalance[0xB7D9945166e3DA89ee4c0947230753d656D116a5] = 2;
        whitelistBalance[0x403156966d0593770846e72dCBec871F93ef1224] = 6;
        whitelistBalance[0x1d4B9b250B1Bd41DAA35d94BF9204Ec1b0494eE3] = 2;
        whitelistBalance[0xEbD56361441B416a788086e47F48599593fcFE4F] = 1;
        whitelistBalance[0x93EFEC89Db80176895b2C7a4E00aF808BBc69239] = 1;
        whitelistBalance[0x2668B4B69c57624B0dc7453250f841B726a456CF] = 1;
        whitelistBalance[0x4D010eeB7ec813AE5520D4cC7Bdb975ba2bFd2a1] = 1;
        whitelistBalance[0xFF0aD4e2C7F60D2303812Cbc73c20F890b339925] = 1;
        whitelistBalance[0x38623FA88e3d8D85945C2512Abf3f001a9edB492] = 1;
        whitelistBalance[0xcD61ecC765040389b81dAc23b67B091160E9BF39] = 1;
        whitelistBalance[0x20B4E6cAbA712F520D9A3A309D8c0b0DA801a212] = 2;
        whitelistBalance[0x84274ff96A1928FEb3c1cC2260f962B377a3d53F] = 1;
        whitelistBalance[0x5080A71235d51F1E1F2F7C720810766Dc5FB15C1] = 1;
        whitelistBalance[0x4EB4a5718A685c788B650c944834ba574Db508C4] = 1;
        whitelistBalance[0x5FE7Ff8Dc6082b6b0812c5A4b23A3B7B40D26747] = 1;
        whitelistBalance[0x85C6F217D0375E5dC7b249B5bC12577B051bf417] = 1;
        whitelistBalance[0x3a4f4a3B4D965058701f0fb2611Acbc89a11996E] = 1;
        whitelistBalance[0x2A76F7Df64889A1f20F5b6Aa87eBfFA9A38AB925] = 1;
        whitelistBalance[0x9B24349Ad2e4d0a2dcE6376b75A823D9b0C9774C] = 2;
        whitelistBalance[0x4D77536a1B90C30F1fBcaeF8817160f663Da1DE0] = 3;
        whitelistBalance[0x1d06ef1CF5059370ecd6bE3A4ACa223fE5973E02] = 1;
        whitelistBalance[0xEAfAA1405A1BaC58D2C3dCefe6A07467Bcd7fEbE] = 1;
        whitelistBalance[0xc4fF126aEC164409B9c2269D34A79E53C39C8A56] = 5;
        whitelistBalance[0xd781a9158edFd5AEA767F5cfC3Db97482C722157] = 1;
        whitelistBalance[0x3ddfB199288F7a439dfFEdc03AE9Bc02FaFC63F6] = 1;
        whitelistBalance[0x6c66F4cA90c023bc04461ef19e67B06bfC3d0a53] = 1;
        whitelistBalance[0x1a60DfB071B039c6e33dcb3220891C83DA72c1be] = 1;
        whitelistBalance[0xc72f40a397453051349F73cf2E2a04Fac06E37a3] = 1;
        whitelistBalance[0x5689676A2c9C796375e01784F9B42723536Da2B2] = 1;
        whitelistBalance[0x1986F4BCc6b78d40e499E928a910DD7bde857734] = 1;
        whitelistBalance[0xcB1dAC0C1a5F87dc410a56F0F82E7E3A56bE1499] = 1;
        whitelistBalance[0x97e2B1efF9eF076635eB2983702e6b74d1D509B9] = 1;
        whitelistBalance[0xa4362e88E1444DF62fC85d15F7eC333f0664442C] = 1;
        whitelistBalance[0xB3f6Ea7b8A2ccE43D78d5637D2f0cA2c806439D0] = 1;
        whitelistBalance[0x3Eb92F230B33bD8d98cc060A76a7e7d77819a21A] = 3;
        whitelistBalance[0xBe769b04627613C8F3b30aBE20E6458c1DCB239B] = 1;
        whitelistBalance[0xd6cc8BF1a2bDF94BE558A40B2A665a46c94211B6] = 2;
        whitelistBalance[0x110772F7472B56A1aB844051260B9416FE30245b] = 2;
        whitelistBalance[0xD41c564db35DA12D9d25944b88Cc22468B0D45DC] = 1;
        whitelistBalance[0x34A4Dd196Ab83166c8C9935D5A6f60f2a02a905a] = 1;
        whitelistBalance[0x7D602b32acD5942A619f49e104b20C0553c93405] = 2;
        whitelistBalance[0x007C9c7e7ed7cD83F1A38cFd747f28E6894ab9f6] = 1;
        whitelistBalance[0xbA72224300dD0CCFeF418FEe7865017ABEB876a7] = 2;
        whitelistBalance[0x738A1f6d79e592f726efaA3B8beF81797F408119] = 1;
        whitelistBalance[0x36E058332aE39efaD2315776B9c844E30d07388B] = 1;
        whitelistBalance[0x4a7AFc64E298876FcB8F6AA7D44Ef3C91fCBC291] = 1;
        whitelistBalance[0x4D9B5696a8afeD6b65F92B1B86ccf90c7561aE56] = 2;
        whitelistBalance[0x0060263198Fe57F4e9eb4B9EE02E1c40cCf6d13E] = 1;
        whitelistBalance[0x11e6AA7D1D74Cb4A3056e8943372b94D1127D26c] = 1;
        whitelistBalance[0x2C6602c1200F08eb57CC06eaDa1C215cfd7D0b7C] = 1;
        whitelistBalance[0xe4A974E499e8767A13894635C45F7389b1FFc5Dd] = 1;
        whitelistBalance[0xdcfd6D6e63F15A391D96D1b76575Ae39Ad6965D9] = 4;
        whitelistBalance[0x08Cdbd22a584F0fa78474FD1724c664D62C65FD9] = 1;
        whitelistBalance[0xcc4b0a5b8De07B69cE5936FBbFeE6BDfb0A30F77] = 1;
        whitelistBalance[0x5968d383DeB7636FB68C91915c516499Fa2ddcD0] = 1;
        whitelistBalance[0x7eC8676CA6BDDB54455b806B9ef39c6D8ee51766] = 1;
        whitelistBalance[0x177580556eD986Cee01012C6115823208Ef584B8] = 1;
        whitelistBalance[0xB1af684799C96F5C740786bE59DC834ff8Ef5add] = 1;
        whitelistBalance[0x5fFd0B2EB25e29DBf94Ee7cB8F7b90d2b2fbbc53] = 1;
        whitelistBalance[0xE3873F3D9E13880f9c508f47cbBF9e065a67265B] = 1;
        whitelistBalance[0x322e128453EFd91a4c131761d9d535fF6E0CCd90] = 1;
        whitelistBalance[0xB21027569dDaE670aA521Ed90d6ECb5dE515e8d4] = 1;
        whitelistBalance[0xd70676Cfa67Abc65A8C39f049d62EEA30E3080CF] = 1;
        whitelistBalance[0x8889c07205749DB6d38673f9248d720b0c07955f] = 1;
        whitelistBalance[0x004768E08805AB5ece646a65C8Ba492C3AD71E4a] = 1;
        whitelistBalance[0xBb739eE04F0cC2Db984cd47EAd003F4c183CF19a] = 1;
        whitelistBalance[0xa80e8CB880b7fA0ad1EAa609eDD8f1CDDd21aF42] = 1;
        whitelistBalance[0xcA147eb37135B667B14792bc4C3Cc57389F574AA] = 1;
        whitelistBalance[0x440d55a1867958dA7C8FD88A5e163a85Fd739eFA] = 1;
        whitelistBalance[0xd544CEBA36DEF08e68c56976576AcC974DE54F7b] = 1;
        whitelistBalance[0x29f316885886bE6357FC1411478D4C291021A0AA] = 1;
        whitelistBalance[0x6634f9d0c6B7fB5764312bD0c91556F51e67E544] = 1;
        whitelistBalance[0x7a501E2a432d44013DD9575e73Ed551A88fc0184] = 1;
        whitelistBalance[0xBbcd652CF371b59CE9A063183AA44D377f4467E8] = 2;
        whitelistBalance[0x2e44F49552C0C8e93f60318520760f619c03615F] = 1;
        whitelistBalance[0x86776Ae9783C634C6AEe6cdA878C8f35a5571333] = 1;
        whitelistBalance[0xAcDBC51Dd3bbDC46C447E0A2EDaC8A713dEB1907] = 1;
        whitelistBalance[0x6D8Df15FD3dC3505a4010CaC6937De159d68081C] = 1;
        whitelistBalance[0xd3e9AF5B0C1FC2edD6A7907076cd9C79e67DE6aC] = 1;
        whitelistBalance[0x0923A3931599b5B08f91E62b1894053ca75455A9] = 1;
        whitelistBalance[0x2168B2295E912A27c0015BaD9F09F090EBcE1a99] = 1;
        whitelistBalance[0xF898F063d22a994bA6943D50A96C2dbC0Bd9218c] = 1;
        whitelistBalance[0x321f3BFA19354BD9F56CFDA97bcCf3a7C21D1621] = 1;
        whitelistBalance[0xbaCD6723bDc567E134603AA35E5c479411477d52] = 1;
        whitelistBalance[0x104F0BE994C32231934e64EeF299bC8866288a5f] = 1;
        whitelistBalance[0x167AE6231bd8E564F969482bc34A00D91B7Fe37c] = 1;
        whitelistBalance[0x646e72181602114e7eE02F963D13539cf056ce1e] = 1;
        whitelistBalance[0xF4164FC650e2C59D1580Fc1c2C9E792087865D56] = 1;
        whitelistBalance[0xCD546c340b8c0bA679eBbECA1ABB8C2E4528b6E5] = 1;
        whitelistBalance[0xcdF660aeEB6DBdDba0C096d1FAfCb41D60f9A88B] = 1;
    }

    modifier whenSaleStarted() {
        require(_saleStarted);
        _;
    }

    modifier whenPresaleStarted() {
        require(_presaleStarted);
        _;
    }

    function presaleMint(uint256 amount) external payable whenPresaleStarted {
        uint256 preSaleAllowance = whitelistBalance[msg.sender] - whitelistMinted[msg.sender];
        require(amount * _price <= msg.value, "Inconsistent amount sent!");
        require(preSaleAllowance >= amount, "Address does not own enough nfts from first collection");

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, currentMintId);
            currentMintId++;
            whitelistMinted[msg.sender] = whitelistMinted[msg.sender] + 1;
        }

        emit PresaleMinted(msg.sender, amount, msg.value);
    }

    function mint(uint256 amount) external payable whenSaleStarted {
        require(amount < 3, "You cannot mint more than 2 Tokens at once!");
        require(
            currentMintId + amount <= maxSupply + 1,
            "Not enough Tokens left."
        );
        require(amount * _price <= msg.value, "Inconsistent amount sent!");

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(msg.sender, currentMintId);
            currentMintId++;
        }
        
        emit Minted(msg.sender, amount, msg.value);
    }

    function togglePresaleStarted() external onlyOwner {
        _presaleStarted = !_presaleStarted;
    }

    function presaleStarted() public view returns (bool) {
        return _presaleStarted;
    }

    function toggleSaleStarted() external onlyOwner {
        _saleStarted = !_saleStarted;
    }

    function saleStarted() public view returns (bool) {
        return _saleStarted;
    }

    function setBaseURI(string memory _URI) external onlyOwner {
        baseURI = _URI;
    }

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

    // Make it possible to change the price: just in case
    function setPrice(uint256 _newPrice) external onlyOwner {
        _price = _newPrice;
    }

    function getPrice() public view returns (uint256) {
        return _price;
    }

    function getReservedLeft() public view returns (uint256) {
        return reservedCount - _reservedClaimed;
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for (uint256 i; i < tokenCount; i++) {
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }
        return tokensId;
    }

    function claimReserved(uint256 _number, address _receiver) external onlyOwner {
        require(
            _number + _reservedClaimed <= reservedCount,
            "That would exceed the max reserved."
        );

        for (uint256 i = 0; i < _number; i++) {
            _safeMint(_receiver, currentMintId);
            currentMintId++;
            _reservedClaimed++;
        }

        _reservedClaimed = _reservedClaimed + _number;
    }

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }
    
    function updateWhitelistAllowance(address newAddress, uint256 amount) public onlyOwner {
        whitelistBalance[newAddress] = amount;
    }
    
    function getWhitelistAllowance(address userAddress) public  view  returns (uint256)  {
        return whitelistBalance[userAddress];
    } 
    
    function getPresaleAllowance(address userAddress) public view returns (uint256) {
        return whitelistBalance[userAddress] - whitelistMinted[userAddress];
    }
    
    function getTokensRemaining () public view returns (uint256) {
        return maxSupply - currentMintId + 1;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cost","type":"uint256"}],"name":"PresaleMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"_number","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"claimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentMintId","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":"userAddress","type":"address"}],"name":"getPresaleAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservedLeft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTokensRemaining","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getWhitelistAllowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"metadata","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedCount","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":"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":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"address","name":"newAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateWhitelistAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelistMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600b556000600c556001600d553480156200002757600080fd5b506040518060400160405280600581526020017f4c494d41480000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c494d48000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000ac92919062004933565b508060019080519060200190620000c592919062004933565b505050620000e8620000dc6200486560201b60201c565b6200486d60201b60201c565b6000600e60006101000a81548160ff0219169083151502179055506000600e60016101000a81548160ff02191690831515021790555060046010600073bcc462c488f8da534af98f0f2e529cded02d9cb573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000738e258e1aa12b8f165b69f760575b90d877afe9b673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073e39cb1c2f6dc891a1685ee411b4d36827e4f860e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073881475210e75b814d5b711090a064942b6f3060573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003601060007374e094be60be8db1e39a0b2ab395b888b478b6de73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060036010600073149884b699fe3e1b042f85fa3b54843eb689b2d473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004601060007362756bedc2c98f80ce83e45bc9f8062345b65d8e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007380965566cedc9b9c8aeda24bbc12e44eb476def673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073e4abc24b5a6732a8945a85b768b4a3120cb2e37c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560106000733c64da143bf741a3fa833dd46900d28efe8893b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460106000731024a91b5ba768601e2bf4f28d2458885652cfa473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000734003ec66153c090ed649ce822e30caba1172752773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073bc68c859fc8ea2de63c60f236688dee448c8b70e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000731ce7a7f4a2af7c690a7cbece89e919753e409add73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073fb9699de6f7efc7f7d64a40852a68602ac7ef40373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000736d21b1d31a6aa760f396729d85460e2f887b876473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073a65f5ebffd31ed58cc3cd5c96b2989b9f58d637c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073098753aba8de1e88fb32e045ed8eba66735e639173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760106000738dfa76a3e8f290e6224b93beba163b90449b0e3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066010600073b1877ec8638a32f68e5dccea1202570cbb09635773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cc4cca9f8a1739ac629acf8761ce4f3720764a9673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000730e53dbb8d5d58d957480fe522258353408d1d2a673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073126438c3a64da4ef5a8dde07366270367310f85573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000739a7ee28b4d734378f34c617c488cd8c5805c3b8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600460106000737b59793ad075e4ce1e35181054759c080b8d965d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007352c8fe1c30a22af561b1bf1e1d6a476b37d61c6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073ce7deb8fc70838f019a33797e1d2a5de8b7ae2cc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073f0c81c3d9102ddad3568312d11738c902ab355c273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060036010600073c60f2319eec9b91ac6428055eed38a946014571d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073bb46314634470ed16eedbe16f301dfe07409137573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b6332be30366ef76174efd011c471893c86fc36b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000734c33294c13c5e783dd1d28c9844950b33d4de9a073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073c39253c74d2454e8cebf5d8c6a219505bbe8744a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073df01f73c69b1adbdb74798e531ec08dc1c136d4973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b7c6d7406e2f370290111a585d1a7a76b86c877673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073a14964479ebf9cd336011ad80652b08cd83dfe3a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007327d998a81b5510ed61d94afdaa747e9719b45d0b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060036010600073c653501899b8740379a3ba78efd242ca93f76d7a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073dd88e38cd55cd5f7e3aa4ce6c28fb73bfddbf0e773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073815c187c70ef6f52c0c9edc6bb28a619e14057d373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cc75f6166e230cbbe484d534bbb0cc546366dc7d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073943bcc065c6a09d8aa26c71f72af4cdc137d1f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000730701d19c4d9364b69ca001061ae3ed169a40691b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073599ec7e5449e41a0204a0ed17daa1059ee2c5f2873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073a9c5b41605f51f3ba6aeb62258b0df9b9384d8a173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046010600073c585d35fb8c9d136d6443a30fd88ccbb5f4cb86d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d9bf0ef73403c9dc9490af5c6a2f6f7516286f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007302cbdb002d578b2b83b73b9f6019fadf39fff6b673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007309bc19cd33faf805e55b708c2db3de87979b395073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073532a2707d598d7ae6b02ef0e0ba897daf44b160373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073c683915268e712f9960ce59736a32119165cc96273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073fdc4364c13e2c892de20ab2acb9a80534de493fc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073248afbec09c971372278c1052253e4c308d5430c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060036010600073b7bb1c09b6fb19e94ac700867ff35fbed354c1bd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073461e76a4fe9f27605d4097a646837c32f1ccc31c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073fa46fb8d0a991ac62bd83e1db1fe8aba51ef6dd273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000731f0da8d6c0f517c2a67a3f34d1bbebfbd07b623673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007383c20f72736e86ea3c64994b38b5102c7812032473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073bde914699063f6ea14951af723d2f13c822bf4ad73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007333569c101562e1faf5b24581057e5cee4c8288d773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007315e875bd7de4c3d1f57a9837c411a30ff5f12b3873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000735078110476cd2aa096160f2d988ae80aeafb5ae473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000732176426a886cba262308ba916cc3532b3b1ce06a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056010600073ea40b0f6ba2ad77ff2fedae98ca67eaefcbcbe4a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506008601060007342f34449209059717e6c48ed0110783a7df82abf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007328411d470fc1b40e52acccf47e43d39e815ffbf073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073f7520f1d4d96da54cf0f938f3f4d33e4bd27645373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007301db485f57dc000e761b85641f78c9d212a2eeab73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600072668bd79ede077b99bbe1c4db59418bc333d4cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000733ef13c577311fd6736b23525bc5e3e95060716fe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003601060007305fc3a360944ba03abb2bbcce275f89c96cb138573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073d19d92c23be2c965825f31462f3d8d1f84c17bfc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735482b90e0f59fb4a926f7ffe9db9eade142cf86d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000737da3236af88181a8ab8bd3929f17efad5417df3a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007392b57222582efb77295454340529c411021c7bc573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007366b19a1241fd54fe74dd8e40b7df8c419492e42373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007394f0faa3c83c9bc78b675ddea82fcb982fa8969073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007395e62e8ff84ed8456fdc9739ee4a9597bb6e4c1f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073be837e4a956cc8118a013563a9e291d8d4d4b8b473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073e84b1b9593865cb14846908910bb4b9a8574677073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000736ef2376fa6e12dabb3a3ed0fb44e4ff29847af6873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073460b26b95b251b477e2bc52ab731c70f42299adc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733ebfde946bad00d005a7abb94bcab866fe11e84f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b7fa496e5166b39a114f5def4ae38015b977fec873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733943b578d00d61b622fd99ab6f16921e54f7612b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733e4d97c22571c5ff22f0daabda2d3835e67738eb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d561ba5bdbfea7a39bf073b7520a7273bc76713173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073ab00e849a18b2ae3381c8895cf4b15494ca2756173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073c2bd956dcac8268ca78f55d6b33bba92eeac443d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007389097a0a657e42627e05f33df494de7f1012365173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000736ab615cf8decfc488186e54066fc10589c9293a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600860106000732dbd479974967b8a0717d8b84c2172d8b26cdf4473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046010600073aee2ae13ebf81d38df5a9ed7013e80ea3f72e39b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000730b4338671b26d40e1177a8a0f64d75f253f15e0573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000736007dc12910639e692b50e3dac02747ef6048db273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732cb9ae536fc474159b95df01c5a708cacd9f84b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073ba3df119299a11ea9cfebc2801a8bf0102a2be3d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007334ba3e288c3674e73ab9d3b1b75ee064628d72c673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733aef5d2384298db7c7f711224221f229e43cbba773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000737430ea2c3b2f2468bba97c2b1cca33f42af2e57c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060036010600073115406837de7d8194421126de6fa7dc90bde166373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073693e1aea486c80d34124c6dc3edddd325a41abe973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000738ee6d1dae8ecea729bd40a6f3bede58bf048ed9e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d0c31e46c73b386432a3ddf768587df604dd52be73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732d408f3160b15f09df792efcb395b828d3e55a9573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cb748f312b8e0557587862225697aae325052f7d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007318655651f4dfa30da7e47852265db731c3059e1b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000731168a0ac3f249a011a3a52c662591d6383a91d9773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506003601060007345698cdcc733cba4f8b1150c2f580587adf1df9273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d3745f1ba3c0280f0fb3456676de2fa714d1fcb773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000739ddf691de5e1f4f7764262be936b61f46d9f9d7073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073100e4f6d92965c2f2dec3a08aceb63a8de69c99d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000733e7898c5851635d5212b07f0124a15a2d3c547eb73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000734e1c52008b0cd3be1819745695e85ffe3b9494b073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004601060007333494fb9b491b1328c90be2c926b6a5080abafda73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073b7d9945166e3da89ee4c0947230753d656d116a573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060066010600073403156966d0593770846e72dcbec871f93ef122473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000731d4b9b250b1bd41daa35d94bf9204ec1b0494ee373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073ebd56361441b416a788086e47f48599593fcfe4f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007393efec89db80176895b2c7a4e00af808bbc6923973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732668b4b69c57624b0dc7453250f841b726a456cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000734d010eeb7ec813ae5520d4cc7bdb975ba2bfd2a173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073ff0ad4e2c7f60d2303812cbc73c20f890b33992573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007338623fa88e3d8d85945c2512abf3f001a9edb49273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cd61ecc765040389b81dac23b67b091160e9bf3973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002601060007320b4e6caba712f520d9a3a309d8c0b0da801a21273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007384274ff96a1928feb3c1cc2260f962b377a3d53f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735080a71235d51f1e1f2f7c720810766dc5fb15c173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000734eb4a5718a685c788b650c944834ba574db508c473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735fe7ff8dc6082b6b0812c5a4b23a3b7b40d2674773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007385c6f217d0375e5dc7b249b5bc12577b051bf41773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733a4f4a3b4d965058701f0fb2611acbc89a11996e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732a76f7df64889a1f20f5b6aa87ebffa9a38ab92573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000739b24349ad2e4d0a2dce6376b75a823d9b0c9774c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000734d77536a1b90c30f1fbcaef8817160f663da1de073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000731d06ef1cf5059370ecd6be3a4aca223fe5973e0273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073eafaa1405a1bac58d2c3dcefe6a07467bcd7febe73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060056010600073c4ff126aec164409b9c2269d34a79e53c39c8a5673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d781a9158edfd5aea767f5cfc3db97482c72215773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000733ddfb199288f7a439dffedc03ae9bc02fafc63f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000736c66f4ca90c023bc04461ef19e67b06bfc3d0a5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000731a60dfb071b039c6e33dcb3220891c83da72c1be73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073c72f40a397453051349f73cf2e2a04fac06e37a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735689676a2c9c796375e01784f9b42723536da2b273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000731986f4bcc6b78d40e499e928a910dd7bde85773473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cb1dac0c1a5f87dc410a56f0f82e7e3a56be149973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007397e2b1eff9ef076635eb2983702e6b74d1d509b973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073a4362e88e1444df62fc85d15f7ec333f0664442c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b3f6ea7b8a2cce43d78d5637d2f0ca2c806439d073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600360106000733eb92f230b33bd8d98cc060a76a7e7d77819a21a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073be769b04627613c8f3b30abe20e6458c1dcb239b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073d6cc8bf1a2bdf94be558a40b2a665a46c94211b673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073110772f7472b56a1ab844051260b9416fe30245b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d41c564db35da12d9d25944b88cc22468b0d45dc73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007334a4dd196ab83166c8c9935d5a6f60f2a02a905a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000737d602b32acd5942a619f49e104b20c0553c9340573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000727c9c7e7ed7cd83f1a38cfd747f28e6894ab9f673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073ba72224300dd0ccfef418fee7865017abeb876a773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073738a1f6d79e592f726efaa3b8bef81797f40811973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007336e058332ae39efad2315776b9c844e30d07388b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000734a7afc64e298876fcb8f6aa7d44ef3c91fcbc29173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600260106000734d9b5696a8afed6b65f92b1b86ccf90c7561ae5673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007260263198fe57f4e9eb4b9ee02e1c40ccf6d13e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007311e6aa7d1d74cb4a3056e8943372b94d1127d26c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732c6602c1200f08eb57cc06eada1c215cfd7d0b7c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073e4a974e499e8767a13894635c45f7389b1ffc5dd73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060046010600073dcfd6d6e63f15a391d96d1b76575ae39ad6965d973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007308cdbd22a584f0fa78474fd1724c664d62c65fd973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cc4b0a5b8de07b69ce5936fbbfee6bdfb0a30f7773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735968d383deb7636fb68c91915c516499fa2ddcd073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000737ec8676ca6bddb54455b806b9ef39c6d8ee5176673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073177580556ed986cee01012c6115823208ef584b873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b1af684799c96f5c740786be59dc834ff8ef5add73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000735ffd0b2eb25e29dbf94ee7cb8f7b90d2b2fbbc5373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073e3873f3d9e13880f9c508f47cbbf9e065a67265b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073322e128453efd91a4c131761d9d535ff6e0ccd9073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073b21027569ddae670aa521ed90d6ecb5de515e8d473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d70676cfa67abc65a8c39f049d62eea30e3080cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000738889c07205749db6d38673f9248d720b0c07955f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000724768e08805ab5ece646a65c8ba492c3ad71e4a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073bb739ee04f0cc2db984cd47ead003f4c183cf19a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073a80e8cb880b7fa0ad1eaa609edd8f1cddd21af4273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073ca147eb37135b667b14792bc4c3cc57389f574aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073440d55a1867958da7c8fd88a5e163a85fd739efa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d544ceba36def08e68c56976576acc974de54f7b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007329f316885886be6357fc1411478d4c291021a0aa73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000736634f9d0c6b7fb5764312bd0c91556f51e67e54473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000737a501e2a432d44013dd9575e73ed551a88fc018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060026010600073bbcd652cf371b59ce9a063183aa44d377f4467e873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732e44f49552c0c8e93f60318520760f619c03615f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001601060007386776ae9783c634c6aee6cda878c8f35a557133373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073acdbc51dd3bbdc46c447e0a2edac8a713deb190773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000736d8df15fd3dc3505a4010cac6937de159d68081c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073d3e9af5b0c1fc2edd6a7907076cd9c79e67de6ac73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000730923a3931599b5b08f91e62b1894053ca75455a973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000732168b2295e912a27c0015bad9f09f090ebce1a9973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073f898f063d22a994ba6943d50a96c2dbc0bd9218c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073321f3bfa19354bd9f56cfda97bccf3a7c21d162173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073bacd6723bdc567e134603aa35e5c479411477d5273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073104f0be994c32231934e64eef299bc8866288a5f73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073167ae6231bd8e564f969482bc34a00d91b7fe37c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073646e72181602114e7ee02f963d13539cf056ce1e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073f4164fc650e2c59d1580fc1c2c9e792087865d5673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cd546c340b8c0ba679ebbeca1abb8c2e4528b6e573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016010600073cdf660aeeb6dbddba0c096d1fafcb41d60f9a88b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062004a48565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200494190620049e3565b90600052602060002090601f016020900481019282620049655760008555620049b1565b82601f106200498057805160ff1916838001178555620049b1565b82800160010185558215620049b1579182015b82811115620049b057825182559160200191906001019062004993565b5b509050620049c09190620049c4565b5090565b5b80821115620049df576000816000905550600101620049c5565b5090565b60006002820490506001821680620049fc57607f821691505b6020821081141562004a135762004a1262004a19565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614b5e8062004a586000396000f3fe60806040526004361061025c5760003560e01c8063715018a611610144578063bc6d2635116100b6578063d5abeb011161007a578063d5abeb0114610904578063daa023aa1461092f578063e3684e391461095a578063e985e9c514610997578063ed1fc2a2146109d4578063f2fde38b146109eb5761025c565b8063bc6d26351461082c578063c313b33914610843578063c38f761714610880578063c87b56dd146108ab578063c9b298f1146108e85761025c565b806398a8cffe1161010857806398a8cffe1461072d57806398d5fdca1461076a578063a0712d6814610795578063a22cb465146107b1578063b0e1d7f3146107da578063b88d4fde146108035761025c565b8063715018a61461066c57806373b6abd5146106835780638da5cb5b146106ae57806391b7f5ed146106d957806395d89b41146107025761025c565b80633ccfd60b116101dd5780634f6ccce7116101a15780634f6ccce71461053657806355f804b3146105735780635c474f9e1461059c5780636352211e146105c75780636c0360eb1461060457806370a082311461062f5761025c565b80633ccfd60b1461045157806342842e0e14610468578063438b63001461049157806346ad5859146104ce5780634dab7d24146104f95761025c565b806318160ddd1161022457806318160ddd1461035a57806323b343481461038557806323b872dd146103ae5780632f745c59146103d7578063368e1861146104145761025c565b806301ffc9a71461026157806304549d6f1461029e57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906135c9565b610a14565b6040516102959190613c46565b60405180910390f35b3480156102aa57600080fd5b506102b3610a26565b6040516102c09190613c46565b60405180910390f35b3480156102d557600080fd5b506102de610a3d565b6040516102eb9190613c61565b60405180910390f35b34801561030057600080fd5b5061031b6004803603810190610316919061366c565b610acf565b6040516103289190613b86565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613589565b610b54565b005b34801561036657600080fd5b5061036f610c6c565b60405161037c9190613f63565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613589565b610c79565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190613473565b610d3d565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613589565b610d9d565b60405161040b9190613f63565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613406565b610e42565b6040516104489190613f63565b60405180910390f35b34801561045d57600080fd5b50610466610e5a565b005b34801561047457600080fd5b5061048f600480360381019061048a9190613473565b610f1f565b005b34801561049d57600080fd5b506104b860048036038101906104b39190613406565b610f3f565b6040516104c59190613c24565b60405180910390f35b3480156104da57600080fd5b506104e3610fed565b6040516104f09190613f63565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613406565b611010565b60405161052d9190613f63565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061366c565b611059565b60405161056a9190613f63565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613623565b6110ca565b005b3480156105a857600080fd5b506105b1611160565b6040516105be9190613c46565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061366c565b611177565b6040516105fb9190613b86565b60405180910390f35b34801561061057600080fd5b50610619611229565b6040516106269190613c61565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613406565b6112b7565b6040516106639190613f63565b60405180910390f35b34801561067857600080fd5b5061068161136f565b005b34801561068f57600080fd5b506106986113f7565b6040516106a59190613f63565b60405180910390f35b3480156106ba57600080fd5b506106c36113fd565b6040516106d09190613b86565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb919061366c565b611427565b005b34801561070e57600080fd5b506107176114ad565b6040516107249190613c61565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613406565b61153f565b6040516107619190613f63565b60405180910390f35b34801561077657600080fd5b5061077f611557565b60405161078c9190613f63565b60405180910390f35b6107af60048036038101906107aa919061366c565b611561565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190613549565b6116ec565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613699565b61186d565b005b34801561080f57600080fd5b5061082a600480360381019061082591906134c6565b6119ad565b005b34801561083857600080fd5b50610841611a0f565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613406565b611ab7565b6040516108779190613f63565b60405180910390f35b34801561088c57600080fd5b50610895611b4a565b6040516108a29190613f63565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd919061366c565b611b4f565b6040516108df9190613c61565b60405180910390f35b61090260048036038101906108fd919061366c565b611bf6565b005b34801561091057600080fd5b50610919611e41565b6040516109269190613f63565b60405180910390f35b34801561093b57600080fd5b50610944611e47565b6040516109519190613f63565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c919061366c565b611e5d565b60405161098e9190613f7e565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190613433565b611e84565b6040516109cb9190613c46565b60405180910390f35b3480156109e057600080fd5b506109e9611f18565b005b3480156109f757600080fd5b50610a126004803603810190610a0d9190613406565b611fc0565b005b6000610a1f826120b8565b9050919050565b6000600e60019054906101000a900460ff16905090565b606060008054610a4c9061427b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a789061427b565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b6000610ada82612132565b610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613e03565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5f82611177565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613ee3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bef61219e565b73ffffffffffffffffffffffffffffffffffffffff161480610c1e5750610c1d81610c1861219e565b611e84565b5b610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613d83565b60405180910390fd5b610c6783836121a6565b505050565b6000600880549050905090565b610c8161219e565b73ffffffffffffffffffffffffffffffffffffffff16610c9f6113fd565b73ffffffffffffffffffffffffffffffffffffffff1614610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec90613e23565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610d4e610d4861219e565b8261225f565b610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613f23565b60405180910390fd5b610d9883838361233d565b505050565b6000610da8836112b7565b8210610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613c83565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60106020528060005260406000206000915090505481565b610e6261219e565b73ffffffffffffffffffffffffffffffffffffffff16610e806113fd565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613e23565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f1c573d6000803e3d6000fd5b50565b610f3a838383604051806020016040528060008152506119ad565b505050565b60606000610f4c836112b7565b905060008167ffffffffffffffff811115610f6a57610f69614443565b5b604051908082528060200260200182016040528015610f985781602001602082028036833780820191505090505b50905060005b82811015610fe257610fb08582610d9d565b828281518110610fc357610fc2614414565b5b6020026020010181815250508080610fda906142de565b915050610f9e565b508092505050919050565b60006001600d5461022b611001919061417d565b61100b919061409c565b905090565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611063610c6c565b82106110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613f43565b60405180910390fd5b600882815481106110b8576110b7614414565b5b90600052602060002001549050919050565b6110d261219e565b73ffffffffffffffffffffffffffffffffffffffff166110f06113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d90613e23565b60405180910390fd5b80600f908051906020019061115c92919061321a565b5050565b6000600e60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613dc3565b60405180910390fd5b80915050919050565b600f80546112369061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546112629061427b565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613da3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61137761219e565b73ffffffffffffffffffffffffffffffffffffffff166113956113fd565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290613e23565b60405180910390fd5b6113f56000612599565b565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142f61219e565b73ffffffffffffffffffffffffffffffffffffffff1661144d6113fd565b73ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90613e23565b60405180910390fd5b80600b8190555050565b6060600180546114bc9061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546114e89061427b565b80156115355780601f1061150a57610100808354040283529160200191611535565b820191906000526020600020905b81548152906001019060200180831161151857829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b6000600b54905090565b600e60009054906101000a900460ff1661157a57600080fd5b600381106115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613ec3565b60405180910390fd5b600161022b6115cc919061409c565b81600d546115da919061409c565b111561161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613e43565b60405180910390fd5b34600b548261162a9190614123565b111561166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613d43565b60405180910390fd5b60005b818110156116ad5761168233600d5461265f565b600d6000815480929190611695906142de565b919050555080806116a5906142de565b91505061166e565b507f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff3382346040516116e193929190613bed565b60405180910390a150565b6116f461219e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613d23565b60405180910390fd5b806005600061176f61219e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181c61219e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118619190613c46565b60405180910390a35050565b61187561219e565b73ffffffffffffffffffffffffffffffffffffffff166118936113fd565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613e23565b60405180910390fd5b600d600c54836118f9919061409c565b111561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193190613f03565b60405180910390fd5b60005b828110156119945761195182600d5461265f565b600d6000815480929190611964906142de565b9190505550600c600081548092919061197c906142de565b9190505550808061198c906142de565b91505061193d565b5081600c546119a3919061409c565b600c819055505050565b6119be6119b861219e565b8361225f565b6119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490613f23565b60405180910390fd5b611a098484848461267d565b50505050565b611a1761219e565b73ffffffffffffffffffffffffffffffffffffffff16611a356113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613e23565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b43919061417d565b9050919050565b600d81565b6060611b5a82612132565b611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613ea3565b60405180910390fd5b6000611ba36126d9565b90506000815111611bc35760405180602001604052806000815250611bee565b80611bcd8461276b565b604051602001611bde929190613b62565b6040516020818303038152906040525b915050919050565b600e60019054906101000a900460ff16611c0f57600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9b919061417d565b905034600b5483611cac9190614123565b1115611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613d43565b60405180910390fd5b81811015611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790613e83565b60405180910390fd5b60005b82811015611e0157611d4733600d5461265f565b600d6000815480929190611d5a906142de565b91905055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dab919061409c565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611df9906142de565b915050611d33565b507f6a12a358b1ea6cc11eebc8b59ef2beac4a9954ad7b2e29b85b7675421896e5b0338334604051611e3593929190613bed565b60405180910390a15050565b61022b81565b6000600c54600d611e58919061417d565b905090565b60126020528060005260406000206000915054906101000a900467ffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f2061219e565b73ffffffffffffffffffffffffffffffffffffffff16611f3e6113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90613e23565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611fc861219e565b73ffffffffffffffffffffffffffffffffffffffff16611fe66113fd565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390613e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613cc3565b60405180910390fd5b6120b581612599565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061212b575061212a826128cc565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661221983611177565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226a82612132565b6122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090613d63565b60405180910390fd5b60006122b483611177565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232357508373ffffffffffffffffffffffffffffffffffffffff1661230b84610acf565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233457506123338185611e84565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235d82611177565b73ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613d03565b60405180910390fd5b61242e8383836129ae565b6124396000826121a6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612489919061417d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e0919061409c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126798282604051806020016040528060008152506129be565b5050565b61268884848461233d565b61269484848484612a19565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ca90613ca3565b60405180910390fd5b50505050565b6060600f80546126e89061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546127149061427b565b80156127615780601f1061273657610100808354040283529160200191612761565b820191906000526020600020905b81548152906001019060200180831161274457829003601f168201915b5050505050905090565b606060008214156127b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c7565b600082905060005b600082146127e55780806127ce906142de565b915050600a826127de91906140f2565b91506127bb565b60008167ffffffffffffffff81111561280157612800614443565b5b6040519080825280601f01601f1916602001820160405280156128335781602001600182028036833780820191505090505b5090505b600085146128c05760018261284c919061417d565b9150600a8561285b9190614327565b6030612867919061409c565b60f81b81838151811061287d5761287c614414565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b991906140f2565b9450612837565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061299757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806129a757506129a682612bb0565b5b9050919050565b6129b9838383612c1a565b505050565b6129c88383612d2e565b6129d56000848484612a19565b612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90613ca3565b60405180910390fd5b505050565b6000612a3a8473ffffffffffffffffffffffffffffffffffffffff16612efc565b15612ba3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a6361219e565b8786866040518563ffffffff1660e01b8152600401612a859493929190613ba1565b602060405180830381600087803b158015612a9f57600080fd5b505af1925050508015612ad057506040513d601f19601f82011682018060405250810190612acd91906135f6565b60015b612b53573d8060008114612b00576040519150601f19603f3d011682016040523d82523d6000602084013e612b05565b606091505b50600081511415612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290613ca3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba8565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c25838383612f0f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6857612c6381612f14565b612ca7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ca657612ca58382612f5d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cea57612ce5816130ca565b612d29565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2857612d27828261319b565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613de3565b60405180910390fd5b612da781612132565b15612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90613ce3565b60405180910390fd5b612df3600083836129ae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e43919061409c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f6a846112b7565b612f74919061417d565b9050600060076000848152602001908152602001600020549050818114613059576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130de919061417d565b905060006009600084815260200190815260200160002054905060006008838154811061310e5761310d614414565b5b9060005260206000200154905080600883815481106131305761312f614414565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061317f5761317e6143e5565b5b6001900381819060005260206000200160009055905550505050565b60006131a6836112b7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132269061427b565b90600052602060002090601f016020900481019282613248576000855561328f565b82601f1061326157805160ff191683800117855561328f565b8280016001018555821561328f579182015b8281111561328e578251825591602001919060010190613273565b5b50905061329c91906132a0565b5090565b5b808211156132b95760008160009055506001016132a1565b5090565b60006132d06132cb84613fbe565b613f99565b9050828152602081018484840111156132ec576132eb614477565b5b6132f7848285614239565b509392505050565b600061331261330d84613fef565b613f99565b90508281526020810184848401111561332e5761332d614477565b5b613339848285614239565b509392505050565b60008135905061335081614acc565b92915050565b60008135905061336581614ae3565b92915050565b60008135905061337a81614afa565b92915050565b60008151905061338f81614afa565b92915050565b600082601f8301126133aa576133a9614472565b5b81356133ba8482602086016132bd565b91505092915050565b600082601f8301126133d8576133d7614472565b5b81356133e88482602086016132ff565b91505092915050565b60008135905061340081614b11565b92915050565b60006020828403121561341c5761341b614481565b5b600061342a84828501613341565b91505092915050565b6000806040838503121561344a57613449614481565b5b600061345885828601613341565b925050602061346985828601613341565b9150509250929050565b60008060006060848603121561348c5761348b614481565b5b600061349a86828701613341565b93505060206134ab86828701613341565b92505060406134bc868287016133f1565b9150509250925092565b600080600080608085870312156134e0576134df614481565b5b60006134ee87828801613341565b94505060206134ff87828801613341565b9350506040613510878288016133f1565b925050606085013567ffffffffffffffff8111156135315761353061447c565b5b61353d87828801613395565b91505092959194509250565b600080604083850312156135605761355f614481565b5b600061356e85828601613341565b925050602061357f85828601613356565b9150509250929050565b600080604083850312156135a05761359f614481565b5b60006135ae85828601613341565b92505060206135bf858286016133f1565b9150509250929050565b6000602082840312156135df576135de614481565b5b60006135ed8482850161336b565b91505092915050565b60006020828403121561360c5761360b614481565b5b600061361a84828501613380565b91505092915050565b60006020828403121561363957613638614481565b5b600082013567ffffffffffffffff8111156136575761365661447c565b5b613663848285016133c3565b91505092915050565b60006020828403121561368257613681614481565b5b6000613690848285016133f1565b91505092915050565b600080604083850312156136b0576136af614481565b5b60006136be858286016133f1565b92505060206136cf85828601613341565b9150509250929050565b60006136e58383613b35565b60208301905092915050565b6136fa816141b1565b82525050565b600061370b82614030565b613715818561405e565b935061372083614020565b8060005b8381101561375157815161373888826136d9565b975061374383614051565b925050600181019050613724565b5085935050505092915050565b613767816141c3565b82525050565b60006137788261403b565b613782818561406f565b9350613792818560208601614248565b61379b81614486565b840191505092915050565b60006137b182614046565b6137bb8185614080565b93506137cb818560208601614248565b6137d481614486565b840191505092915050565b60006137ea82614046565b6137f48185614091565b9350613804818560208601614248565b80840191505092915050565b600061381d602b83614080565b915061382882614497565b604082019050919050565b6000613840603283614080565b915061384b826144e6565b604082019050919050565b6000613863602683614080565b915061386e82614535565b604082019050919050565b6000613886601c83614080565b915061389182614584565b602082019050919050565b60006138a9602483614080565b91506138b4826145ad565b604082019050919050565b60006138cc601983614080565b91506138d7826145fc565b602082019050919050565b60006138ef601983614080565b91506138fa82614625565b602082019050919050565b6000613912602c83614080565b915061391d8261464e565b604082019050919050565b6000613935603883614080565b91506139408261469d565b604082019050919050565b6000613958602a83614080565b9150613963826146ec565b604082019050919050565b600061397b602983614080565b91506139868261473b565b604082019050919050565b600061399e602083614080565b91506139a98261478a565b602082019050919050565b60006139c1602c83614080565b91506139cc826147b3565b604082019050919050565b60006139e4602083614080565b91506139ef82614802565b602082019050919050565b6000613a07601783614080565b9150613a128261482b565b602082019050919050565b6000613a2a602983614080565b9150613a3582614854565b604082019050919050565b6000613a4d603683614080565b9150613a58826148a3565b604082019050919050565b6000613a70602f83614080565b9150613a7b826148f2565b604082019050919050565b6000613a93602b83614080565b9150613a9e82614941565b604082019050919050565b6000613ab6602183614080565b9150613ac182614990565b604082019050919050565b6000613ad9602383614080565b9150613ae4826149df565b604082019050919050565b6000613afc603183614080565b9150613b0782614a2e565b604082019050919050565b6000613b1f602c83614080565b9150613b2a82614a7d565b604082019050919050565b613b3e8161421b565b82525050565b613b4d8161421b565b82525050565b613b5c81614225565b82525050565b6000613b6e82856137df565b9150613b7a82846137df565b91508190509392505050565b6000602082019050613b9b60008301846136f1565b92915050565b6000608082019050613bb660008301876136f1565b613bc360208301866136f1565b613bd06040830185613b44565b8181036060830152613be2818461376d565b905095945050505050565b6000606082019050613c0260008301866136f1565b613c0f6020830185613b44565b613c1c6040830184613b44565b949350505050565b60006020820190508181036000830152613c3e8184613700565b905092915050565b6000602082019050613c5b600083018461375e565b92915050565b60006020820190508181036000830152613c7b81846137a6565b905092915050565b60006020820190508181036000830152613c9c81613810565b9050919050565b60006020820190508181036000830152613cbc81613833565b9050919050565b60006020820190508181036000830152613cdc81613856565b9050919050565b60006020820190508181036000830152613cfc81613879565b9050919050565b60006020820190508181036000830152613d1c8161389c565b9050919050565b60006020820190508181036000830152613d3c816138bf565b9050919050565b60006020820190508181036000830152613d5c816138e2565b9050919050565b60006020820190508181036000830152613d7c81613905565b9050919050565b60006020820190508181036000830152613d9c81613928565b9050919050565b60006020820190508181036000830152613dbc8161394b565b9050919050565b60006020820190508181036000830152613ddc8161396e565b9050919050565b60006020820190508181036000830152613dfc81613991565b9050919050565b60006020820190508181036000830152613e1c816139b4565b9050919050565b60006020820190508181036000830152613e3c816139d7565b9050919050565b60006020820190508181036000830152613e5c816139fa565b9050919050565b60006020820190508181036000830152613e7c81613a1d565b9050919050565b60006020820190508181036000830152613e9c81613a40565b9050919050565b60006020820190508181036000830152613ebc81613a63565b9050919050565b60006020820190508181036000830152613edc81613a86565b9050919050565b60006020820190508181036000830152613efc81613aa9565b9050919050565b60006020820190508181036000830152613f1c81613acc565b9050919050565b60006020820190508181036000830152613f3c81613aef565b9050919050565b60006020820190508181036000830152613f5c81613b12565b9050919050565b6000602082019050613f786000830184613b44565b92915050565b6000602082019050613f936000830184613b53565b92915050565b6000613fa3613fb4565b9050613faf82826142ad565b919050565b6000604051905090565b600067ffffffffffffffff821115613fd957613fd8614443565b5b613fe282614486565b9050602081019050919050565b600067ffffffffffffffff82111561400a57614009614443565b5b61401382614486565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140a78261421b565b91506140b28361421b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140e7576140e6614358565b5b828201905092915050565b60006140fd8261421b565b91506141088361421b565b92508261411857614117614387565b5b828204905092915050565b600061412e8261421b565b91506141398361421b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561417257614171614358565b5b828202905092915050565b60006141888261421b565b91506141938361421b565b9250828210156141a6576141a5614358565b5b828203905092915050565b60006141bc826141fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561426657808201518184015260208101905061424b565b83811115614275576000848401525b50505050565b6000600282049050600182168061429357607f821691505b602082108114156142a7576142a66143b6565b5b50919050565b6142b682614486565b810181811067ffffffffffffffff821117156142d5576142d4614443565b5b80604052505050565b60006142e98261421b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561431c5761431b614358565b5b600182019050919050565b60006143328261421b565b915061433d8361421b565b92508261434d5761434c614387565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f6e73697374656e7420616d6f756e742073656e742100000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420656e6f75676820546f6b656e73206c6566742e000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4164647265737320646f6573206e6f74206f776e20656e6f756768206e66747360008201527f2066726f6d20666972737420636f6c6c656374696f6e00000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f752063616e6e6f74206d696e74206d6f7265207468616e203220546f6b6560008201527f6e73206174206f6e636521000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468617420776f756c642065786365656420746865206d61782072657365727660008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ad5816141b1565b8114614ae057600080fd5b50565b614aec816141c3565b8114614af757600080fd5b50565b614b03816141cf565b8114614b0e57600080fd5b50565b614b1a8161421b565b8114614b2557600080fd5b5056fea2646970667358221220be86fc9514ce9f5e02559ec45cbde1065d64d725962e5d55adc48384a602938064736f6c63430008070033

Deployed Bytecode

0x60806040526004361061025c5760003560e01c8063715018a611610144578063bc6d2635116100b6578063d5abeb011161007a578063d5abeb0114610904578063daa023aa1461092f578063e3684e391461095a578063e985e9c514610997578063ed1fc2a2146109d4578063f2fde38b146109eb5761025c565b8063bc6d26351461082c578063c313b33914610843578063c38f761714610880578063c87b56dd146108ab578063c9b298f1146108e85761025c565b806398a8cffe1161010857806398a8cffe1461072d57806398d5fdca1461076a578063a0712d6814610795578063a22cb465146107b1578063b0e1d7f3146107da578063b88d4fde146108035761025c565b8063715018a61461066c57806373b6abd5146106835780638da5cb5b146106ae57806391b7f5ed146106d957806395d89b41146107025761025c565b80633ccfd60b116101dd5780634f6ccce7116101a15780634f6ccce71461053657806355f804b3146105735780635c474f9e1461059c5780636352211e146105c75780636c0360eb1461060457806370a082311461062f5761025c565b80633ccfd60b1461045157806342842e0e14610468578063438b63001461049157806346ad5859146104ce5780634dab7d24146104f95761025c565b806318160ddd1161022457806318160ddd1461035a57806323b343481461038557806323b872dd146103ae5780632f745c59146103d7578063368e1861146104145761025c565b806301ffc9a71461026157806304549d6f1461029e57806306fdde03146102c9578063081812fc146102f4578063095ea7b314610331575b600080fd5b34801561026d57600080fd5b50610288600480360381019061028391906135c9565b610a14565b6040516102959190613c46565b60405180910390f35b3480156102aa57600080fd5b506102b3610a26565b6040516102c09190613c46565b60405180910390f35b3480156102d557600080fd5b506102de610a3d565b6040516102eb9190613c61565b60405180910390f35b34801561030057600080fd5b5061031b6004803603810190610316919061366c565b610acf565b6040516103289190613b86565b60405180910390f35b34801561033d57600080fd5b5061035860048036038101906103539190613589565b610b54565b005b34801561036657600080fd5b5061036f610c6c565b60405161037c9190613f63565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613589565b610c79565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190613473565b610d3d565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613589565b610d9d565b60405161040b9190613f63565b60405180910390f35b34801561042057600080fd5b5061043b60048036038101906104369190613406565b610e42565b6040516104489190613f63565b60405180910390f35b34801561045d57600080fd5b50610466610e5a565b005b34801561047457600080fd5b5061048f600480360381019061048a9190613473565b610f1f565b005b34801561049d57600080fd5b506104b860048036038101906104b39190613406565b610f3f565b6040516104c59190613c24565b60405180910390f35b3480156104da57600080fd5b506104e3610fed565b6040516104f09190613f63565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190613406565b611010565b60405161052d9190613f63565b60405180910390f35b34801561054257600080fd5b5061055d6004803603810190610558919061366c565b611059565b60405161056a9190613f63565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613623565b6110ca565b005b3480156105a857600080fd5b506105b1611160565b6040516105be9190613c46565b60405180910390f35b3480156105d357600080fd5b506105ee60048036038101906105e9919061366c565b611177565b6040516105fb9190613b86565b60405180910390f35b34801561061057600080fd5b50610619611229565b6040516106269190613c61565b60405180910390f35b34801561063b57600080fd5b5061065660048036038101906106519190613406565b6112b7565b6040516106639190613f63565b60405180910390f35b34801561067857600080fd5b5061068161136f565b005b34801561068f57600080fd5b506106986113f7565b6040516106a59190613f63565b60405180910390f35b3480156106ba57600080fd5b506106c36113fd565b6040516106d09190613b86565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb919061366c565b611427565b005b34801561070e57600080fd5b506107176114ad565b6040516107249190613c61565b60405180910390f35b34801561073957600080fd5b50610754600480360381019061074f9190613406565b61153f565b6040516107619190613f63565b60405180910390f35b34801561077657600080fd5b5061077f611557565b60405161078c9190613f63565b60405180910390f35b6107af60048036038101906107aa919061366c565b611561565b005b3480156107bd57600080fd5b506107d860048036038101906107d39190613549565b6116ec565b005b3480156107e657600080fd5b5061080160048036038101906107fc9190613699565b61186d565b005b34801561080f57600080fd5b5061082a600480360381019061082591906134c6565b6119ad565b005b34801561083857600080fd5b50610841611a0f565b005b34801561084f57600080fd5b5061086a60048036038101906108659190613406565b611ab7565b6040516108779190613f63565b60405180910390f35b34801561088c57600080fd5b50610895611b4a565b6040516108a29190613f63565b60405180910390f35b3480156108b757600080fd5b506108d260048036038101906108cd919061366c565b611b4f565b6040516108df9190613c61565b60405180910390f35b61090260048036038101906108fd919061366c565b611bf6565b005b34801561091057600080fd5b50610919611e41565b6040516109269190613f63565b60405180910390f35b34801561093b57600080fd5b50610944611e47565b6040516109519190613f63565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c919061366c565b611e5d565b60405161098e9190613f7e565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b99190613433565b611e84565b6040516109cb9190613c46565b60405180910390f35b3480156109e057600080fd5b506109e9611f18565b005b3480156109f757600080fd5b50610a126004803603810190610a0d9190613406565b611fc0565b005b6000610a1f826120b8565b9050919050565b6000600e60019054906101000a900460ff16905090565b606060008054610a4c9061427b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a789061427b565b8015610ac55780601f10610a9a57610100808354040283529160200191610ac5565b820191906000526020600020905b815481529060010190602001808311610aa857829003601f168201915b5050505050905090565b6000610ada82612132565b610b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1090613e03565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b5f82611177565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc790613ee3565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610bef61219e565b73ffffffffffffffffffffffffffffffffffffffff161480610c1e5750610c1d81610c1861219e565b611e84565b5b610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490613d83565b60405180910390fd5b610c6783836121a6565b505050565b6000600880549050905090565b610c8161219e565b73ffffffffffffffffffffffffffffffffffffffff16610c9f6113fd565b73ffffffffffffffffffffffffffffffffffffffff1614610cf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cec90613e23565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b610d4e610d4861219e565b8261225f565b610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490613f23565b60405180910390fd5b610d9883838361233d565b505050565b6000610da8836112b7565b8210610de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de090613c83565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60106020528060005260406000206000915090505481565b610e6261219e565b73ffffffffffffffffffffffffffffffffffffffff16610e806113fd565b73ffffffffffffffffffffffffffffffffffffffff1614610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613e23565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f1c573d6000803e3d6000fd5b50565b610f3a838383604051806020016040528060008152506119ad565b505050565b60606000610f4c836112b7565b905060008167ffffffffffffffff811115610f6a57610f69614443565b5b604051908082528060200260200182016040528015610f985781602001602082028036833780820191505090505b50905060005b82811015610fe257610fb08582610d9d565b828281518110610fc357610fc2614414565b5b6020026020010181815250508080610fda906142de565b915050610f9e565b508092505050919050565b60006001600d5461022b611001919061417d565b61100b919061409c565b905090565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000611063610c6c565b82106110a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109b90613f43565b60405180910390fd5b600882815481106110b8576110b7614414565b5b90600052602060002001549050919050565b6110d261219e565b73ffffffffffffffffffffffffffffffffffffffff166110f06113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113d90613e23565b60405180910390fd5b80600f908051906020019061115c92919061321a565b5050565b6000600e60009054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121790613dc3565b60405180910390fd5b80915050919050565b600f80546112369061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546112629061427b565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131f90613da3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61137761219e565b73ffffffffffffffffffffffffffffffffffffffff166113956113fd565b73ffffffffffffffffffffffffffffffffffffffff16146113eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e290613e23565b60405180910390fd5b6113f56000612599565b565b600d5481565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61142f61219e565b73ffffffffffffffffffffffffffffffffffffffff1661144d6113fd565b73ffffffffffffffffffffffffffffffffffffffff16146114a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149a90613e23565b60405180910390fd5b80600b8190555050565b6060600180546114bc9061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546114e89061427b565b80156115355780601f1061150a57610100808354040283529160200191611535565b820191906000526020600020905b81548152906001019060200180831161151857829003601f168201915b5050505050905090565b60116020528060005260406000206000915090505481565b6000600b54905090565b600e60009054906101000a900460ff1661157a57600080fd5b600381106115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b490613ec3565b60405180910390fd5b600161022b6115cc919061409c565b81600d546115da919061409c565b111561161b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161290613e43565b60405180910390fd5b34600b548261162a9190614123565b111561166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166290613d43565b60405180910390fd5b60005b818110156116ad5761168233600d5461265f565b600d6000815480929190611695906142de565b919050555080806116a5906142de565b91505061166e565b507f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff3382346040516116e193929190613bed565b60405180910390a150565b6116f461219e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990613d23565b60405180910390fd5b806005600061176f61219e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661181c61219e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118619190613c46565b60405180910390a35050565b61187561219e565b73ffffffffffffffffffffffffffffffffffffffff166118936113fd565b73ffffffffffffffffffffffffffffffffffffffff16146118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090613e23565b60405180910390fd5b600d600c54836118f9919061409c565b111561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193190613f03565b60405180910390fd5b60005b828110156119945761195182600d5461265f565b600d6000815480929190611964906142de565b9190505550600c600081548092919061197c906142de565b9190505550808061198c906142de565b91505061193d565b5081600c546119a3919061409c565b600c819055505050565b6119be6119b861219e565b8361225f565b6119fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f490613f23565b60405180910390fd5b611a098484848461267d565b50505050565b611a1761219e565b73ffffffffffffffffffffffffffffffffffffffff16611a356113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8290613e23565b60405180910390fd5b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b43919061417d565b9050919050565b600d81565b6060611b5a82612132565b611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090613ea3565b60405180910390fd5b6000611ba36126d9565b90506000815111611bc35760405180602001604052806000815250611bee565b80611bcd8461276b565b604051602001611bde929190613b62565b6040516020818303038152906040525b915050919050565b600e60019054906101000a900460ff16611c0f57600080fd5b6000601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c9b919061417d565b905034600b5483611cac9190614123565b1115611ced576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce490613d43565b60405180910390fd5b81811015611d30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2790613e83565b60405180910390fd5b60005b82811015611e0157611d4733600d5461265f565b600d6000815480929190611d5a906142de565b91905055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dab919061409c565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508080611df9906142de565b915050611d33565b507f6a12a358b1ea6cc11eebc8b59ef2beac4a9954ad7b2e29b85b7675421896e5b0338334604051611e3593929190613bed565b60405180910390a15050565b61022b81565b6000600c54600d611e58919061417d565b905090565b60126020528060005260406000206000915054906101000a900467ffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f2061219e565b73ffffffffffffffffffffffffffffffffffffffff16611f3e6113fd565b73ffffffffffffffffffffffffffffffffffffffff1614611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90613e23565b60405180910390fd5b600e60019054906101000a900460ff1615600e60016101000a81548160ff021916908315150217905550565b611fc861219e565b73ffffffffffffffffffffffffffffffffffffffff16611fe66113fd565b73ffffffffffffffffffffffffffffffffffffffff161461203c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203390613e23565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613cc3565b60405180910390fd5b6120b581612599565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061212b575061212a826128cc565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661221983611177565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226a82612132565b6122a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a090613d63565b60405180910390fd5b60006122b483611177565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061232357508373ffffffffffffffffffffffffffffffffffffffff1661230b84610acf565b73ffffffffffffffffffffffffffffffffffffffff16145b8061233457506123338185611e84565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661235d82611177565b73ffffffffffffffffffffffffffffffffffffffff16146123b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123aa90613e63565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90613d03565b60405180910390fd5b61242e8383836129ae565b6124396000826121a6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612489919061417d565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124e0919061409c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126798282604051806020016040528060008152506129be565b5050565b61268884848461233d565b61269484848484612a19565b6126d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ca90613ca3565b60405180910390fd5b50505050565b6060600f80546126e89061427b565b80601f01602080910402602001604051908101604052809291908181526020018280546127149061427b565b80156127615780601f1061273657610100808354040283529160200191612761565b820191906000526020600020905b81548152906001019060200180831161274457829003601f168201915b5050505050905090565b606060008214156127b3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128c7565b600082905060005b600082146127e55780806127ce906142de565b915050600a826127de91906140f2565b91506127bb565b60008167ffffffffffffffff81111561280157612800614443565b5b6040519080825280601f01601f1916602001820160405280156128335781602001600182028036833780820191505090505b5090505b600085146128c05760018261284c919061417d565b9150600a8561285b9190614327565b6030612867919061409c565b60f81b81838151811061287d5761287c614414565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128b991906140f2565b9450612837565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061299757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806129a757506129a682612bb0565b5b9050919050565b6129b9838383612c1a565b505050565b6129c88383612d2e565b6129d56000848484612a19565b612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90613ca3565b60405180910390fd5b505050565b6000612a3a8473ffffffffffffffffffffffffffffffffffffffff16612efc565b15612ba3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612a6361219e565b8786866040518563ffffffff1660e01b8152600401612a859493929190613ba1565b602060405180830381600087803b158015612a9f57600080fd5b505af1925050508015612ad057506040513d601f19601f82011682018060405250810190612acd91906135f6565b60015b612b53573d8060008114612b00576040519150601f19603f3d011682016040523d82523d6000602084013e612b05565b606091505b50600081511415612b4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4290613ca3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ba8565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612c25838383612f0f565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6857612c6381612f14565b612ca7565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ca657612ca58382612f5d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cea57612ce5816130ca565b612d29565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2857612d27828261319b565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9590613de3565b60405180910390fd5b612da781612132565b15612de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dde90613ce3565b60405180910390fd5b612df3600083836129ae565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e43919061409c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612f6a846112b7565b612f74919061417d565b9050600060076000848152602001908152602001600020549050818114613059576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506130de919061417d565b905060006009600084815260200190815260200160002054905060006008838154811061310e5761310d614414565b5b9060005260206000200154905080600883815481106131305761312f614414565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061317f5761317e6143e5565b5b6001900381819060005260206000200160009055905550505050565b60006131a6836112b7565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546132269061427b565b90600052602060002090601f016020900481019282613248576000855561328f565b82601f1061326157805160ff191683800117855561328f565b8280016001018555821561328f579182015b8281111561328e578251825591602001919060010190613273565b5b50905061329c91906132a0565b5090565b5b808211156132b95760008160009055506001016132a1565b5090565b60006132d06132cb84613fbe565b613f99565b9050828152602081018484840111156132ec576132eb614477565b5b6132f7848285614239565b509392505050565b600061331261330d84613fef565b613f99565b90508281526020810184848401111561332e5761332d614477565b5b613339848285614239565b509392505050565b60008135905061335081614acc565b92915050565b60008135905061336581614ae3565b92915050565b60008135905061337a81614afa565b92915050565b60008151905061338f81614afa565b92915050565b600082601f8301126133aa576133a9614472565b5b81356133ba8482602086016132bd565b91505092915050565b600082601f8301126133d8576133d7614472565b5b81356133e88482602086016132ff565b91505092915050565b60008135905061340081614b11565b92915050565b60006020828403121561341c5761341b614481565b5b600061342a84828501613341565b91505092915050565b6000806040838503121561344a57613449614481565b5b600061345885828601613341565b925050602061346985828601613341565b9150509250929050565b60008060006060848603121561348c5761348b614481565b5b600061349a86828701613341565b93505060206134ab86828701613341565b92505060406134bc868287016133f1565b9150509250925092565b600080600080608085870312156134e0576134df614481565b5b60006134ee87828801613341565b94505060206134ff87828801613341565b9350506040613510878288016133f1565b925050606085013567ffffffffffffffff8111156135315761353061447c565b5b61353d87828801613395565b91505092959194509250565b600080604083850312156135605761355f614481565b5b600061356e85828601613341565b925050602061357f85828601613356565b9150509250929050565b600080604083850312156135a05761359f614481565b5b60006135ae85828601613341565b92505060206135bf858286016133f1565b9150509250929050565b6000602082840312156135df576135de614481565b5b60006135ed8482850161336b565b91505092915050565b60006020828403121561360c5761360b614481565b5b600061361a84828501613380565b91505092915050565b60006020828403121561363957613638614481565b5b600082013567ffffffffffffffff8111156136575761365661447c565b5b613663848285016133c3565b91505092915050565b60006020828403121561368257613681614481565b5b6000613690848285016133f1565b91505092915050565b600080604083850312156136b0576136af614481565b5b60006136be858286016133f1565b92505060206136cf85828601613341565b9150509250929050565b60006136e58383613b35565b60208301905092915050565b6136fa816141b1565b82525050565b600061370b82614030565b613715818561405e565b935061372083614020565b8060005b8381101561375157815161373888826136d9565b975061374383614051565b925050600181019050613724565b5085935050505092915050565b613767816141c3565b82525050565b60006137788261403b565b613782818561406f565b9350613792818560208601614248565b61379b81614486565b840191505092915050565b60006137b182614046565b6137bb8185614080565b93506137cb818560208601614248565b6137d481614486565b840191505092915050565b60006137ea82614046565b6137f48185614091565b9350613804818560208601614248565b80840191505092915050565b600061381d602b83614080565b915061382882614497565b604082019050919050565b6000613840603283614080565b915061384b826144e6565b604082019050919050565b6000613863602683614080565b915061386e82614535565b604082019050919050565b6000613886601c83614080565b915061389182614584565b602082019050919050565b60006138a9602483614080565b91506138b4826145ad565b604082019050919050565b60006138cc601983614080565b91506138d7826145fc565b602082019050919050565b60006138ef601983614080565b91506138fa82614625565b602082019050919050565b6000613912602c83614080565b915061391d8261464e565b604082019050919050565b6000613935603883614080565b91506139408261469d565b604082019050919050565b6000613958602a83614080565b9150613963826146ec565b604082019050919050565b600061397b602983614080565b91506139868261473b565b604082019050919050565b600061399e602083614080565b91506139a98261478a565b602082019050919050565b60006139c1602c83614080565b91506139cc826147b3565b604082019050919050565b60006139e4602083614080565b91506139ef82614802565b602082019050919050565b6000613a07601783614080565b9150613a128261482b565b602082019050919050565b6000613a2a602983614080565b9150613a3582614854565b604082019050919050565b6000613a4d603683614080565b9150613a58826148a3565b604082019050919050565b6000613a70602f83614080565b9150613a7b826148f2565b604082019050919050565b6000613a93602b83614080565b9150613a9e82614941565b604082019050919050565b6000613ab6602183614080565b9150613ac182614990565b604082019050919050565b6000613ad9602383614080565b9150613ae4826149df565b604082019050919050565b6000613afc603183614080565b9150613b0782614a2e565b604082019050919050565b6000613b1f602c83614080565b9150613b2a82614a7d565b604082019050919050565b613b3e8161421b565b82525050565b613b4d8161421b565b82525050565b613b5c81614225565b82525050565b6000613b6e82856137df565b9150613b7a82846137df565b91508190509392505050565b6000602082019050613b9b60008301846136f1565b92915050565b6000608082019050613bb660008301876136f1565b613bc360208301866136f1565b613bd06040830185613b44565b8181036060830152613be2818461376d565b905095945050505050565b6000606082019050613c0260008301866136f1565b613c0f6020830185613b44565b613c1c6040830184613b44565b949350505050565b60006020820190508181036000830152613c3e8184613700565b905092915050565b6000602082019050613c5b600083018461375e565b92915050565b60006020820190508181036000830152613c7b81846137a6565b905092915050565b60006020820190508181036000830152613c9c81613810565b9050919050565b60006020820190508181036000830152613cbc81613833565b9050919050565b60006020820190508181036000830152613cdc81613856565b9050919050565b60006020820190508181036000830152613cfc81613879565b9050919050565b60006020820190508181036000830152613d1c8161389c565b9050919050565b60006020820190508181036000830152613d3c816138bf565b9050919050565b60006020820190508181036000830152613d5c816138e2565b9050919050565b60006020820190508181036000830152613d7c81613905565b9050919050565b60006020820190508181036000830152613d9c81613928565b9050919050565b60006020820190508181036000830152613dbc8161394b565b9050919050565b60006020820190508181036000830152613ddc8161396e565b9050919050565b60006020820190508181036000830152613dfc81613991565b9050919050565b60006020820190508181036000830152613e1c816139b4565b9050919050565b60006020820190508181036000830152613e3c816139d7565b9050919050565b60006020820190508181036000830152613e5c816139fa565b9050919050565b60006020820190508181036000830152613e7c81613a1d565b9050919050565b60006020820190508181036000830152613e9c81613a40565b9050919050565b60006020820190508181036000830152613ebc81613a63565b9050919050565b60006020820190508181036000830152613edc81613a86565b9050919050565b60006020820190508181036000830152613efc81613aa9565b9050919050565b60006020820190508181036000830152613f1c81613acc565b9050919050565b60006020820190508181036000830152613f3c81613aef565b9050919050565b60006020820190508181036000830152613f5c81613b12565b9050919050565b6000602082019050613f786000830184613b44565b92915050565b6000602082019050613f936000830184613b53565b92915050565b6000613fa3613fb4565b9050613faf82826142ad565b919050565b6000604051905090565b600067ffffffffffffffff821115613fd957613fd8614443565b5b613fe282614486565b9050602081019050919050565b600067ffffffffffffffff82111561400a57614009614443565b5b61401382614486565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006140a78261421b565b91506140b28361421b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140e7576140e6614358565b5b828201905092915050565b60006140fd8261421b565b91506141088361421b565b92508261411857614117614387565b5b828204905092915050565b600061412e8261421b565b91506141398361421b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561417257614171614358565b5b828202905092915050565b60006141888261421b565b91506141938361421b565b9250828210156141a6576141a5614358565b5b828203905092915050565b60006141bc826141fb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561426657808201518184015260208101905061424b565b83811115614275576000848401525b50505050565b6000600282049050600182168061429357607f821691505b602082108114156142a7576142a66143b6565b5b50919050565b6142b682614486565b810181811067ffffffffffffffff821117156142d5576142d4614443565b5b80604052505050565b60006142e98261421b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561431c5761431b614358565b5b600182019050919050565b60006143328261421b565b915061433d8361421b565b92508261434d5761434c614387565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f6e73697374656e7420616d6f756e742073656e742100000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f7420656e6f75676820546f6b656e73206c6566742e000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4164647265737320646f6573206e6f74206f776e20656e6f756768206e66747360008201527f2066726f6d20666972737420636f6c6c656374696f6e00000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f596f752063616e6e6f74206d696e74206d6f7265207468616e203220546f6b6560008201527f6e73206174206f6e636521000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5468617420776f756c642065786365656420746865206d61782072657365727660008201527f65642e0000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b614ad5816141b1565b8114614ae057600080fd5b50565b614aec816141c3565b8114614af757600080fd5b50565b614b03816141cf565b8114614b0e57600080fd5b50565b614b1a8161421b565b8114614b2557600080fd5b5056fea2646970667358221220be86fc9514ce9f5e02559ec45cbde1065d64d725962e5d55adc48384a602938064736f6c63430008070033

Deployed Bytecode Sourcemap

50143:20582:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;69937:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67890:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31816:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33375:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32898:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44564:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70120:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34265:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44232:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50588:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;69599:107;;;;;;;;;;;;;:::i;:::-;;34675:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68780:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70606:116;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;70275:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44754:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68191:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68095:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31510:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50560:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31240:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11515:94;;;;;;;;;;;;;:::i;:::-;;50452:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10864:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68466:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31985:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50646:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68567:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67217:553;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33668:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;69133:458;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34931:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;67992:95;;;;;;;;;;;;;:::i;:::-;;70428:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50319:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32160:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66571:638;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50273:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68657:115;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50703:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34034:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67778:104;;;;;;;;;;;;;:::i;:::-;;11764:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;69937:171;70040:4;70064:36;70088:11;70064:23;:36::i;:::-;70057:43;;69937:171;;;:::o;67890:94::-;67937:4;67961:15;;;;;;;;;;;67954:22;;67890:94;:::o;31816:100::-;31870:13;31903:5;31896:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31816:100;:::o;33375:221::-;33451:7;33479:16;33487:7;33479;:16::i;:::-;33471:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:15;:24;33580:7;33564:24;;;;;;;;;;;;;;;;;;;;;33557:31;;33375:221;;;:::o;32898:411::-;32979:13;32995:23;33010:7;32995:14;:23::i;:::-;32979:39;;33043:5;33037:11;;:2;:11;;;;33029:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;33137:5;33121:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;33146:37;33163:5;33170:12;:10;:12::i;:::-;33146:16;:37::i;:::-;33121:62;33099:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;33280:21;33289:2;33293:7;33280:8;:21::i;:::-;32968:341;32898:411;;:::o;44564:113::-;44625:7;44652:10;:17;;;;44645:24;;44564:113;:::o;70120:143::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;70249:6:::1;70218:16;:28;70235:10;70218:28;;;;;;;;;;;;;;;:37;;;;70120:143:::0;;:::o;34265:339::-;34460:41;34479:12;:10;:12::i;:::-;34493:7;34460:18;:41::i;:::-;34452:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34568:28;34578:4;34584:2;34588:7;34568:9;:28::i;:::-;34265:339;;;:::o;44232:256::-;44329:7;44365:23;44382:5;44365:16;:23::i;:::-;44357:5;:31;44349:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;44454:12;:19;44467:5;44454:19;;;;;;;;;;;;;;;:26;44474:5;44454:26;;;;;;;;;;;;44447:33;;44232:256;;;;:::o;50588:51::-;;;;;;;;;;;;;;;;;:::o;69599:107::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;69655:10:::1;69647:28;;:51;69676:21;69647:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;69599:107::o:0;34675:185::-;34813:39;34830:4;34836:2;34840:7;34813:39;;;;;;;;;;;;:16;:39::i;:::-;34675:185;;;:::o;68780:345::-;68840:16;68869:18;68890:17;68900:6;68890:9;:17::i;:::-;68869:38;;68920:25;68962:10;68948:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68920:53;;68989:9;68984:108;69004:10;69000:1;:14;68984:108;;;69050:30;69070:6;69078:1;69050:19;:30::i;:::-;69036:8;69045:1;69036:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;69016:3;;;;;:::i;:::-;;;;68984:108;;;;69109:8;69102:15;;;;68780:345;;;:::o;70606:116::-;70658:7;70713:1;70697:13;;50309:3;70685:25;;;;:::i;:::-;:29;;;;:::i;:::-;70678:36;;70606:116;:::o;70275:140::-;70350:7;70378:16;:29;70395:11;70378:29;;;;;;;;;;;;;;;;70371:36;;70275:140;;;:::o;44754:233::-;44829:7;44865:30;:28;:30::i;:::-;44857:5;:38;44849:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;44962:10;44973:5;44962:17;;;;;;;;:::i;:::-;;;;;;;;;;44955:24;;44754:233;;;:::o;68191:92::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;68271:4:::1;68261:7;:14;;;;;;;;;;;;:::i;:::-;;68191:92:::0;:::o;68095:88::-;68139:4;68163:12;;;;;;;;;;;68156:19;;68095:88;:::o;31510:239::-;31582:7;31602:13;31618:7;:16;31626:7;31618:16;;;;;;;;;;;;;;;;;;;;;31602:32;;31670:1;31653:19;;:5;:19;;;;31645:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31736:5;31729:12;;;31510:239;;;:::o;50560:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31240:208::-;31312:7;31357:1;31340:19;;:5;:19;;;;31332:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31424:9;:16;31434:5;31424:16;;;;;;;;;;;;;;;;31417:23;;31240:208;;;:::o;11515:94::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11580:21:::1;11598:1;11580:9;:21::i;:::-;11515:94::o:0;50452:32::-;;;;:::o;10864:87::-;10910:7;10937:6;;;;;;;;;;;10930:13;;10864:87;:::o;68466:93::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;68542:9:::1;68533:6;:18;;;;68466:93:::0;:::o;31985:104::-;32041:13;32074:7;32067:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31985:104;:::o;50646:50::-;;;;;;;;;;;;;;;;;:::o;68567:82::-;68608:7;68635:6;;68628:13;;68567:82;:::o;67217:553::-;66437:12;;;;;;;;;;;66429:21;;;;;;67308:1:::1;67299:6;:10;67291:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;67428:1;50309:3;67416:13;;;;:::i;:::-;67406:6;67390:13;;:22;;;;:::i;:::-;:39;;67368:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;67518:9;67508:6;;67499;:15;;;;:::i;:::-;:28;;67491:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;67575:9;67570:130;67594:6;67590:1;:10;67570:130;;;67622:36;67632:10;67644:13;;67622:9;:36::i;:::-;67673:13;;:15;;;;;;;;;:::i;:::-;;;;;;67602:3;;;;;:::i;:::-;;;;67570:130;;;;67725:37;67732:10;67744:6;67752:9;67725:37;;;;;;;;:::i;:::-;;;;;;;;67217:553:::0;:::o;33668:295::-;33783:12;:10;:12::i;:::-;33771:24;;:8;:24;;;;33763:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33883:8;33838:18;:32;33857:12;:10;:12::i;:::-;33838:32;;;;;;;;;;;;;;;:42;33871:8;33838:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;33936:8;33907:48;;33922:12;:10;:12::i;:::-;33907:48;;;33946:8;33907:48;;;;;;:::i;:::-;;;;;;;;33668:295;;:::o;69133:458::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50359:2:::1;69254:16;;69244:7;:26;;;;:::i;:::-;:43;;69222:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;69368:9;69363:163;69387:7;69383:1;:11;69363:163;;;69416:35;69426:9;69437:13;;69416:9;:35::i;:::-;69466:13;;:15;;;;;;;;;:::i;:::-;;;;;;69496:16;;:18;;;;;;;;;:::i;:::-;;;;;;69396:3;;;;;:::i;:::-;;;;69363:163;;;;69576:7;69557:16;;:26;;;;:::i;:::-;69538:16;:45;;;;69133:458:::0;;:::o;34931:328::-;35106:41;35125:12;:10;:12::i;:::-;35139:7;35106:18;:41::i;:::-;35098:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;35212:39;35226:4;35232:2;35236:7;35245:5;35212:13;:39::i;:::-;34931:328;;;;:::o;67992:95::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;68067:12:::1;;;;;;;;;;;68066:13;68051:12;;:28;;;;;;;;;;;;;;;;;;67992:95::o:0;70428:166::-;70499:7;70558:15;:28;70574:11;70558:28;;;;;;;;;;;;;;;;70526:16;:29;70543:11;70526:29;;;;;;;;;;;;;;;;:60;;;;:::i;:::-;70519:67;;70428:166;;;:::o;50319:42::-;50359:2;50319:42;:::o;32160:334::-;32233:13;32267:16;32275:7;32267;:16::i;:::-;32259:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32348:21;32372:10;:8;:10::i;:::-;32348:34;;32424:1;32406:7;32400:21;:25;:86;;;;;;;;;;;;;;;;;32452:7;32461:18;:7;:16;:18::i;:::-;32435:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32400:86;32393:93;;;32160:334;;;:::o;66571:638::-;66527:15;;;;;;;;;;;66519:24;;;;;;66655::::1;66713:15;:27;66729:10;66713:27;;;;;;;;;;;;;;;;66682:16;:28;66699:10;66682:28;;;;;;;;;;;;;;;;:58;;;;:::i;:::-;66655:85;;66778:9;66768:6;;66759;:15;;;;:::i;:::-;:28;;66751:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;66856:6;66836:16;:26;;66828:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;66939:9;66934:206;66958:6;66954:1;:10;66934:206;;;66986:36;66996:10;67008:13;;66986:9;:36::i;:::-;67037:13;;:15;;;;;;;;;:::i;:::-;;;;;;67127:1;67097:15;:27;67113:10;67097:27;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;67067:15;:27;67083:10;67067:27;;;;;;;;;;;;;;;:61;;;;66966:3;;;;;:::i;:::-;;;;66934:206;;;;67157:44;67171:10;67183:6;67191:9;67157:44;;;;;;;;:::i;:::-;;;;;;;;66644:565;66571:638:::0;:::o;50273:39::-;50309:3;50273:39;:::o;68657:115::-;68705:7;68748:16;;50359:2;68732:32;;;;:::i;:::-;68725:39;;68657:115;:::o;50703:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;34034:164::-;34131:4;34155:18;:25;34174:5;34155:25;;;;;;;;;;;;;;;:35;34181:8;34155:35;;;;;;;;;;;;;;;;;;;;;;;;;34148:42;;34034:164;;;;:::o;67778:104::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67859:15:::1;;;;;;;;;;;67858:16;67840:15;;:34;;;;;;;;;;;;;;;;;;67778:104::o:0;11764:192::-;11095:12;:10;:12::i;:::-;11084:23;;:7;:5;:7::i;:::-;:23;;;11076:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11873:1:::1;11853:22;;:8;:22;;;;11845:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11929:19;11939:8;11929:9;:19::i;:::-;11764:192:::0;:::o;43924:224::-;44026:4;44065:35;44050:50;;;:11;:50;;;;:90;;;;44104:36;44128:11;44104:23;:36::i;:::-;44050:90;44043:97;;43924:224;;;:::o;36769:127::-;36834:4;36886:1;36858:30;;:7;:16;36866:7;36858:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36851:37;;36769:127;;;:::o;9652:98::-;9705:7;9732:10;9725:17;;9652:98;:::o;40751:174::-;40853:2;40826:15;:24;40842:7;40826:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40909:7;40905:2;40871:46;;40880:23;40895:7;40880:14;:23::i;:::-;40871:46;;;;;;;;;;;;40751:174;;:::o;37063:348::-;37156:4;37181:16;37189:7;37181;:16::i;:::-;37173:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;37257:13;37273:23;37288:7;37273:14;:23::i;:::-;37257:39;;37326:5;37315:16;;:7;:16;;;:51;;;;37359:7;37335:31;;:20;37347:7;37335:11;:20::i;:::-;:31;;;37315:51;:87;;;;37370:32;37387:5;37394:7;37370:16;:32::i;:::-;37315:87;37307:96;;;37063:348;;;;:::o;40055:578::-;40214:4;40187:31;;:23;40202:7;40187:14;:23::i;:::-;:31;;;40179:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40297:1;40283:16;;:2;:16;;;;40275:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;40353:39;40374:4;40380:2;40384:7;40353:20;:39::i;:::-;40457:29;40474:1;40478:7;40457:8;:29::i;:::-;40518:1;40499:9;:15;40509:4;40499:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;40547:1;40530:9;:13;40540:2;40530:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40578:2;40559:7;:16;40567:7;40559:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40617:7;40613:2;40598:27;;40607:4;40598:27;;;;;;;;;;;;40055:578;;;:::o;11964:173::-;12020:16;12039:6;;;;;;;;;;;12020:25;;12065:8;12056:6;;:17;;;;;;;;;;;;;;;;;;12120:8;12089:40;;12110:8;12089:40;;;;;;;;;;;;12009:128;11964:173;:::o;37753:110::-;37829:26;37839:2;37843:7;37829:26;;;;;;;;;;;;:9;:26::i;:::-;37753:110;;:::o;36141:315::-;36298:28;36308:4;36314:2;36318:7;36298:9;:28::i;:::-;36345:48;36368:4;36374:2;36378:7;36387:5;36345:22;:48::i;:::-;36337:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36141:315;;;;:::o;68291:108::-;68351:13;68384:7;68377:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;68291:108;:::o;7268:723::-;7324:13;7554:1;7545:5;:10;7541:53;;;7572:10;;;;;;;;;;;;;;;;;;;;;7541:53;7604:12;7619:5;7604:20;;7635:14;7660:78;7675:1;7667:4;:9;7660:78;;7693:8;;;;;:::i;:::-;;;;7724:2;7716:10;;;;;:::i;:::-;;;7660:78;;;7748:19;7780:6;7770:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7748:39;;7798:154;7814:1;7805:5;:10;7798:154;;7842:1;7832:11;;;;;:::i;:::-;;;7909:2;7901:5;:10;;;;:::i;:::-;7888:2;:24;;;;:::i;:::-;7875:39;;7858:6;7865;7858:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7938:2;7929:11;;;;;:::i;:::-;;;7798:154;;;7976:6;7962:21;;;;;7268:723;;;;:::o;30871:305::-;30973:4;31025:25;31010:40;;;:11;:40;;;;:105;;;;31082:33;31067:48;;;:11;:48;;;;31010:105;:158;;;;31132:36;31156:11;31132:23;:36::i;:::-;31010:158;30990:178;;30871:305;;;:::o;69714:215::-;69876:45;69903:4;69909:2;69913:7;69876:26;:45::i;:::-;69714:215;;;:::o;38090:321::-;38220:18;38226:2;38230:7;38220:5;:18::i;:::-;38271:54;38302:1;38306:2;38310:7;38319:5;38271:22;:54::i;:::-;38249:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38090:321;;;:::o;41490:799::-;41645:4;41666:15;:2;:13;;;:15::i;:::-;41662:620;;;41718:2;41702:36;;;41739:12;:10;:12::i;:::-;41753:4;41759:7;41768:5;41702:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41698:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41961:1;41944:6;:13;:18;41940:272;;;41987:60;;;;;;;;;;:::i;:::-;;;;;;;;41940:272;42162:6;42156:13;42147:6;42143:2;42139:15;42132:38;41698:529;41835:41;;;41825:51;;;:6;:51;;;;41818:58;;;;;41662:620;42266:4;42259:11;;41490:799;;;;;;;:::o;22850:157::-;22935:4;22974:25;22959:40;;;:11;:40;;;;22952:47;;22850:157;;;:::o;45600:589::-;45744:45;45771:4;45777:2;45781:7;45744:26;:45::i;:::-;45822:1;45806:18;;:4;:18;;;45802:187;;;45841:40;45873:7;45841:31;:40::i;:::-;45802:187;;;45911:2;45903:10;;:4;:10;;;45899:90;;45930:47;45963:4;45969:7;45930:32;:47::i;:::-;45899:90;45802:187;46017:1;46003:16;;:2;:16;;;45999:183;;;46036:45;46073:7;46036:36;:45::i;:::-;45999:183;;;46109:4;46103:10;;:2;:10;;;46099:83;;46130:40;46158:2;46162:7;46130:27;:40::i;:::-;46099:83;45999:183;45600:589;;;:::o;38747:382::-;38841:1;38827:16;;:2;:16;;;;38819:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38900:16;38908:7;38900;:16::i;:::-;38899:17;38891:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;38962:45;38991:1;38995:2;38999:7;38962:20;:45::i;:::-;39037:1;39020:9;:13;39030:2;39020:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39068:2;39049:7;:16;39057:7;39049:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39113:7;39109:2;39088:33;;39105:1;39088:33;;;;;;;;;;;;38747:382;;:::o;12910:387::-;12970:4;13178:12;13245:7;13233:20;13225:28;;13288:1;13281:4;:8;13274:15;;;12910:387;;;:::o;42861:126::-;;;;:::o;46912:164::-;47016:10;:17;;;;46989:15;:24;47005:7;46989:24;;;;;;;;;;;:44;;;;47044:10;47060:7;47044:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46912:164;:::o;47703:988::-;47969:22;48019:1;47994:22;48011:4;47994:16;:22::i;:::-;:26;;;;:::i;:::-;47969:51;;48031:18;48052:17;:26;48070:7;48052:26;;;;;;;;;;;;48031:47;;48199:14;48185:10;:28;48181:328;;48230:19;48252:12;:18;48265:4;48252:18;;;;;;;;;;;;;;;:34;48271:14;48252:34;;;;;;;;;;;;48230:56;;48336:11;48303:12;:18;48316:4;48303:18;;;;;;;;;;;;;;;:30;48322:10;48303:30;;;;;;;;;;;:44;;;;48453:10;48420:17;:30;48438:11;48420:30;;;;;;;;;;;:43;;;;48215:294;48181:328;48605:17;:26;48623:7;48605:26;;;;;;;;;;;48598:33;;;48649:12;:18;48662:4;48649:18;;;;;;;;;;;;;;;:34;48668:14;48649:34;;;;;;;;;;;48642:41;;;47784:907;;47703:988;;:::o;48986:1079::-;49239:22;49284:1;49264:10;:17;;;;:21;;;;:::i;:::-;49239:46;;49296:18;49317:15;:24;49333:7;49317:24;;;;;;;;;;;;49296:45;;49668:19;49690:10;49701:14;49690:26;;;;;;;;:::i;:::-;;;;;;;;;;49668:48;;49754:11;49729:10;49740;49729:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;49865:10;49834:15;:28;49850:11;49834:28;;;;;;;;;;;:41;;;;50006:15;:24;50022:7;50006:24;;;;;;;;;;;49999:31;;;50041:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49057:1008;;;48986:1079;:::o;46490:221::-;46575:14;46592:20;46609:2;46592:16;:20::i;:::-;46575:37;;46650:7;46623:12;:16;46636:2;46623:16;;;;;;;;;;;;;;;:24;46640:6;46623:24;;;;;;;;;;;:34;;;;46697:6;46668:17;:26;46686:7;46668:26;;;;;;;;;;;:35;;;;46564:147;46490:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:327::-;5678:6;5727:2;5715:9;5706:7;5702:23;5698:32;5695:119;;;5733:79;;:::i;:::-;5695:119;5853:1;5878:52;5922:7;5913:6;5902:9;5898:22;5878:52;:::i;:::-;5868:62;;5824:116;5620:327;;;;:::o;5953:349::-;6022:6;6071:2;6059:9;6050:7;6046:23;6042:32;6039:119;;;6077:79;;:::i;:::-;6039:119;6197:1;6222:63;6277:7;6268:6;6257:9;6253:22;6222:63;:::i;:::-;6212:73;;6168:127;5953:349;;;;:::o;6308:509::-;6377:6;6426:2;6414:9;6405:7;6401:23;6397:32;6394:119;;;6432:79;;:::i;:::-;6394:119;6580:1;6569:9;6565:17;6552:31;6610:18;6602:6;6599:30;6596:117;;;6632:79;;:::i;:::-;6596:117;6737:63;6792:7;6783:6;6772:9;6768:22;6737:63;:::i;:::-;6727:73;;6523:287;6308:509;;;;:::o;6823:329::-;6882:6;6931:2;6919:9;6910:7;6906:23;6902:32;6899:119;;;6937:79;;:::i;:::-;6899:119;7057:1;7082:53;7127:7;7118:6;7107:9;7103:22;7082:53;:::i;:::-;7072:63;;7028:117;6823:329;;;;:::o;7158:474::-;7226:6;7234;7283:2;7271:9;7262:7;7258:23;7254:32;7251:119;;;7289:79;;:::i;:::-;7251:119;7409:1;7434:53;7479:7;7470:6;7459:9;7455:22;7434:53;:::i;:::-;7424:63;;7380:117;7536:2;7562:53;7607:7;7598:6;7587:9;7583:22;7562:53;:::i;:::-;7552:63;;7507:118;7158:474;;;;;:::o;7638:179::-;7707:10;7728:46;7770:3;7762:6;7728:46;:::i;:::-;7806:4;7801:3;7797:14;7783:28;;7638:179;;;;:::o;7823:118::-;7910:24;7928:5;7910:24;:::i;:::-;7905:3;7898:37;7823:118;;:::o;7977:732::-;8096:3;8125:54;8173:5;8125:54;:::i;:::-;8195:86;8274:6;8269:3;8195:86;:::i;:::-;8188:93;;8305:56;8355:5;8305:56;:::i;:::-;8384:7;8415:1;8400:284;8425:6;8422:1;8419:13;8400:284;;;8501:6;8495:13;8528:63;8587:3;8572:13;8528:63;:::i;:::-;8521:70;;8614:60;8667:6;8614:60;:::i;:::-;8604:70;;8460:224;8447:1;8444;8440:9;8435:14;;8400:284;;;8404:14;8700:3;8693:10;;8101:608;;;7977:732;;;;:::o;8715:109::-;8796:21;8811:5;8796:21;:::i;:::-;8791:3;8784:34;8715:109;;:::o;8830:360::-;8916:3;8944:38;8976:5;8944:38;:::i;:::-;8998:70;9061:6;9056:3;8998:70;:::i;:::-;8991:77;;9077:52;9122:6;9117:3;9110:4;9103:5;9099:16;9077:52;:::i;:::-;9154:29;9176:6;9154:29;:::i;:::-;9149:3;9145:39;9138:46;;8920:270;8830:360;;;;:::o;9196:364::-;9284:3;9312:39;9345:5;9312:39;:::i;:::-;9367:71;9431:6;9426:3;9367:71;:::i;:::-;9360:78;;9447:52;9492:6;9487:3;9480:4;9473:5;9469:16;9447:52;:::i;:::-;9524:29;9546:6;9524:29;:::i;:::-;9519:3;9515:39;9508:46;;9288:272;9196:364;;;;:::o;9566:377::-;9672:3;9700:39;9733:5;9700:39;:::i;:::-;9755:89;9837:6;9832:3;9755:89;:::i;:::-;9748:96;;9853:52;9898:6;9893:3;9886:4;9879:5;9875:16;9853:52;:::i;:::-;9930:6;9925:3;9921:16;9914:23;;9676:267;9566:377;;;;:::o;9949:366::-;10091:3;10112:67;10176:2;10171:3;10112:67;:::i;:::-;10105:74;;10188:93;10277:3;10188:93;:::i;:::-;10306:2;10301:3;10297:12;10290:19;;9949:366;;;:::o;10321:::-;10463:3;10484:67;10548:2;10543:3;10484:67;:::i;:::-;10477:74;;10560:93;10649:3;10560:93;:::i;:::-;10678:2;10673:3;10669:12;10662:19;;10321:366;;;:::o;10693:::-;10835:3;10856:67;10920:2;10915:3;10856:67;:::i;:::-;10849:74;;10932:93;11021:3;10932:93;:::i;:::-;11050:2;11045:3;11041:12;11034:19;;10693:366;;;:::o;11065:::-;11207:3;11228:67;11292:2;11287:3;11228:67;:::i;:::-;11221:74;;11304:93;11393:3;11304:93;:::i;:::-;11422:2;11417:3;11413:12;11406:19;;11065:366;;;:::o;11437:::-;11579:3;11600:67;11664:2;11659:3;11600:67;:::i;:::-;11593:74;;11676:93;11765:3;11676:93;:::i;:::-;11794:2;11789:3;11785:12;11778:19;;11437:366;;;:::o;11809:::-;11951:3;11972:67;12036:2;12031:3;11972:67;:::i;:::-;11965:74;;12048:93;12137:3;12048:93;:::i;:::-;12166:2;12161:3;12157:12;12150:19;;11809:366;;;:::o;12181:::-;12323:3;12344:67;12408:2;12403:3;12344:67;:::i;:::-;12337:74;;12420:93;12509:3;12420:93;:::i;:::-;12538:2;12533:3;12529:12;12522:19;;12181:366;;;:::o;12553:::-;12695:3;12716:67;12780:2;12775:3;12716:67;:::i;:::-;12709:74;;12792:93;12881:3;12792:93;:::i;:::-;12910:2;12905:3;12901:12;12894:19;;12553:366;;;:::o;12925:::-;13067:3;13088:67;13152:2;13147:3;13088:67;:::i;:::-;13081:74;;13164:93;13253:3;13164:93;:::i;:::-;13282:2;13277:3;13273:12;13266:19;;12925:366;;;:::o;13297:::-;13439:3;13460:67;13524:2;13519:3;13460:67;:::i;:::-;13453:74;;13536:93;13625:3;13536:93;:::i;:::-;13654:2;13649:3;13645:12;13638:19;;13297:366;;;:::o;13669:::-;13811:3;13832:67;13896:2;13891:3;13832:67;:::i;:::-;13825:74;;13908:93;13997:3;13908:93;:::i;:::-;14026:2;14021:3;14017:12;14010:19;;13669:366;;;:::o;14041:::-;14183:3;14204:67;14268:2;14263:3;14204:67;:::i;:::-;14197:74;;14280:93;14369:3;14280:93;:::i;:::-;14398:2;14393:3;14389:12;14382:19;;14041:366;;;:::o;14413:::-;14555:3;14576:67;14640:2;14635:3;14576:67;:::i;:::-;14569:74;;14652:93;14741:3;14652:93;:::i;:::-;14770:2;14765:3;14761:12;14754:19;;14413:366;;;:::o;14785:::-;14927:3;14948:67;15012:2;15007:3;14948:67;:::i;:::-;14941:74;;15024:93;15113:3;15024:93;:::i;:::-;15142:2;15137:3;15133:12;15126:19;;14785:366;;;:::o;15157:::-;15299:3;15320:67;15384:2;15379:3;15320:67;:::i;:::-;15313:74;;15396:93;15485:3;15396:93;:::i;:::-;15514:2;15509:3;15505:12;15498:19;;15157:366;;;:::o;15529:::-;15671:3;15692:67;15756:2;15751:3;15692:67;:::i;:::-;15685:74;;15768:93;15857:3;15768:93;:::i;:::-;15886:2;15881:3;15877:12;15870:19;;15529:366;;;:::o;15901:::-;16043:3;16064:67;16128:2;16123:3;16064:67;:::i;:::-;16057:74;;16140:93;16229:3;16140:93;:::i;:::-;16258:2;16253:3;16249:12;16242:19;;15901:366;;;:::o;16273:::-;16415:3;16436:67;16500:2;16495:3;16436:67;:::i;:::-;16429:74;;16512:93;16601:3;16512:93;:::i;:::-;16630:2;16625:3;16621:12;16614:19;;16273:366;;;:::o;16645:::-;16787:3;16808:67;16872:2;16867:3;16808:67;:::i;:::-;16801:74;;16884:93;16973:3;16884:93;:::i;:::-;17002:2;16997:3;16993:12;16986:19;;16645:366;;;:::o;17017:::-;17159:3;17180:67;17244:2;17239:3;17180:67;:::i;:::-;17173:74;;17256:93;17345:3;17256:93;:::i;:::-;17374:2;17369:3;17365:12;17358:19;;17017:366;;;:::o;17389:::-;17531:3;17552:67;17616:2;17611:3;17552:67;:::i;:::-;17545:74;;17628:93;17717:3;17628:93;:::i;:::-;17746:2;17741:3;17737:12;17730:19;;17389:366;;;:::o;17761:::-;17903:3;17924:67;17988:2;17983:3;17924:67;:::i;:::-;17917:74;;18000:93;18089:3;18000:93;:::i;:::-;18118:2;18113:3;18109:12;18102:19;;17761:366;;;:::o;18133:::-;18275:3;18296:67;18360:2;18355:3;18296:67;:::i;:::-;18289:74;;18372:93;18461:3;18372:93;:::i;:::-;18490:2;18485:3;18481:12;18474:19;;18133:366;;;:::o;18505:108::-;18582:24;18600:5;18582:24;:::i;:::-;18577:3;18570:37;18505:108;;:::o;18619:118::-;18706:24;18724:5;18706:24;:::i;:::-;18701:3;18694:37;18619:118;;:::o;18743:115::-;18828:23;18845:5;18828:23;:::i;:::-;18823:3;18816:36;18743:115;;:::o;18864:435::-;19044:3;19066:95;19157:3;19148:6;19066:95;:::i;:::-;19059:102;;19178:95;19269:3;19260:6;19178:95;:::i;:::-;19171:102;;19290:3;19283:10;;18864:435;;;;;:::o;19305:222::-;19398:4;19436:2;19425:9;19421:18;19413:26;;19449:71;19517:1;19506:9;19502:17;19493:6;19449:71;:::i;:::-;19305:222;;;;:::o;19533:640::-;19728:4;19766:3;19755:9;19751:19;19743:27;;19780:71;19848:1;19837:9;19833:17;19824:6;19780:71;:::i;:::-;19861:72;19929:2;19918:9;19914:18;19905:6;19861:72;:::i;:::-;19943;20011:2;20000:9;19996:18;19987:6;19943:72;:::i;:::-;20062:9;20056:4;20052:20;20047:2;20036:9;20032:18;20025:48;20090:76;20161:4;20152:6;20090:76;:::i;:::-;20082:84;;19533:640;;;;;;;:::o;20179:442::-;20328:4;20366:2;20355:9;20351:18;20343:26;;20379:71;20447:1;20436:9;20432:17;20423:6;20379:71;:::i;:::-;20460:72;20528:2;20517:9;20513:18;20504:6;20460:72;:::i;:::-;20542;20610:2;20599:9;20595:18;20586:6;20542:72;:::i;:::-;20179:442;;;;;;:::o;20627:373::-;20770:4;20808:2;20797:9;20793:18;20785:26;;20857:9;20851:4;20847:20;20843:1;20832:9;20828:17;20821:47;20885:108;20988:4;20979:6;20885:108;:::i;:::-;20877:116;;20627:373;;;;:::o;21006:210::-;21093:4;21131:2;21120:9;21116:18;21108:26;;21144:65;21206:1;21195:9;21191:17;21182:6;21144:65;:::i;:::-;21006:210;;;;:::o;21222:313::-;21335:4;21373:2;21362:9;21358:18;21350:26;;21422:9;21416:4;21412:20;21408:1;21397:9;21393:17;21386:47;21450:78;21523:4;21514:6;21450:78;:::i;:::-;21442:86;;21222:313;;;;:::o;21541:419::-;21707:4;21745:2;21734:9;21730:18;21722:26;;21794:9;21788:4;21784:20;21780:1;21769:9;21765:17;21758:47;21822:131;21948:4;21822:131;:::i;:::-;21814:139;;21541:419;;;:::o;21966:::-;22132:4;22170:2;22159:9;22155:18;22147:26;;22219:9;22213:4;22209:20;22205:1;22194:9;22190:17;22183:47;22247:131;22373:4;22247:131;:::i;:::-;22239:139;;21966:419;;;:::o;22391:::-;22557:4;22595:2;22584:9;22580:18;22572:26;;22644:9;22638:4;22634:20;22630:1;22619:9;22615:17;22608:47;22672:131;22798:4;22672:131;:::i;:::-;22664:139;;22391:419;;;:::o;22816:::-;22982:4;23020:2;23009:9;23005:18;22997:26;;23069:9;23063:4;23059:20;23055:1;23044:9;23040:17;23033:47;23097:131;23223:4;23097:131;:::i;:::-;23089:139;;22816:419;;;:::o;23241:::-;23407:4;23445:2;23434:9;23430:18;23422:26;;23494:9;23488:4;23484:20;23480:1;23469:9;23465:17;23458:47;23522:131;23648:4;23522:131;:::i;:::-;23514:139;;23241:419;;;:::o;23666:::-;23832:4;23870:2;23859:9;23855:18;23847:26;;23919:9;23913:4;23909:20;23905:1;23894:9;23890:17;23883:47;23947:131;24073:4;23947:131;:::i;:::-;23939:139;;23666:419;;;:::o;24091:::-;24257:4;24295:2;24284:9;24280:18;24272:26;;24344:9;24338:4;24334:20;24330:1;24319:9;24315:17;24308:47;24372:131;24498:4;24372:131;:::i;:::-;24364:139;;24091:419;;;:::o;24516:::-;24682:4;24720:2;24709:9;24705:18;24697:26;;24769:9;24763:4;24759:20;24755:1;24744:9;24740:17;24733:47;24797:131;24923:4;24797:131;:::i;:::-;24789:139;;24516:419;;;:::o;24941:::-;25107:4;25145:2;25134:9;25130:18;25122:26;;25194:9;25188:4;25184:20;25180:1;25169:9;25165:17;25158:47;25222:131;25348:4;25222:131;:::i;:::-;25214:139;;24941:419;;;:::o;25366:::-;25532:4;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25366:419;;;:::o;25791:::-;25957:4;25995:2;25984:9;25980:18;25972:26;;26044:9;26038:4;26034:20;26030:1;26019:9;26015:17;26008:47;26072:131;26198:4;26072:131;:::i;:::-;26064:139;;25791:419;;;:::o;26216:::-;26382:4;26420:2;26409:9;26405:18;26397:26;;26469:9;26463:4;26459:20;26455:1;26444:9;26440:17;26433:47;26497:131;26623:4;26497:131;:::i;:::-;26489:139;;26216:419;;;:::o;26641:::-;26807:4;26845:2;26834:9;26830:18;26822:26;;26894:9;26888:4;26884:20;26880:1;26869:9;26865:17;26858:47;26922:131;27048:4;26922:131;:::i;:::-;26914:139;;26641:419;;;:::o;27066:::-;27232:4;27270:2;27259:9;27255:18;27247:26;;27319:9;27313:4;27309:20;27305:1;27294:9;27290:17;27283:47;27347:131;27473:4;27347:131;:::i;:::-;27339:139;;27066:419;;;:::o;27491:::-;27657:4;27695:2;27684:9;27680:18;27672:26;;27744:9;27738:4;27734:20;27730:1;27719:9;27715:17;27708:47;27772:131;27898:4;27772:131;:::i;:::-;27764:139;;27491:419;;;:::o;27916:::-;28082:4;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;27916:419;;;:::o;28341:::-;28507:4;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28341:419;;;:::o;28766:::-;28932:4;28970:2;28959:9;28955:18;28947:26;;29019:9;29013:4;29009:20;29005:1;28994:9;28990:17;28983:47;29047:131;29173:4;29047:131;:::i;:::-;29039:139;;28766:419;;;:::o;29191:::-;29357:4;29395:2;29384:9;29380:18;29372:26;;29444:9;29438:4;29434:20;29430:1;29419:9;29415:17;29408:47;29472:131;29598:4;29472:131;:::i;:::-;29464:139;;29191:419;;;:::o;29616:::-;29782:4;29820:2;29809:9;29805:18;29797:26;;29869:9;29863:4;29859:20;29855:1;29844:9;29840:17;29833:47;29897:131;30023:4;29897:131;:::i;:::-;29889:139;;29616:419;;;:::o;30041:::-;30207:4;30245:2;30234:9;30230:18;30222:26;;30294:9;30288:4;30284:20;30280:1;30269:9;30265:17;30258:47;30322:131;30448:4;30322:131;:::i;:::-;30314:139;;30041:419;;;:::o;30466:::-;30632:4;30670:2;30659:9;30655:18;30647:26;;30719:9;30713:4;30709:20;30705:1;30694:9;30690:17;30683:47;30747:131;30873:4;30747:131;:::i;:::-;30739:139;;30466:419;;;:::o;30891:::-;31057:4;31095:2;31084:9;31080:18;31072:26;;31144:9;31138:4;31134:20;31130:1;31119:9;31115:17;31108:47;31172:131;31298:4;31172:131;:::i;:::-;31164:139;;30891:419;;;:::o;31316:222::-;31409:4;31447:2;31436:9;31432:18;31424:26;;31460:71;31528:1;31517:9;31513:17;31504:6;31460:71;:::i;:::-;31316:222;;;;:::o;31544:218::-;31635:4;31673:2;31662:9;31658:18;31650:26;;31686:69;31752:1;31741:9;31737:17;31728:6;31686:69;:::i;:::-;31544:218;;;;:::o;31768:129::-;31802:6;31829:20;;:::i;:::-;31819:30;;31858:33;31886:4;31878:6;31858:33;:::i;:::-;31768:129;;;:::o;31903:75::-;31936:6;31969:2;31963:9;31953:19;;31903:75;:::o;31984:307::-;32045:4;32135:18;32127:6;32124:30;32121:56;;;32157:18;;:::i;:::-;32121:56;32195:29;32217:6;32195:29;:::i;:::-;32187:37;;32279:4;32273;32269:15;32261:23;;31984:307;;;:::o;32297:308::-;32359:4;32449:18;32441:6;32438:30;32435:56;;;32471:18;;:::i;:::-;32435:56;32509:29;32531:6;32509:29;:::i;:::-;32501:37;;32593:4;32587;32583:15;32575:23;;32297:308;;;:::o;32611:132::-;32678:4;32701:3;32693:11;;32731:4;32726:3;32722:14;32714:22;;32611:132;;;:::o;32749:114::-;32816:6;32850:5;32844:12;32834:22;;32749:114;;;:::o;32869:98::-;32920:6;32954:5;32948:12;32938:22;;32869:98;;;:::o;32973:99::-;33025:6;33059:5;33053:12;33043:22;;32973:99;;;:::o;33078:113::-;33148:4;33180;33175:3;33171:14;33163:22;;33078:113;;;:::o;33197:184::-;33296:11;33330:6;33325:3;33318:19;33370:4;33365:3;33361:14;33346:29;;33197:184;;;;:::o;33387:168::-;33470:11;33504:6;33499:3;33492:19;33544:4;33539:3;33535:14;33520:29;;33387:168;;;;:::o;33561:169::-;33645:11;33679:6;33674:3;33667:19;33719:4;33714:3;33710:14;33695:29;;33561:169;;;;:::o;33736:148::-;33838:11;33875:3;33860:18;;33736:148;;;;:::o;33890:305::-;33930:3;33949:20;33967:1;33949:20;:::i;:::-;33944:25;;33983:20;34001:1;33983:20;:::i;:::-;33978:25;;34137:1;34069:66;34065:74;34062:1;34059:81;34056:107;;;34143:18;;:::i;:::-;34056:107;34187:1;34184;34180:9;34173:16;;33890:305;;;;:::o;34201:185::-;34241:1;34258:20;34276:1;34258:20;:::i;:::-;34253:25;;34292:20;34310:1;34292:20;:::i;:::-;34287:25;;34331:1;34321:35;;34336:18;;:::i;:::-;34321:35;34378:1;34375;34371:9;34366:14;;34201:185;;;;:::o;34392:348::-;34432:7;34455:20;34473:1;34455:20;:::i;:::-;34450:25;;34489:20;34507:1;34489:20;:::i;:::-;34484:25;;34677:1;34609:66;34605:74;34602:1;34599:81;34594:1;34587:9;34580:17;34576:105;34573:131;;;34684:18;;:::i;:::-;34573:131;34732:1;34729;34725:9;34714:20;;34392:348;;;;:::o;34746:191::-;34786:4;34806:20;34824:1;34806:20;:::i;:::-;34801:25;;34840:20;34858:1;34840:20;:::i;:::-;34835:25;;34879:1;34876;34873:8;34870:34;;;34884:18;;:::i;:::-;34870:34;34929:1;34926;34922:9;34914:17;;34746:191;;;;:::o;34943:96::-;34980:7;35009:24;35027:5;35009:24;:::i;:::-;34998:35;;34943:96;;;:::o;35045:90::-;35079:7;35122:5;35115:13;35108:21;35097:32;;35045:90;;;:::o;35141:149::-;35177:7;35217:66;35210:5;35206:78;35195:89;;35141:149;;;:::o;35296:126::-;35333:7;35373:42;35366:5;35362:54;35351:65;;35296:126;;;:::o;35428:77::-;35465:7;35494:5;35483:16;;35428:77;;;:::o;35511:101::-;35547:7;35587:18;35580:5;35576:30;35565:41;;35511:101;;;:::o;35618:154::-;35702:6;35697:3;35692;35679:30;35764:1;35755:6;35750:3;35746:16;35739:27;35618:154;;;:::o;35778:307::-;35846:1;35856:113;35870:6;35867:1;35864:13;35856:113;;;35955:1;35950:3;35946:11;35940:18;35936:1;35931:3;35927:11;35920:39;35892:2;35889:1;35885:10;35880:15;;35856:113;;;35987:6;35984:1;35981:13;35978:101;;;36067:1;36058:6;36053:3;36049:16;36042:27;35978:101;35827:258;35778:307;;;:::o;36091:320::-;36135:6;36172:1;36166:4;36162:12;36152:22;;36219:1;36213:4;36209:12;36240:18;36230:81;;36296:4;36288:6;36284:17;36274:27;;36230:81;36358:2;36350:6;36347:14;36327:18;36324:38;36321:84;;;36377:18;;:::i;:::-;36321:84;36142:269;36091:320;;;:::o;36417:281::-;36500:27;36522:4;36500:27;:::i;:::-;36492:6;36488:40;36630:6;36618:10;36615:22;36594:18;36582:10;36579:34;36576:62;36573:88;;;36641:18;;:::i;:::-;36573:88;36681:10;36677:2;36670:22;36460:238;36417:281;;:::o;36704:233::-;36743:3;36766:24;36784:5;36766:24;:::i;:::-;36757:33;;36812:66;36805:5;36802:77;36799:103;;;36882:18;;:::i;:::-;36799:103;36929:1;36922:5;36918:13;36911:20;;36704:233;;;:::o;36943:176::-;36975:1;36992:20;37010:1;36992:20;:::i;:::-;36987:25;;37026:20;37044:1;37026:20;:::i;:::-;37021:25;;37065:1;37055:35;;37070:18;;:::i;:::-;37055:35;37111:1;37108;37104:9;37099:14;;36943:176;;;;:::o;37125:180::-;37173:77;37170:1;37163:88;37270:4;37267:1;37260:15;37294:4;37291:1;37284:15;37311:180;37359:77;37356:1;37349:88;37456:4;37453:1;37446:15;37480:4;37477:1;37470:15;37497:180;37545:77;37542:1;37535:88;37642:4;37639:1;37632:15;37666:4;37663:1;37656:15;37683:180;37731:77;37728:1;37721:88;37828:4;37825:1;37818:15;37852:4;37849:1;37842:15;37869:180;37917:77;37914:1;37907:88;38014:4;38011:1;38004:15;38038:4;38035:1;38028:15;38055:180;38103:77;38100:1;38093:88;38200:4;38197:1;38190:15;38224:4;38221:1;38214:15;38241:117;38350:1;38347;38340:12;38364:117;38473:1;38470;38463:12;38487:117;38596:1;38593;38586:12;38610:117;38719:1;38716;38709:12;38733:102;38774:6;38825:2;38821:7;38816:2;38809:5;38805:14;38801:28;38791:38;;38733:102;;;:::o;38841:230::-;38981:34;38977:1;38969:6;38965:14;38958:58;39050:13;39045:2;39037:6;39033:15;39026:38;38841:230;:::o;39077:237::-;39217:34;39213:1;39205:6;39201:14;39194:58;39286:20;39281:2;39273:6;39269:15;39262:45;39077:237;:::o;39320:225::-;39460:34;39456:1;39448:6;39444:14;39437:58;39529:8;39524:2;39516:6;39512:15;39505:33;39320:225;:::o;39551:178::-;39691:30;39687:1;39679:6;39675:14;39668:54;39551:178;:::o;39735:223::-;39875:34;39871:1;39863:6;39859:14;39852:58;39944:6;39939:2;39931:6;39927:15;39920:31;39735:223;:::o;39964:175::-;40104:27;40100:1;40092:6;40088:14;40081:51;39964:175;:::o;40145:::-;40285:27;40281:1;40273:6;40269:14;40262:51;40145:175;:::o;40326:231::-;40466:34;40462:1;40454:6;40450:14;40443:58;40535:14;40530:2;40522:6;40518:15;40511:39;40326:231;:::o;40563:243::-;40703:34;40699:1;40691:6;40687:14;40680:58;40772:26;40767:2;40759:6;40755:15;40748:51;40563:243;:::o;40812:229::-;40952:34;40948:1;40940:6;40936:14;40929:58;41021:12;41016:2;41008:6;41004:15;40997:37;40812:229;:::o;41047:228::-;41187:34;41183:1;41175:6;41171:14;41164:58;41256:11;41251:2;41243:6;41239:15;41232:36;41047:228;:::o;41281:182::-;41421:34;41417:1;41409:6;41405:14;41398:58;41281:182;:::o;41469:231::-;41609:34;41605:1;41597:6;41593:14;41586:58;41678:14;41673:2;41665:6;41661:15;41654:39;41469:231;:::o;41706:182::-;41846:34;41842:1;41834:6;41830:14;41823:58;41706:182;:::o;41894:173::-;42034:25;42030:1;42022:6;42018:14;42011:49;41894:173;:::o;42073:228::-;42213:34;42209:1;42201:6;42197:14;42190:58;42282:11;42277:2;42269:6;42265:15;42258:36;42073:228;:::o;42307:241::-;42447:34;42443:1;42435:6;42431:14;42424:58;42516:24;42511:2;42503:6;42499:15;42492:49;42307:241;:::o;42554:234::-;42694:34;42690:1;42682:6;42678:14;42671:58;42763:17;42758:2;42750:6;42746:15;42739:42;42554:234;:::o;42794:230::-;42934:34;42930:1;42922:6;42918:14;42911:58;43003:13;42998:2;42990:6;42986:15;42979:38;42794:230;:::o;43030:220::-;43170:34;43166:1;43158:6;43154:14;43147:58;43239:3;43234:2;43226:6;43222:15;43215:28;43030:220;:::o;43256:222::-;43396:34;43392:1;43384:6;43380:14;43373:58;43465:5;43460:2;43452:6;43448:15;43441:30;43256:222;:::o;43484:236::-;43624:34;43620:1;43612:6;43608:14;43601:58;43693:19;43688:2;43680:6;43676:15;43669:44;43484:236;:::o;43726:231::-;43866:34;43862:1;43854:6;43850:14;43843:58;43935:14;43930:2;43922:6;43918:15;43911:39;43726:231;:::o;43963:122::-;44036:24;44054:5;44036:24;:::i;:::-;44029:5;44026:35;44016:63;;44075:1;44072;44065:12;44016:63;43963:122;:::o;44091:116::-;44161:21;44176:5;44161:21;:::i;:::-;44154:5;44151:32;44141:60;;44197:1;44194;44187:12;44141:60;44091:116;:::o;44213:120::-;44285:23;44302:5;44285:23;:::i;:::-;44278:5;44275:34;44265:62;;44323:1;44320;44313:12;44265:62;44213:120;:::o;44339:122::-;44412:24;44430:5;44412:24;:::i;:::-;44405:5;44402:35;44392:63;;44451:1;44448;44441:12;44392:63;44339:122;:::o

Swarm Source

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