ETH Price: $3,408.18 (-1.59%)
Gas: 8 Gwei

Token

Lucid Paths (LP)
 

Overview

Max Total Supply

1,000 LP

Holders

574

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 LP
0x6eeb849e8b3de5c88c35b37058d18547d9efd6ab
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

An collection of 1000 high quality generated NFTs. Each NFT is a representation of own journey that is found through following our intuition and curiosity. Lucid Paths is creative generative artwork that celebrates color, sound, and inspires creation.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LucidPaths

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED
// File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol


// OpenZeppelin Contracts v4.4.1 (utils/cryptography/MerkleProof.sol)

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
            }
        }
        return computedHash;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.1 (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 {
        _setApprovalForAll(_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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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


// OpenZeppelin Contracts v4.4.1 (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/lucidpaths.sol


pragma solidity >=0.7.0 <0.9.0;




contract LucidPaths is ERC721Enumerable, Ownable {
  using Strings for uint256;

  string public baseURI;
  string public baseExtension = ".json";
  uint256 public cost = .045 ether;
  uint256 public maxSupply = 1000;
  uint256 public maxMintAmount = 1;
  uint256 public nftPerAddressLimit = 1;
  bool public paused = false;
  bool public onlyWhitelisted = true;
  bytes32 private merkleRoot;
  mapping(address => uint256) private whiteListClaimed;

  constructor(
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    bytes32 _merkleRoot
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setMerkleRoot(_merkleRoot);
    uint256 supply = totalSupply();
    for (uint256 i = 1; i <= 14; i++) {
      _safeMint(msg.sender, supply + i);
    }
  }

  function setMerkleRoot(bytes32 root) public onlyOwner {
    merkleRoot = root;
  }
  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

  function mint(uint256 _mintAmount, bytes32[] memory _merkleProof) public payable {
    require(!paused, "The contract is paused");
    require(_mintAmount > 0, "Must mint at least 1 NFT");
    uint256 supply = totalSupply();
    require(supply + _mintAmount <= maxSupply, "All NFTs have been minted");
    address operator = _msgSender();
    if (operator != owner()) {
        require(_mintAmount <= maxMintAmount, "Cannot mint this many per call");
        if(onlyWhitelisted == true) {
            require(reachedMintingLimit(),"Already minted");
            require( onWhiteList(_merkleProof),'Not white listed');
        }
        require(msg.value >= cost * _mintAmount, "Insufficient funds");
    }
    for (uint256 i = 1; i <= _mintAmount; i++) {
      whiteListClaimed[operator]++;
      _safeMint(msg.sender, supply + i);
    }
  }

  function onWhiteList(bytes32[] memory _merkleProof) private view returns(bool){
    bytes32 leaf = keccak256(abi.encodePacked(_msgSender()));
    return MerkleProof.verify(_merkleProof, merkleRoot, leaf);
  }

  function reachedMintingLimit() private view returns(bool){
    return whiteListClaimed[_msgSender()] < nftPerAddressLimit;
  }

  function canMint(bytes32[] memory _merkleProof) public view returns(bool){
    uint256 supply = totalSupply();
    bool supplyLeft = supply < maxSupply;
    if(onlyWhitelisted == true){
      return reachedMintingLimit() && onWhiteList(_merkleProof) && supplyLeft && !paused;
    }
    return supplyLeft;
  }


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

  function tokenURI(uint256 tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );
    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
  }

  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }

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

  function setMaxMintAmount(uint256 _newMaxMintAmount) public onlyOwner {
    maxMintAmount = _newMaxMintAmount;
  }

  function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
  }

  function setBaseExtension(string memory _newBaseExtension) public onlyOwner {
    baseExtension = _newBaseExtension;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }

  function setOnlyWhitelisted(bool _state) public onlyOwner {
    onlyWhitelisted = _state;
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"_merkleProof","type":"bytes32[]"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600c90805190602001906200005192919062000de4565b50669fdf42f6e48000600d556103e8600e556001600f5560016010556000601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff021916908315150217905550348015620000b057600080fd5b50604051620064d8380380620064d88339818101604052810190620000d691906200106c565b83838160009080519060200190620000f092919062000de4565b5080600190805190602001906200010992919062000de4565b5050506200012c62000120620001b360201b60201c565b620001bb60201b60201c565b6200013d826200028160201b60201c565b6200014e816200032c60201b60201c565b600062000160620003c560201b60201c565b90506000600190505b600e8111620001a7576200019133828462000185919062001174565b620003d260201b60201c565b80806200019e90620011d1565b91505062000169565b5050505050506200174a565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000291620001b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b7620003f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003079062001280565b60405180910390fd5b80600b90805190602001906200032892919062000de4565b5050565b6200033c620001b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000362620003f860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003b29062001280565b60405180910390fd5b8060128190555050565b6000600880549050905090565b620003f48282604051806020016040528060008152506200042260201b60201c565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200043483836200049060201b60201c565b6200044960008484846200067660201b60201c565b6200048b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004829062001318565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000503576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004fa906200138a565b60405180910390fd5b62000514816200083060201b60201c565b1562000557576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054e90620013fc565b60405180910390fd5b6200056b600083836200089c60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005bd919062001174565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620006a48473ffffffffffffffffffffffffffffffffffffffff16620009e360201b62001d921760201c565b1562000823578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006d6620001b360201b60201c565b8786866040518563ffffffff1660e01b8152600401620006fa9493929190620014d1565b602060405180830381600087803b1580156200071557600080fd5b505af19250505080156200074957506040513d601f19601f8201168201806040525081019062000746919062001582565b60015b620007d2573d80600081146200077c576040519150601f19603f3d011682016040523d82523d6000602084013e62000781565b606091505b50600081511415620007ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c19062001318565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000828565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b620008b4838383620009f660201b62001da51760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200090157620008fb81620009fb60201b60201c565b62000949565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620009485762000947838262000a4460201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200099657620009908162000bc160201b60201c565b620009de565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009dd57620009dc828262000c9d60201b60201c565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600162000a5e8462000d2960201b6200130f1760201c565b62000a6a9190620015b4565b905060006007600084815260200190815260200160002054905081811462000b50576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905062000bd79190620015b4565b905060006009600084815260200190815260200160002054905060006008838154811062000c0a5762000c09620015ef565b5b90600052602060002001549050806008838154811062000c2f5762000c2e620015ef565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548062000c815762000c806200161e565b5b6001900381819060005260206000200160009055905550505050565b600062000cb58362000d2960201b6200130f1760201c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000d9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d9490620016c3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000df29062001714565b90600052602060002090601f01602090048101928262000e16576000855562000e62565b82601f1062000e3157805160ff191683800117855562000e62565b8280016001018555821562000e62579182015b8281111562000e6157825182559160200191906001019062000e44565b5b50905062000e71919062000e75565b5090565b5b8082111562000e9057600081600090555060010162000e76565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000efd8262000eb2565b810181811067ffffffffffffffff8211171562000f1f5762000f1e62000ec3565b5b80604052505050565b600062000f3462000e94565b905062000f42828262000ef2565b919050565b600067ffffffffffffffff82111562000f655762000f6462000ec3565b5b62000f708262000eb2565b9050602081019050919050565b60005b8381101562000f9d57808201518184015260208101905062000f80565b8381111562000fad576000848401525b50505050565b600062000fca62000fc48462000f47565b62000f28565b90508281526020810184848401111562000fe95762000fe862000ead565b5b62000ff684828562000f7d565b509392505050565b600082601f83011262001016576200101562000ea8565b5b81516200102884826020860162000fb3565b91505092915050565b6000819050919050565b620010468162001031565b81146200105257600080fd5b50565b60008151905062001066816200103b565b92915050565b6000806000806080858703121562001089576200108862000e9e565b5b600085015167ffffffffffffffff811115620010aa57620010a962000ea3565b5b620010b88782880162000ffe565b945050602085015167ffffffffffffffff811115620010dc57620010db62000ea3565b5b620010ea8782880162000ffe565b935050604085015167ffffffffffffffff8111156200110e576200110d62000ea3565b5b6200111c8782880162000ffe565b92505060606200112f8782880162001055565b91505092959194509250565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062001181826200113b565b91506200118e836200113b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011c657620011c562001145565b5b828201905092915050565b6000620011de826200113b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562001214576200121362001145565b5b600182019050919050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012686020836200121f565b9150620012758262001230565b602082019050919050565b600060208201905081810360008301526200129b8162001259565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000620013006032836200121f565b91506200130d82620012a2565b604082019050919050565b600060208201905081810360008301526200133381620012f1565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000620013726020836200121f565b91506200137f826200133a565b602082019050919050565b60006020820190508181036000830152620013a58162001363565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000620013e4601c836200121f565b9150620013f182620013ac565b602082019050919050565b600060208201905081810360008301526200141781620013d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200144b826200141e565b9050919050565b6200145d816200143e565b82525050565b6200146e816200113b565b82525050565b600081519050919050565b600082825260208201905092915050565b60006200149d8262001474565b620014a981856200147f565b9350620014bb81856020860162000f7d565b620014c68162000eb2565b840191505092915050565b6000608082019050620014e8600083018762001452565b620014f7602083018662001452565b62001506604083018562001463565b81810360608301526200151a818462001490565b905095945050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6200155c8162001525565b81146200156857600080fd5b50565b6000815190506200157c8162001551565b92915050565b6000602082840312156200159b576200159a62000e9e565b5b6000620015ab848285016200156b565b91505092915050565b6000620015c1826200113b565b9150620015ce836200113b565b925082821015620015e457620015e362001145565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000620016ab602a836200121f565b9150620016b8826200164d565b604082019050919050565b60006020820190508181036000830152620016de816200169c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200172d57607f821691505b60208210811415620017445762001743620016e5565b5b50919050565b614d7e806200175a6000396000f3fe6080604052600436106102305760003560e01c80636352211e1161012e578063ba41b0c6116100ab578063d5abeb011161006f578063d5abeb011461081f578063da3ef23f1461084a578063e985e9c514610873578063f2fde38b146108b0578063fd16f686146108d957610230565b8063ba41b0c614610747578063ba7d2c7614610763578063c66828621461078e578063c87b56dd146107b9578063d0eb26b0146107f657610230565b80638da5cb5b116100f25780638da5cb5b1461067457806395d89b411461069f5780639c70b512146106ca578063a22cb465146106f5578063b88d4fde1461071e57610230565b80636352211e1461058f5780636c0360eb146105cc57806370a08231146105f7578063715018a6146106345780637cb647591461064b57610230565b806323b872dd116101bc578063438b630011610180578063438b63001461049857806344a0d68a146104d55780634f6ccce7146104fe57806355f804b31461053b5780635c975abb1461056457610230565b806323b872dd146103d65780632f745c59146103ff5780633c9527641461043c5780633ccfd60b1461046557806342842e0e1461046f57610230565b8063088a4ed011610203578063088a4ed014610303578063095ea7b31461032c57806313faede61461035557806318160ddd14610380578063239c70ae146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061324a565b610916565b6040516102699190613292565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906132d9565b610990565b005b3480156102a757600080fd5b506102b0610a29565b6040516102bd919061339f565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906133f7565b610abb565b6040516102fa9190613465565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906133f7565b610b40565b005b34801561033857600080fd5b50610353600480360381019061034e91906134ac565b610bc6565b005b34801561036157600080fd5b5061036a610cde565b60405161037791906134fb565b60405180910390f35b34801561038c57600080fd5b50610395610ce4565b6040516103a291906134fb565b60405180910390f35b3480156103b757600080fd5b506103c0610cf1565b6040516103cd91906134fb565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613516565b610cf7565b005b34801561040b57600080fd5b50610426600480360381019061042191906134ac565b610d57565b60405161043391906134fb565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906132d9565b610dfc565b005b61046d610e95565b005b34801561047b57600080fd5b5061049660048036038101906104919190613516565b610f61565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613569565b610f81565b6040516104cc9190613654565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906133f7565b61102f565b005b34801561050a57600080fd5b50610525600480360381019061052091906133f7565b6110b5565b60405161053291906134fb565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906137ab565b611126565b005b34801561057057600080fd5b506105796111bc565b6040516105869190613292565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b191906133f7565b6111cf565b6040516105c39190613465565b60405180910390f35b3480156105d857600080fd5b506105e1611281565b6040516105ee919061339f565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613569565b61130f565b60405161062b91906134fb565b60405180910390f35b34801561064057600080fd5b506106496113c7565b005b34801561065757600080fd5b50610672600480360381019061066d919061382a565b61144f565b005b34801561068057600080fd5b506106896114d5565b6040516106969190613465565b60405180910390f35b3480156106ab57600080fd5b506106b46114ff565b6040516106c1919061339f565b60405180910390f35b3480156106d657600080fd5b506106df611591565b6040516106ec9190613292565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190613857565b6115a4565b005b34801561072a57600080fd5b5061074560048036038101906107409190613938565b6115ba565b005b610761600480360381019061075c9190613a83565b61161c565b005b34801561076f57600080fd5b50610778611925565b60405161078591906134fb565b60405180910390f35b34801561079a57600080fd5b506107a361192b565b6040516107b0919061339f565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906133f7565b6119b9565b6040516107ed919061339f565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906133f7565b611a63565b005b34801561082b57600080fd5b50610834611ae9565b60405161084191906134fb565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906137ab565b611aef565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613adf565b611b85565b6040516108a79190613292565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613569565b611c19565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613b1f565b611d11565b60405161090d9190613292565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610989575061098882611daa565b5b9050919050565b610998611e8c565b73ffffffffffffffffffffffffffffffffffffffff166109b66114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0390613bb4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a3890613c03565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490613c03565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b5050505050905090565b6000610ac682611e94565b610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613ca7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b48611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610b666114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613bb4565b60405180910390fd5b80600f8190555050565b6000610bd1826111cf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613d39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c61611e8c565b73ffffffffffffffffffffffffffffffffffffffff161480610c905750610c8f81610c8a611e8c565b611b85565b5b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613dcb565b60405180910390fd5b610cd98383611f00565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d08610d02611e8c565b82611fb9565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613e5d565b60405180910390fd5b610d52838383612097565b505050565b6000610d628361130f565b8210610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613eef565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e04611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610e226114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613bb4565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b610e9d611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610ebb6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890613bb4565b60405180910390fd5b610f19611e8c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f5e573d6000803e3d6000fd5b50565b610f7c838383604051806020016040528060008152506115ba565b505050565b60606000610f8e8361130f565b905060008167ffffffffffffffff811115610fac57610fab613680565b5b604051908082528060200260200182016040528015610fda5781602001602082028036833780820191505090505b50905060005b8281101561102457610ff28582610d57565b82828151811061100557611004613f0f565b5b602002602001018181525050808061101c90613f6d565b915050610fe0565b508092505050919050565b611037611e8c565b73ffffffffffffffffffffffffffffffffffffffff166110556114d5565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613bb4565b60405180910390fd5b80600d8190555050565b60006110bf610ce4565b8210611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614028565b60405180910390fd5b6008828154811061111457611113613f0f565b5b90600052602060002001549050919050565b61112e611e8c565b73ffffffffffffffffffffffffffffffffffffffff1661114c6114d5565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613bb4565b60405180910390fd5b80600b90805190602001906111b892919061313b565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f906140ba565b60405180910390fd5b80915050919050565b600b805461128e90613c03565b80601f01602080910402602001604051908101604052809291908181526020018280546112ba90613c03565b80156113075780601f106112dc57610100808354040283529160200191611307565b820191906000526020600020905b8154815290600101906020018083116112ea57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113779061414c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113cf611e8c565b73ffffffffffffffffffffffffffffffffffffffff166113ed6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90613bb4565b60405180910390fd5b61144d60006122f3565b565b611457611e8c565b73ffffffffffffffffffffffffffffffffffffffff166114756114d5565b73ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290613bb4565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461150e90613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613c03565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b6115b66115af611e8c565b83836123b9565b5050565b6115cb6115c5611e8c565b83611fb9565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190613e5d565b60405180910390fd5b61161684848484612526565b50505050565b601160009054906101000a900460ff161561166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906141b8565b60405180910390fd5b600082116116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690614224565b60405180910390fd5b60006116b9610ce4565b9050600e5483826116ca9190614244565b111561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906142e6565b60405180910390fd5b6000611715611e8c565b905061171f6114d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461189357600f54841115611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614352565b60405180910390fd5b60011515601160019054906101000a900460ff1615151415611842576117ba612582565b6117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f0906143be565b60405180910390fd5b611802836125d4565b611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061442a565b60405180910390fd5b5b83600d54611850919061444a565b341015611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906144f0565b60405180910390fd5b5b6000600190505b84811161191e57601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118f190613f6d565b919050555061190b3382856119069190614244565b61261c565b808061191690613f6d565b91505061189a565b5050505050565b60105481565b600c805461193890613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613c03565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b505050505081565b60606119c482611e94565b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614582565b60405180910390fd5b6000611a0d61263a565b90506000815111611a2d5760405180602001604052806000815250611a5b565b80611a37846126cc565b600c604051602001611a4b93929190614672565b6040516020818303038152906040525b915050919050565b611a6b611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611a896114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613bb4565b60405180910390fd5b8060108190555050565b600e5481565b611af7611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611b156114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290613bb4565b60405180910390fd5b80600c9080519060200190611b8192919061313b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c21611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613bb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90614715565b60405180910390fd5b611d0e816122f3565b50565b600080611d1c610ce4565b90506000600e548210905060011515601160019054906101000a900460ff1615151415611d8757611d4b612582565b8015611d5c5750611d5b846125d4565b5b8015611d655750805b8015611d7e5750601160009054906101000a900460ff16155b92505050611d8d565b80925050505b919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e855750611e848261282d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f73836111cf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fc482611e94565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906147a7565b60405180910390fd5b600061200e836111cf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061207d57508373ffffffffffffffffffffffffffffffffffffffff1661206584610abb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061208e575061208d8185611b85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120b7826111cf565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614839565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906148cb565b60405180910390fd5b612188838383612897565b612193600082611f00565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e391906148eb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223a9190614244565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061496b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125199190613292565b60405180910390a3505050565b612531848484612097565b61253d848484846129ab565b61257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906149fd565b60405180910390fd5b50505050565b600060105460136000612593611e8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410905090565b6000806125df611e8c565b6040516020016125ef9190614a65565b6040516020818303038152906040528051906020012090506126148360125483612b42565b915050919050565b612636828260405180602001604052806000815250612b59565b5050565b6060600b805461264990613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461267590613c03565b80156126c25780601f10612697576101008083540402835291602001916126c2565b820191906000526020600020905b8154815290600101906020018083116126a557829003601f168201915b5050505050905090565b60606000821415612714576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612828565b600082905060005b6000821461274657808061272f90613f6d565b915050600a8261273f9190614aaf565b915061271c565b60008167ffffffffffffffff81111561276257612761613680565b5b6040519080825280601f01601f1916602001820160405280156127945781602001600182028036833780820191505090505b5090505b60008514612821576001826127ad91906148eb565b9150600a856127bc9190614ae0565b60306127c89190614244565b60f81b8183815181106127de576127dd613f0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281a9190614aaf565b9450612798565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128a2838383611da5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e5576128e081612bb4565b612924565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612923576129228382612bfd565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129675761296281612d6a565b6129a6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129a5576129a48282612e3b565b5b5b505050565b60006129cc8473ffffffffffffffffffffffffffffffffffffffff16611d92565b15612b35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129f5611e8c565b8786866040518563ffffffff1660e01b8152600401612a179493929190614b66565b602060405180830381600087803b158015612a3157600080fd5b505af1925050508015612a6257506040513d601f19601f82011682018060405250810190612a5f9190614bc7565b60015b612ae5573d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b50600081511415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad4906149fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b3a565b600190505b949350505050565b600082612b4f8584612eba565b1490509392505050565b612b638383612f6d565b612b7060008484846129ab565b612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba6906149fd565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c0a8461130f565b612c1491906148eb565b9050600060076000848152602001908152602001600020549050818114612cf9576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d7e91906148eb565b9050600060096000848152602001908152602001600020549050600060088381548110612dae57612dad613f0f565b5b906000526020600020015490508060088381548110612dd057612dcf613f0f565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e1f57612e1e614bf4565b5b6001900381819060005260206000200160009055905550505050565b6000612e468361130f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008082905060005b8451811015612f62576000858281518110612ee157612ee0613f0f565b5b60200260200101519050808311612f22578281604051602001612f05929190614c44565b604051602081830303815290604052805190602001209250612f4e565b8083604051602001612f35929190614c44565b6040516020818303038152906040528051906020012092505b508080612f5a90613f6d565b915050612ec3565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614cbc565b60405180910390fd5b612fe681611e94565b15613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d90614d28565b60405180910390fd5b61303260008383612897565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130829190614244565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461314790613c03565b90600052602060002090601f01602090048101928261316957600085556131b0565b82601f1061318257805160ff19168380011785556131b0565b828001600101855582156131b0579182015b828111156131af578251825591602001919060010190613194565b5b5090506131bd91906131c1565b5090565b5b808211156131da5760008160009055506001016131c2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613227816131f2565b811461323257600080fd5b50565b6000813590506132448161321e565b92915050565b6000602082840312156132605761325f6131e8565b5b600061326e84828501613235565b91505092915050565b60008115159050919050565b61328c81613277565b82525050565b60006020820190506132a76000830184613283565b92915050565b6132b681613277565b81146132c157600080fd5b50565b6000813590506132d3816132ad565b92915050565b6000602082840312156132ef576132ee6131e8565b5b60006132fd848285016132c4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613340578082015181840152602081019050613325565b8381111561334f576000848401525b50505050565b6000601f19601f8301169050919050565b600061337182613306565b61337b8185613311565b935061338b818560208601613322565b61339481613355565b840191505092915050565b600060208201905081810360008301526133b98184613366565b905092915050565b6000819050919050565b6133d4816133c1565b81146133df57600080fd5b50565b6000813590506133f1816133cb565b92915050565b60006020828403121561340d5761340c6131e8565b5b600061341b848285016133e2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061344f82613424565b9050919050565b61345f81613444565b82525050565b600060208201905061347a6000830184613456565b92915050565b61348981613444565b811461349457600080fd5b50565b6000813590506134a681613480565b92915050565b600080604083850312156134c3576134c26131e8565b5b60006134d185828601613497565b92505060206134e2858286016133e2565b9150509250929050565b6134f5816133c1565b82525050565b600060208201905061351060008301846134ec565b92915050565b60008060006060848603121561352f5761352e6131e8565b5b600061353d86828701613497565b935050602061354e86828701613497565b925050604061355f868287016133e2565b9150509250925092565b60006020828403121561357f5761357e6131e8565b5b600061358d84828501613497565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135cb816133c1565b82525050565b60006135dd83836135c2565b60208301905092915050565b6000602082019050919050565b600061360182613596565b61360b81856135a1565b9350613616836135b2565b8060005b8381101561364757815161362e88826135d1565b9750613639836135e9565b92505060018101905061361a565b5085935050505092915050565b6000602082019050818103600083015261366e81846135f6565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136b882613355565b810181811067ffffffffffffffff821117156136d7576136d6613680565b5b80604052505050565b60006136ea6131de565b90506136f682826136af565b919050565b600067ffffffffffffffff82111561371657613715613680565b5b61371f82613355565b9050602081019050919050565b82818337600083830152505050565b600061374e613749846136fb565b6136e0565b90508281526020810184848401111561376a5761376961367b565b5b61377584828561372c565b509392505050565b600082601f83011261379257613791613676565b5b81356137a284826020860161373b565b91505092915050565b6000602082840312156137c1576137c06131e8565b5b600082013567ffffffffffffffff8111156137df576137de6131ed565b5b6137eb8482850161377d565b91505092915050565b6000819050919050565b613807816137f4565b811461381257600080fd5b50565b600081359050613824816137fe565b92915050565b6000602082840312156138405761383f6131e8565b5b600061384e84828501613815565b91505092915050565b6000806040838503121561386e5761386d6131e8565b5b600061387c85828601613497565b925050602061388d858286016132c4565b9150509250929050565b600067ffffffffffffffff8211156138b2576138b1613680565b5b6138bb82613355565b9050602081019050919050565b60006138db6138d684613897565b6136e0565b9050828152602081018484840111156138f7576138f661367b565b5b61390284828561372c565b509392505050565b600082601f83011261391f5761391e613676565b5b813561392f8482602086016138c8565b91505092915050565b60008060008060808587031215613952576139516131e8565b5b600061396087828801613497565b945050602061397187828801613497565b9350506040613982878288016133e2565b925050606085013567ffffffffffffffff8111156139a3576139a26131ed565b5b6139af8782880161390a565b91505092959194509250565b600067ffffffffffffffff8211156139d6576139d5613680565b5b602082029050602081019050919050565b600080fd5b60006139ff6139fa846139bb565b6136e0565b90508083825260208201905060208402830185811115613a2257613a216139e7565b5b835b81811015613a4b5780613a378882613815565b845260208401935050602081019050613a24565b5050509392505050565b600082601f830112613a6a57613a69613676565b5b8135613a7a8482602086016139ec565b91505092915050565b60008060408385031215613a9a57613a996131e8565b5b6000613aa8858286016133e2565b925050602083013567ffffffffffffffff811115613ac957613ac86131ed565b5b613ad585828601613a55565b9150509250929050565b60008060408385031215613af657613af56131e8565b5b6000613b0485828601613497565b9250506020613b1585828601613497565b9150509250929050565b600060208284031215613b3557613b346131e8565b5b600082013567ffffffffffffffff811115613b5357613b526131ed565b5b613b5f84828501613a55565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b9e602083613311565b9150613ba982613b68565b602082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1b57607f821691505b60208210811415613c2f57613c2e613bd4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c91602c83613311565b9150613c9c82613c35565b604082019050919050565b60006020820190508181036000830152613cc081613c84565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d23602183613311565b9150613d2e82613cc7565b604082019050919050565b60006020820190508181036000830152613d5281613d16565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613db5603883613311565b9150613dc082613d59565b604082019050919050565b60006020820190508181036000830152613de481613da8565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e47603183613311565b9150613e5282613deb565b604082019050919050565b60006020820190508181036000830152613e7681613e3a565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ed9602b83613311565b9150613ee482613e7d565b604082019050919050565b60006020820190508181036000830152613f0881613ecc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f78826133c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fab57613faa613f3e565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614012602c83613311565b915061401d82613fb6565b604082019050919050565b6000602082019050818103600083015261404181614005565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006140a4602983613311565b91506140af82614048565b604082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614136602a83613311565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f54686520636f6e74726163742069732070617573656400000000000000000000600082015250565b60006141a2601683613311565b91506141ad8261416c565b602082019050919050565b600060208201905081810360008301526141d181614195565b9050919050565b7f4d757374206d696e74206174206c656173742031204e46540000000000000000600082015250565b600061420e601883613311565b9150614219826141d8565b602082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b600061424f826133c1565b915061425a836133c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428f5761428e613f3e565b5b828201905092915050565b7f416c6c204e4654732068617665206265656e206d696e74656400000000000000600082015250565b60006142d0601983613311565b91506142db8261429a565b602082019050919050565b600060208201905081810360008301526142ff816142c3565b9050919050565b7f43616e6e6f74206d696e742074686973206d616e79207065722063616c6c0000600082015250565b600061433c601e83613311565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b60006143a8600e83613311565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4e6f74207768697465206c697374656400000000000000000000000000000000600082015250565b6000614414601083613311565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b6000614455826133c1565b9150614460836133c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561449957614498613f3e565b5b828202905092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006144da601283613311565b91506144e5826144a4565b602082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061456c602f83613311565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b60006145b882613306565b6145c281856145a2565b93506145d2818560208601613322565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461460081613c03565b61460a81866145a2565b94506001821660008114614625576001811461463657614669565b60ff19831686528186019350614669565b61463f856145de565b60005b8381101561466157815481890152600182019150602081019050614642565b838801955050505b50505092915050565b600061467e82866145ad565b915061468a82856145ad565b915061469682846145f3565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146ff602683613311565b915061470a826146a3565b604082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614791602c83613311565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614823602983613311565b915061482e826147c7565b604082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148b5602483613311565b91506148c082614859565b604082019050919050565b600060208201905081810360008301526148e4816148a8565b9050919050565b60006148f6826133c1565b9150614901836133c1565b92508282101561491457614913613f3e565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614955601983613311565b91506149608261491f565b602082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149e7603283613311565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b60008160601b9050919050565b6000614a3582614a1d565b9050919050565b6000614a4782614a2a565b9050919050565b614a5f614a5a82613444565b614a3c565b82525050565b6000614a718284614a4e565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aba826133c1565b9150614ac5836133c1565b925082614ad557614ad4614a80565b5b828204905092915050565b6000614aeb826133c1565b9150614af6836133c1565b925082614b0657614b05614a80565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614b3882614b11565b614b428185614b1c565b9350614b52818560208601613322565b614b5b81613355565b840191505092915050565b6000608082019050614b7b6000830187613456565b614b886020830186613456565b614b9560408301856134ec565b8181036060830152614ba78184614b2d565b905095945050505050565b600081519050614bc18161321e565b92915050565b600060208284031215614bdd57614bdc6131e8565b5b6000614beb84828501614bb2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000819050919050565b614c3e614c39826137f4565b614c23565b82525050565b6000614c508285614c2d565b602082019150614c608284614c2d565b6020820191508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ca6602083613311565b9150614cb182614c70565b602082019050919050565b60006020820190508181036000830152614cd581614c99565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614d12601c83613311565b9150614d1d82614cdc565b602082019050919050565b60006020820190508181036000830152614d4181614d05565b905091905056fea2646970667358221220fb91592f9501b6755203c4a1f0acf590a6a5acca1c787ec986f193cf32c5783464736f6c63430008090033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001003d8a3d2bf8c1193cd8d86b5d7aa57fb0b604ec8a6f90c2f8f4c6ee40ade9740c000000000000000000000000000000000000000000000000000000000000000b4c7563696420506174687300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d57655041584531623447434c76453678546a6b613744674643727065553234713145524e41586b78575137712f00000000000000000000

Deployed Bytecode

0x6080604052600436106102305760003560e01c80636352211e1161012e578063ba41b0c6116100ab578063d5abeb011161006f578063d5abeb011461081f578063da3ef23f1461084a578063e985e9c514610873578063f2fde38b146108b0578063fd16f686146108d957610230565b8063ba41b0c614610747578063ba7d2c7614610763578063c66828621461078e578063c87b56dd146107b9578063d0eb26b0146107f657610230565b80638da5cb5b116100f25780638da5cb5b1461067457806395d89b411461069f5780639c70b512146106ca578063a22cb465146106f5578063b88d4fde1461071e57610230565b80636352211e1461058f5780636c0360eb146105cc57806370a08231146105f7578063715018a6146106345780637cb647591461064b57610230565b806323b872dd116101bc578063438b630011610180578063438b63001461049857806344a0d68a146104d55780634f6ccce7146104fe57806355f804b31461053b5780635c975abb1461056457610230565b806323b872dd146103d65780632f745c59146103ff5780633c9527641461043c5780633ccfd60b1461046557806342842e0e1461046f57610230565b8063088a4ed011610203578063088a4ed014610303578063095ea7b31461032c57806313faede61461035557806318160ddd14610380578063239c70ae146103ab57610230565b806301ffc9a71461023557806302329a291461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061324a565b610916565b6040516102699190613292565b60405180910390f35b34801561027e57600080fd5b50610299600480360381019061029491906132d9565b610990565b005b3480156102a757600080fd5b506102b0610a29565b6040516102bd919061339f565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e891906133f7565b610abb565b6040516102fa9190613465565b60405180910390f35b34801561030f57600080fd5b5061032a600480360381019061032591906133f7565b610b40565b005b34801561033857600080fd5b50610353600480360381019061034e91906134ac565b610bc6565b005b34801561036157600080fd5b5061036a610cde565b60405161037791906134fb565b60405180910390f35b34801561038c57600080fd5b50610395610ce4565b6040516103a291906134fb565b60405180910390f35b3480156103b757600080fd5b506103c0610cf1565b6040516103cd91906134fb565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613516565b610cf7565b005b34801561040b57600080fd5b50610426600480360381019061042191906134ac565b610d57565b60405161043391906134fb565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e91906132d9565b610dfc565b005b61046d610e95565b005b34801561047b57600080fd5b5061049660048036038101906104919190613516565b610f61565b005b3480156104a457600080fd5b506104bf60048036038101906104ba9190613569565b610f81565b6040516104cc9190613654565b60405180910390f35b3480156104e157600080fd5b506104fc60048036038101906104f791906133f7565b61102f565b005b34801561050a57600080fd5b50610525600480360381019061052091906133f7565b6110b5565b60405161053291906134fb565b60405180910390f35b34801561054757600080fd5b50610562600480360381019061055d91906137ab565b611126565b005b34801561057057600080fd5b506105796111bc565b6040516105869190613292565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b191906133f7565b6111cf565b6040516105c39190613465565b60405180910390f35b3480156105d857600080fd5b506105e1611281565b6040516105ee919061339f565b60405180910390f35b34801561060357600080fd5b5061061e60048036038101906106199190613569565b61130f565b60405161062b91906134fb565b60405180910390f35b34801561064057600080fd5b506106496113c7565b005b34801561065757600080fd5b50610672600480360381019061066d919061382a565b61144f565b005b34801561068057600080fd5b506106896114d5565b6040516106969190613465565b60405180910390f35b3480156106ab57600080fd5b506106b46114ff565b6040516106c1919061339f565b60405180910390f35b3480156106d657600080fd5b506106df611591565b6040516106ec9190613292565b60405180910390f35b34801561070157600080fd5b5061071c60048036038101906107179190613857565b6115a4565b005b34801561072a57600080fd5b5061074560048036038101906107409190613938565b6115ba565b005b610761600480360381019061075c9190613a83565b61161c565b005b34801561076f57600080fd5b50610778611925565b60405161078591906134fb565b60405180910390f35b34801561079a57600080fd5b506107a361192b565b6040516107b0919061339f565b60405180910390f35b3480156107c557600080fd5b506107e060048036038101906107db91906133f7565b6119b9565b6040516107ed919061339f565b60405180910390f35b34801561080257600080fd5b5061081d600480360381019061081891906133f7565b611a63565b005b34801561082b57600080fd5b50610834611ae9565b60405161084191906134fb565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c91906137ab565b611aef565b005b34801561087f57600080fd5b5061089a60048036038101906108959190613adf565b611b85565b6040516108a79190613292565b60405180910390f35b3480156108bc57600080fd5b506108d760048036038101906108d29190613569565b611c19565b005b3480156108e557600080fd5b5061090060048036038101906108fb9190613b1f565b611d11565b60405161090d9190613292565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610989575061098882611daa565b5b9050919050565b610998611e8c565b73ffffffffffffffffffffffffffffffffffffffff166109b66114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0390613bb4565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a3890613c03565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490613c03565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b5050505050905090565b6000610ac682611e94565b610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613ca7565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b48611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610b666114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613bb4565b60405180910390fd5b80600f8190555050565b6000610bd1826111cf565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3990613d39565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c61611e8c565b73ffffffffffffffffffffffffffffffffffffffff161480610c905750610c8f81610c8a611e8c565b611b85565b5b610ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc690613dcb565b60405180910390fd5b610cd98383611f00565b505050565b600d5481565b6000600880549050905090565b600f5481565b610d08610d02611e8c565b82611fb9565b610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e90613e5d565b60405180910390fd5b610d52838383612097565b505050565b6000610d628361130f565b8210610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90613eef565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e04611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610e226114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613bb4565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b610e9d611e8c565b73ffffffffffffffffffffffffffffffffffffffff16610ebb6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614610f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0890613bb4565b60405180910390fd5b610f19611e8c565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610f5e573d6000803e3d6000fd5b50565b610f7c838383604051806020016040528060008152506115ba565b505050565b60606000610f8e8361130f565b905060008167ffffffffffffffff811115610fac57610fab613680565b5b604051908082528060200260200182016040528015610fda5781602001602082028036833780820191505090505b50905060005b8281101561102457610ff28582610d57565b82828151811061100557611004613f0f565b5b602002602001018181525050808061101c90613f6d565b915050610fe0565b508092505050919050565b611037611e8c565b73ffffffffffffffffffffffffffffffffffffffff166110556114d5565b73ffffffffffffffffffffffffffffffffffffffff16146110ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a290613bb4565b60405180910390fd5b80600d8190555050565b60006110bf610ce4565b8210611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614028565b60405180910390fd5b6008828154811061111457611113613f0f565b5b90600052602060002001549050919050565b61112e611e8c565b73ffffffffffffffffffffffffffffffffffffffff1661114c6114d5565b73ffffffffffffffffffffffffffffffffffffffff16146111a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119990613bb4565b60405180910390fd5b80600b90805190602001906111b892919061313b565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611278576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126f906140ba565b60405180910390fd5b80915050919050565b600b805461128e90613c03565b80601f01602080910402602001604051908101604052809291908181526020018280546112ba90613c03565b80156113075780601f106112dc57610100808354040283529160200191611307565b820191906000526020600020905b8154815290600101906020018083116112ea57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611380576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113779061414c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113cf611e8c565b73ffffffffffffffffffffffffffffffffffffffff166113ed6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143a90613bb4565b60405180910390fd5b61144d60006122f3565b565b611457611e8c565b73ffffffffffffffffffffffffffffffffffffffff166114756114d5565b73ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c290613bb4565b60405180910390fd5b8060128190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461150e90613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461153a90613c03565b80156115875780601f1061155c57610100808354040283529160200191611587565b820191906000526020600020905b81548152906001019060200180831161156a57829003601f168201915b5050505050905090565b601160019054906101000a900460ff1681565b6115b66115af611e8c565b83836123b9565b5050565b6115cb6115c5611e8c565b83611fb9565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190613e5d565b60405180910390fd5b61161684848484612526565b50505050565b601160009054906101000a900460ff161561166c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611663906141b8565b60405180910390fd5b600082116116af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a690614224565b60405180910390fd5b60006116b9610ce4565b9050600e5483826116ca9190614244565b111561170b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611702906142e6565b60405180910390fd5b6000611715611e8c565b905061171f6114d5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461189357600f54841115611796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178d90614352565b60405180910390fd5b60011515601160019054906101000a900460ff1615151415611842576117ba612582565b6117f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f0906143be565b60405180910390fd5b611802836125d4565b611841576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118389061442a565b60405180910390fd5b5b83600d54611850919061444a565b341015611892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611889906144f0565b60405180910390fd5b5b6000600190505b84811161191e57601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118f190613f6d565b919050555061190b3382856119069190614244565b61261c565b808061191690613f6d565b91505061189a565b5050505050565b60105481565b600c805461193890613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461196490613c03565b80156119b15780601f10611986576101008083540402835291602001916119b1565b820191906000526020600020905b81548152906001019060200180831161199457829003601f168201915b505050505081565b60606119c482611e94565b611a03576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fa90614582565b60405180910390fd5b6000611a0d61263a565b90506000815111611a2d5760405180602001604052806000815250611a5b565b80611a37846126cc565b600c604051602001611a4b93929190614672565b6040516020818303038152906040525b915050919050565b611a6b611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611a896114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613bb4565b60405180910390fd5b8060108190555050565b600e5481565b611af7611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611b156114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6290613bb4565b60405180910390fd5b80600c9080519060200190611b8192919061313b565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c21611e8c565b73ffffffffffffffffffffffffffffffffffffffff16611c3f6114d5565b73ffffffffffffffffffffffffffffffffffffffff1614611c95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8c90613bb4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfc90614715565b60405180910390fd5b611d0e816122f3565b50565b600080611d1c610ce4565b90506000600e548210905060011515601160019054906101000a900460ff1615151415611d8757611d4b612582565b8015611d5c5750611d5b846125d4565b5b8015611d655750805b8015611d7e5750601160009054906101000a900460ff16155b92505050611d8d565b80925050505b919050565b600080823b905060008111915050919050565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e7557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e855750611e848261282d565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f73836111cf565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611fc482611e94565b612003576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffa906147a7565b60405180910390fd5b600061200e836111cf565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061207d57508373ffffffffffffffffffffffffffffffffffffffff1661206584610abb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061208e575061208d8185611b85565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166120b7826111cf565b73ffffffffffffffffffffffffffffffffffffffff161461210d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210490614839565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906148cb565b60405180910390fd5b612188838383612897565b612193600082611f00565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121e391906148eb565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461223a9190614244565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241f9061496b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516125199190613292565b60405180910390a3505050565b612531848484612097565b61253d848484846129ab565b61257c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612573906149fd565b60405180910390fd5b50505050565b600060105460136000612593611e8c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410905090565b6000806125df611e8c565b6040516020016125ef9190614a65565b6040516020818303038152906040528051906020012090506126148360125483612b42565b915050919050565b612636828260405180602001604052806000815250612b59565b5050565b6060600b805461264990613c03565b80601f016020809104026020016040519081016040528092919081815260200182805461267590613c03565b80156126c25780601f10612697576101008083540402835291602001916126c2565b820191906000526020600020905b8154815290600101906020018083116126a557829003601f168201915b5050505050905090565b60606000821415612714576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612828565b600082905060005b6000821461274657808061272f90613f6d565b915050600a8261273f9190614aaf565b915061271c565b60008167ffffffffffffffff81111561276257612761613680565b5b6040519080825280601f01601f1916602001820160405280156127945781602001600182028036833780820191505090505b5090505b60008514612821576001826127ad91906148eb565b9150600a856127bc9190614ae0565b60306127c89190614244565b60f81b8183815181106127de576127dd613f0f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561281a9190614aaf565b9450612798565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128a2838383611da5565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128e5576128e081612bb4565b612924565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612923576129228382612bfd565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129675761296281612d6a565b6129a6565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146129a5576129a48282612e3b565b5b5b505050565b60006129cc8473ffffffffffffffffffffffffffffffffffffffff16611d92565b15612b35578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129f5611e8c565b8786866040518563ffffffff1660e01b8152600401612a179493929190614b66565b602060405180830381600087803b158015612a3157600080fd5b505af1925050508015612a6257506040513d601f19601f82011682018060405250810190612a5f9190614bc7565b60015b612ae5573d8060008114612a92576040519150601f19603f3d011682016040523d82523d6000602084013e612a97565b606091505b50600081511415612add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad4906149fd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b3a565b600190505b949350505050565b600082612b4f8584612eba565b1490509392505050565b612b638383612f6d565b612b7060008484846129ab565b612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba6906149fd565b60405180910390fd5b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612c0a8461130f565b612c1491906148eb565b9050600060076000848152602001908152602001600020549050818114612cf9576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d7e91906148eb565b9050600060096000848152602001908152602001600020549050600060088381548110612dae57612dad613f0f565b5b906000526020600020015490508060088381548110612dd057612dcf613f0f565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612e1f57612e1e614bf4565b5b6001900381819060005260206000200160009055905550505050565b6000612e468361130f565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b60008082905060005b8451811015612f62576000858281518110612ee157612ee0613f0f565b5b60200260200101519050808311612f22578281604051602001612f05929190614c44565b604051602081830303815290604052805190602001209250612f4e565b8083604051602001612f35929190614c44565b6040516020818303038152906040528051906020012092505b508080612f5a90613f6d565b915050612ec3565b508091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd490614cbc565b60405180910390fd5b612fe681611e94565b15613026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301d90614d28565b60405180910390fd5b61303260008383612897565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130829190614244565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461314790613c03565b90600052602060002090601f01602090048101928261316957600085556131b0565b82601f1061318257805160ff19168380011785556131b0565b828001600101855582156131b0579182015b828111156131af578251825591602001919060010190613194565b5b5090506131bd91906131c1565b5090565b5b808211156131da5760008160009055506001016131c2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613227816131f2565b811461323257600080fd5b50565b6000813590506132448161321e565b92915050565b6000602082840312156132605761325f6131e8565b5b600061326e84828501613235565b91505092915050565b60008115159050919050565b61328c81613277565b82525050565b60006020820190506132a76000830184613283565b92915050565b6132b681613277565b81146132c157600080fd5b50565b6000813590506132d3816132ad565b92915050565b6000602082840312156132ef576132ee6131e8565b5b60006132fd848285016132c4565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613340578082015181840152602081019050613325565b8381111561334f576000848401525b50505050565b6000601f19601f8301169050919050565b600061337182613306565b61337b8185613311565b935061338b818560208601613322565b61339481613355565b840191505092915050565b600060208201905081810360008301526133b98184613366565b905092915050565b6000819050919050565b6133d4816133c1565b81146133df57600080fd5b50565b6000813590506133f1816133cb565b92915050565b60006020828403121561340d5761340c6131e8565b5b600061341b848285016133e2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061344f82613424565b9050919050565b61345f81613444565b82525050565b600060208201905061347a6000830184613456565b92915050565b61348981613444565b811461349457600080fd5b50565b6000813590506134a681613480565b92915050565b600080604083850312156134c3576134c26131e8565b5b60006134d185828601613497565b92505060206134e2858286016133e2565b9150509250929050565b6134f5816133c1565b82525050565b600060208201905061351060008301846134ec565b92915050565b60008060006060848603121561352f5761352e6131e8565b5b600061353d86828701613497565b935050602061354e86828701613497565b925050604061355f868287016133e2565b9150509250925092565b60006020828403121561357f5761357e6131e8565b5b600061358d84828501613497565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135cb816133c1565b82525050565b60006135dd83836135c2565b60208301905092915050565b6000602082019050919050565b600061360182613596565b61360b81856135a1565b9350613616836135b2565b8060005b8381101561364757815161362e88826135d1565b9750613639836135e9565b92505060018101905061361a565b5085935050505092915050565b6000602082019050818103600083015261366e81846135f6565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136b882613355565b810181811067ffffffffffffffff821117156136d7576136d6613680565b5b80604052505050565b60006136ea6131de565b90506136f682826136af565b919050565b600067ffffffffffffffff82111561371657613715613680565b5b61371f82613355565b9050602081019050919050565b82818337600083830152505050565b600061374e613749846136fb565b6136e0565b90508281526020810184848401111561376a5761376961367b565b5b61377584828561372c565b509392505050565b600082601f83011261379257613791613676565b5b81356137a284826020860161373b565b91505092915050565b6000602082840312156137c1576137c06131e8565b5b600082013567ffffffffffffffff8111156137df576137de6131ed565b5b6137eb8482850161377d565b91505092915050565b6000819050919050565b613807816137f4565b811461381257600080fd5b50565b600081359050613824816137fe565b92915050565b6000602082840312156138405761383f6131e8565b5b600061384e84828501613815565b91505092915050565b6000806040838503121561386e5761386d6131e8565b5b600061387c85828601613497565b925050602061388d858286016132c4565b9150509250929050565b600067ffffffffffffffff8211156138b2576138b1613680565b5b6138bb82613355565b9050602081019050919050565b60006138db6138d684613897565b6136e0565b9050828152602081018484840111156138f7576138f661367b565b5b61390284828561372c565b509392505050565b600082601f83011261391f5761391e613676565b5b813561392f8482602086016138c8565b91505092915050565b60008060008060808587031215613952576139516131e8565b5b600061396087828801613497565b945050602061397187828801613497565b9350506040613982878288016133e2565b925050606085013567ffffffffffffffff8111156139a3576139a26131ed565b5b6139af8782880161390a565b91505092959194509250565b600067ffffffffffffffff8211156139d6576139d5613680565b5b602082029050602081019050919050565b600080fd5b60006139ff6139fa846139bb565b6136e0565b90508083825260208201905060208402830185811115613a2257613a216139e7565b5b835b81811015613a4b5780613a378882613815565b845260208401935050602081019050613a24565b5050509392505050565b600082601f830112613a6a57613a69613676565b5b8135613a7a8482602086016139ec565b91505092915050565b60008060408385031215613a9a57613a996131e8565b5b6000613aa8858286016133e2565b925050602083013567ffffffffffffffff811115613ac957613ac86131ed565b5b613ad585828601613a55565b9150509250929050565b60008060408385031215613af657613af56131e8565b5b6000613b0485828601613497565b9250506020613b1585828601613497565b9150509250929050565b600060208284031215613b3557613b346131e8565b5b600082013567ffffffffffffffff811115613b5357613b526131ed565b5b613b5f84828501613a55565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b9e602083613311565b9150613ba982613b68565b602082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c1b57607f821691505b60208210811415613c2f57613c2e613bd4565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613c91602c83613311565b9150613c9c82613c35565b604082019050919050565b60006020820190508181036000830152613cc081613c84565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d23602183613311565b9150613d2e82613cc7565b604082019050919050565b60006020820190508181036000830152613d5281613d16565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613db5603883613311565b9150613dc082613d59565b604082019050919050565b60006020820190508181036000830152613de481613da8565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613e47603183613311565b9150613e5282613deb565b604082019050919050565b60006020820190508181036000830152613e7681613e3a565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613ed9602b83613311565b9150613ee482613e7d565b604082019050919050565b60006020820190508181036000830152613f0881613ecc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613f78826133c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613fab57613faa613f3e565b5b600182019050919050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614012602c83613311565b915061401d82613fb6565b604082019050919050565b6000602082019050818103600083015261404181614005565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006140a4602983613311565b91506140af82614048565b604082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614136602a83613311565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f54686520636f6e74726163742069732070617573656400000000000000000000600082015250565b60006141a2601683613311565b91506141ad8261416c565b602082019050919050565b600060208201905081810360008301526141d181614195565b9050919050565b7f4d757374206d696e74206174206c656173742031204e46540000000000000000600082015250565b600061420e601883613311565b9150614219826141d8565b602082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b600061424f826133c1565b915061425a836133c1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561428f5761428e613f3e565b5b828201905092915050565b7f416c6c204e4654732068617665206265656e206d696e74656400000000000000600082015250565b60006142d0601983613311565b91506142db8261429a565b602082019050919050565b600060208201905081810360008301526142ff816142c3565b9050919050565b7f43616e6e6f74206d696e742074686973206d616e79207065722063616c6c0000600082015250565b600061433c601e83613311565b915061434782614306565b602082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b7f416c7265616479206d696e746564000000000000000000000000000000000000600082015250565b60006143a8600e83613311565b91506143b382614372565b602082019050919050565b600060208201905081810360008301526143d78161439b565b9050919050565b7f4e6f74207768697465206c697374656400000000000000000000000000000000600082015250565b6000614414601083613311565b915061441f826143de565b602082019050919050565b6000602082019050818103600083015261444381614407565b9050919050565b6000614455826133c1565b9150614460836133c1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561449957614498613f3e565b5b828202905092915050565b7f496e73756666696369656e742066756e64730000000000000000000000000000600082015250565b60006144da601283613311565b91506144e5826144a4565b602082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b600061456c602f83613311565b915061457782614510565b604082019050919050565b6000602082019050818103600083015261459b8161455f565b9050919050565b600081905092915050565b60006145b882613306565b6145c281856145a2565b93506145d2818560208601613322565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461460081613c03565b61460a81866145a2565b94506001821660008114614625576001811461463657614669565b60ff19831686528186019350614669565b61463f856145de565b60005b8381101561466157815481890152600182019150602081019050614642565b838801955050505b50505092915050565b600061467e82866145ad565b915061468a82856145ad565b915061469682846145f3565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006146ff602683613311565b915061470a826146a3565b604082019050919050565b6000602082019050818103600083015261472e816146f2565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614791602c83613311565b915061479c82614735565b604082019050919050565b600060208201905081810360008301526147c081614784565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614823602983613311565b915061482e826147c7565b604082019050919050565b6000602082019050818103600083015261485281614816565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006148b5602483613311565b91506148c082614859565b604082019050919050565b600060208201905081810360008301526148e4816148a8565b9050919050565b60006148f6826133c1565b9150614901836133c1565b92508282101561491457614913613f3e565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614955601983613311565b91506149608261491f565b602082019050919050565b6000602082019050818103600083015261498481614948565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006149e7603283613311565b91506149f28261498b565b604082019050919050565b60006020820190508181036000830152614a16816149da565b9050919050565b60008160601b9050919050565b6000614a3582614a1d565b9050919050565b6000614a4782614a2a565b9050919050565b614a5f614a5a82613444565b614a3c565b82525050565b6000614a718284614a4e565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614aba826133c1565b9150614ac5836133c1565b925082614ad557614ad4614a80565b5b828204905092915050565b6000614aeb826133c1565b9150614af6836133c1565b925082614b0657614b05614a80565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b6000614b3882614b11565b614b428185614b1c565b9350614b52818560208601613322565b614b5b81613355565b840191505092915050565b6000608082019050614b7b6000830187613456565b614b886020830186613456565b614b9560408301856134ec565b8181036060830152614ba78184614b2d565b905095945050505050565b600081519050614bc18161321e565b92915050565b600060208284031215614bdd57614bdc6131e8565b5b6000614beb84828501614bb2565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000819050919050565b614c3e614c39826137f4565b614c23565b82525050565b6000614c508285614c2d565b602082019150614c608284614c2d565b6020820191508190509392505050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614ca6602083613311565b9150614cb182614c70565b602082019050919050565b60006020820190508181036000830152614cd581614c99565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614d12601c83613311565b9150614d1d82614cdc565b602082019050919050565b60006020820190508181036000830152614d4181614d05565b905091905056fea2646970667358221220fb91592f9501b6755203c4a1f0acf590a6a5acca1c787ec986f193cf32c5783464736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001003d8a3d2bf8c1193cd8d86b5d7aa57fb0b604ec8a6f90c2f8f4c6ee40ade9740c000000000000000000000000000000000000000000000000000000000000000b4c7563696420506174687300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024c500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d57655041584531623447434c76453678546a6b613744674643727065553234713145524e41586b78575137712f00000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Lucid Paths
Arg [1] : _symbol (string): LP
Arg [2] : _initBaseURI (string): ipfs://QmWePAXE1b4GCLvE6xTjka7DgFCrpeU24q1ERNAXkxWQ7q/
Arg [3] : _merkleRoot (bytes32): 0x3d8a3d2bf8c1193cd8d86b5d7aa57fb0b604ec8a6f90c2f8f4c6ee40ade9740c

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 3d8a3d2bf8c1193cd8d86b5d7aa57fb0b604ec8a6f90c2f8f4c6ee40ade9740c
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 4c75636964205061746873000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4c50000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [9] : 697066733a2f2f516d57655041584531623447434c76453678546a6b61374467
Arg [10] : 4643727065553234713145524e41586b78575137712f00000000000000000000


Deployed Bytecode Sourcemap

46702:4184:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40474:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50590:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27968:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29527:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50236:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29050:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46856:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41114:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46929:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30277:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40782:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50669:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50770:113;;;:::i;:::-;;30687:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49259:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50150:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41304:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50358:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47008:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27662:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46788:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27392:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6938:103;;;;;;;;;;;;;:::i;:::-;;47524:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6287:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28137:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47039:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29820:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30943:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47720:859;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46966:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46814;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49613:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50040:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46893:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50462:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30046:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7196:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48936:315;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40474:224;40576:4;40615:35;40600:50;;;:11;:50;;;;:90;;;;40654:36;40678:11;40654:23;:36::i;:::-;40600:90;40593:97;;40474:224;;;:::o;50590:73::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50651:6:::1;50642;;:15;;;;;;;;;;;;;;;;;;50590:73:::0;:::o;27968:100::-;28022:13;28055:5;28048:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27968:100;:::o;29527:221::-;29603:7;29631:16;29639:7;29631;:16::i;:::-;29623:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29716:15;:24;29732:7;29716:24;;;;;;;;;;;;;;;;;;;;;29709:31;;29527:221;;;:::o;50236:116::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50329:17:::1;50313:13;:33;;;;50236:116:::0;:::o;29050:411::-;29131:13;29147:23;29162:7;29147:14;:23::i;:::-;29131:39;;29195:5;29189:11;;:2;:11;;;;29181:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;29289:5;29273:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29298:37;29315:5;29322:12;:10;:12::i;:::-;29298:16;:37::i;:::-;29273:62;29251:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;29432:21;29441:2;29445:7;29432:8;:21::i;:::-;29120:341;29050:411;;:::o;46856:32::-;;;;:::o;41114:113::-;41175:7;41202:10;:17;;;;41195:24;;41114:113;:::o;46929:32::-;;;;:::o;30277:339::-;30472:41;30491:12;:10;:12::i;:::-;30505:7;30472:18;:41::i;:::-;30464:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;30580:28;30590:4;30596:2;30600:7;30580:9;:28::i;:::-;30277:339;;;:::o;40782:256::-;40879:7;40915:23;40932:5;40915:16;:23::i;:::-;40907:5;:31;40899:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41004:12;:19;41017:5;41004:19;;;;;;;;;;;;;;;:26;41024:5;41004:26;;;;;;;;;;;;40997:33;;40782:256;;;;:::o;50669:95::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50752:6:::1;50734:15;;:24;;;;;;;;;;;;;;;;;;50669:95:::0;:::o;50770:113::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50832:12:::1;:10;:12::i;:::-;50824:30;;:53;50855:21;50824:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;50770:113::o:0;30687:185::-;30825:39;30842:4;30848:2;30852:7;30825:39;;;;;;;;;;;;:16;:39::i;:::-;30687:185;;;:::o;49259:348::-;49334:16;49362:23;49388:17;49398:6;49388:9;:17::i;:::-;49362:43;;49412:25;49454:15;49440:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49412:58;;49482:9;49477:103;49497:15;49493:1;:19;49477:103;;;49542:30;49562:6;49570:1;49542:19;:30::i;:::-;49528:8;49537:1;49528:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;49514:3;;;;;:::i;:::-;;;;49477:103;;;;49593:8;49586:15;;;;49259:348;;;:::o;50150:80::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50216:8:::1;50209:4;:15;;;;50150:80:::0;:::o;41304:233::-;41379:7;41415:30;:28;:30::i;:::-;41407:5;:38;41399:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;41512:10;41523:5;41512:17;;;;;;;;:::i;:::-;;;;;;;;;;41505:24;;41304:233;;;:::o;50358:98::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50439:11:::1;50429:7;:21;;;;;;;;;;;;:::i;:::-;;50358:98:::0;:::o;47008:26::-;;;;;;;;;;;;;:::o;27662:239::-;27734:7;27754:13;27770:7;:16;27778:7;27770:16;;;;;;;;;;;;;;;;;;;;;27754:32;;27822:1;27805:19;;:5;:19;;;;27797:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27888:5;27881:12;;;27662:239;;;:::o;46788:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27392:208::-;27464:7;27509:1;27492:19;;:5;:19;;;;27484:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;27576:9;:16;27586:5;27576:16;;;;;;;;;;;;;;;;27569:23;;27392:208;;;:::o;6938:103::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7003:30:::1;7030:1;7003:18;:30::i;:::-;6938:103::o:0;47524:84::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47598:4:::1;47585:10;:17;;;;47524:84:::0;:::o;6287:87::-;6333:7;6360:6;;;;;;;;;;;6353:13;;6287:87;:::o;28137:104::-;28193:13;28226:7;28219:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28137:104;:::o;47039:34::-;;;;;;;;;;;;;:::o;29820:155::-;29915:52;29934:12;:10;:12::i;:::-;29948:8;29958;29915:18;:52::i;:::-;29820:155;;:::o;30943:328::-;31118:41;31137:12;:10;:12::i;:::-;31151:7;31118:18;:41::i;:::-;31110:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31224:39;31238:4;31244:2;31248:7;31257:5;31224:13;:39::i;:::-;30943:328;;;;:::o;47720:859::-;47817:6;;;;;;;;;;;47816:7;47808:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;47879:1;47865:11;:15;47857:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;47916:14;47933:13;:11;:13::i;:::-;47916:30;;47985:9;;47970:11;47961:6;:20;;;;:::i;:::-;:33;;47953:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48031:16;48050:12;:10;:12::i;:::-;48031:31;;48085:7;:5;:7::i;:::-;48073:19;;:8;:19;;;48069:369;;48128:13;;48113:11;:28;;48105:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;48209:4;48190:23;;:15;;;;;;;;;;;:23;;;48187:171;;;48238:21;:19;:21::i;:::-;48230:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;48301:25;48313:12;48301:11;:25::i;:::-;48292:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;48187:171;48396:11;48389:4;;:18;;;;:::i;:::-;48376:9;:31;;48368:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;48069:369;48449:9;48461:1;48449:13;;48444:130;48469:11;48464:1;:16;48444:130;;48496:16;:26;48513:8;48496:26;;;;;;;;;;;;;;;;:28;;;;;;;;;:::i;:::-;;;;;;48533:33;48543:10;48564:1;48555:6;:10;;;;:::i;:::-;48533:9;:33::i;:::-;48482:3;;;;;:::i;:::-;;;;48444:130;;;;47801:778;;47720:859;;:::o;46966:37::-;;;;:::o;46814:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49613:421::-;49711:13;49752:16;49760:7;49752;:16::i;:::-;49736:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;49840:28;49871:10;:8;:10::i;:::-;49840:41;;49926:1;49901:14;49895:28;:32;:133;;;;;;;;;;;;;;;;;49963:14;49979:18;:7;:16;:18::i;:::-;49999:13;49946:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49895:133;49888:140;;;49613:421;;;:::o;50040:104::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50132:6:::1;50111:18;:27;;;;50040:104:::0;:::o;46893:31::-;;;;:::o;50462:122::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50561:17:::1;50545:13;:33;;;;;;;;;;;;:::i;:::-;;50462:122:::0;:::o;30046:164::-;30143:4;30167:18;:25;30186:5;30167:25;;;;;;;;;;;;;;;:35;30193:8;30167:35;;;;;;;;;;;;;;;;;;;;;;;;;30160:42;;30046:164;;;;:::o;7196:201::-;6518:12;:10;:12::i;:::-;6507:23;;:7;:5;:7::i;:::-;:23;;;6499:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7305:1:::1;7285:22;;:8;:22;;;;7277:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7361:28;7380:8;7361:18;:28::i;:::-;7196:201:::0;:::o;48936:315::-;49004:4;49016:14;49033:13;:11;:13::i;:::-;49016:30;;49053:15;49080:9;;49071:6;:18;49053:36;;49118:4;49099:23;;:15;;;;;;;;;;;:23;;;49096:126;;;49139:21;:19;:21::i;:::-;:50;;;;;49164:25;49176:12;49164:11;:25::i;:::-;49139:50;:64;;;;;49193:10;49139:64;:75;;;;;49208:6;;;;;;;;;;;49207:7;49139:75;49132:82;;;;;;49096:126;49235:10;49228:17;;;;48936:315;;;;:::o;8575:387::-;8635:4;8843:12;8910:7;8898:20;8890:28;;8953:1;8946:4;:8;8939:15;;;8575:387;;;:::o;39330:126::-;;;;:::o;27023:305::-;27125:4;27177:25;27162:40;;;:11;:40;;;;:105;;;;27234:33;27219:48;;;:11;:48;;;;27162:105;:158;;;;27284:36;27308:11;27284:23;:36::i;:::-;27162:158;27142:178;;27023:305;;;:::o;5011:98::-;5064:7;5091:10;5084:17;;5011:98;:::o;32781:127::-;32846:4;32898:1;32870:30;;:7;:16;32878:7;32870:16;;;;;;;;;;;;;;;;;;;;;:30;;;;32863:37;;32781:127;;;:::o;36763:174::-;36865:2;36838:15;:24;36854:7;36838:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;36921:7;36917:2;36883:46;;36892:23;36907:7;36892:14;:23::i;:::-;36883:46;;;;;;;;;;;;36763:174;;:::o;33075:348::-;33168:4;33193:16;33201:7;33193;:16::i;:::-;33185:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33269:13;33285:23;33300:7;33285:14;:23::i;:::-;33269:39;;33338:5;33327:16;;:7;:16;;;:51;;;;33371:7;33347:31;;:20;33359:7;33347:11;:20::i;:::-;:31;;;33327:51;:87;;;;33382:32;33399:5;33406:7;33382:16;:32::i;:::-;33327:87;33319:96;;;33075:348;;;;:::o;36067:578::-;36226:4;36199:31;;:23;36214:7;36199:14;:23::i;:::-;:31;;;36191:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36309:1;36295:16;;:2;:16;;;;36287:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;36365:39;36386:4;36392:2;36396:7;36365:20;:39::i;:::-;36469:29;36486:1;36490:7;36469:8;:29::i;:::-;36530:1;36511:9;:15;36521:4;36511:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;36559:1;36542:9;:13;36552:2;36542:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36590:2;36571:7;:16;36579:7;36571:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36629:7;36625:2;36610:27;;36619:4;36610:27;;;;;;;;;;;;36067:578;;;:::o;7557:191::-;7631:16;7650:6;;;;;;;;;;;7631:25;;7676:8;7667:6;;:17;;;;;;;;;;;;;;;;;;7731:8;7700:40;;7721:8;7700:40;;;;;;;;;;;;7620:128;7557:191;:::o;37079:315::-;37234:8;37225:17;;:5;:17;;;;37217:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;37321:8;37283:18;:25;37302:5;37283:25;;;;;;;;;;;;;;;:35;37309:8;37283:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37367:8;37345:41;;37360:5;37345:41;;;37377:8;37345:41;;;;;;:::i;:::-;;;;;;;;37079:315;;;:::o;32153:::-;32310:28;32320:4;32326:2;32330:7;32310:9;:28::i;:::-;32357:48;32380:4;32386:2;32390:7;32399:5;32357:22;:48::i;:::-;32349:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;32153:315;;;;:::o;48802:128::-;48854:4;48906:18;;48873:16;:30;48890:12;:10;:12::i;:::-;48873:30;;;;;;;;;;;;;;;;:51;48866:58;;48802:128;:::o;48585:211::-;48658:4;48670:12;48712;:10;:12::i;:::-;48695:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;48685:41;;;;;;48670:56;;48740:50;48759:12;48773:10;;48785:4;48740:18;:50::i;:::-;48733:57;;;48585:211;;;:::o;33765:110::-;33841:26;33851:2;33855:7;33841:26;;;;;;;;;;;;:9;:26::i;:::-;33765:110;;:::o;47612:102::-;47672:13;47701:7;47694:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47612:102;:::o;2573:723::-;2629:13;2859:1;2850:5;:10;2846:53;;;2877:10;;;;;;;;;;;;;;;;;;;;;2846:53;2909:12;2924:5;2909:20;;2940:14;2965:78;2980:1;2972:4;:9;2965:78;;2998:8;;;;;:::i;:::-;;;;3029:2;3021:10;;;;;:::i;:::-;;;2965:78;;;3053:19;3085:6;3075:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3053:39;;3103:154;3119:1;3110:5;:10;3103:154;;3147:1;3137:11;;;;;:::i;:::-;;;3214:2;3206:5;:10;;;;:::i;:::-;3193:2;:24;;;;:::i;:::-;3180:39;;3163:6;3170;3163:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3243:2;3234:11;;;;;:::i;:::-;;;3103:154;;;3281:6;3267:21;;;;;2573:723;;;;:::o;18719:157::-;18804:4;18843:25;18828:40;;;:11;:40;;;;18821:47;;18719:157;;;:::o;42150:589::-;42294:45;42321:4;42327:2;42331:7;42294:26;:45::i;:::-;42372:1;42356:18;;:4;:18;;;42352:187;;;42391:40;42423:7;42391:31;:40::i;:::-;42352:187;;;42461:2;42453:10;;:4;:10;;;42449:90;;42480:47;42513:4;42519:7;42480:32;:47::i;:::-;42449:90;42352:187;42567:1;42553:16;;:2;:16;;;42549:183;;;42586:45;42623:7;42586:36;:45::i;:::-;42549:183;;;42659:4;42653:10;;:2;:10;;;42649:83;;42680:40;42708:2;42712:7;42680:27;:40::i;:::-;42649:83;42549:183;42150:589;;;:::o;37959:799::-;38114:4;38135:15;:2;:13;;;:15::i;:::-;38131:620;;;38187:2;38171:36;;;38208:12;:10;:12::i;:::-;38222:4;38228:7;38237:5;38171:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38167:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38430:1;38413:6;:13;:18;38409:272;;;38456:60;;;;;;;;;;:::i;:::-;;;;;;;;38409:272;38631:6;38625:13;38616:6;38612:2;38608:15;38601:38;38167:529;38304:41;;;38294:51;;;:6;:51;;;;38287:58;;;;;38131:620;38735:4;38728:11;;37959:799;;;;;;;:::o;948:190::-;1073:4;1126;1097:25;1110:5;1117:4;1097:12;:25::i;:::-;:33;1090:40;;948:190;;;;;:::o;34102:321::-;34232:18;34238:2;34242:7;34232:5;:18::i;:::-;34283:54;34314:1;34318:2;34322:7;34331:5;34283:22;:54::i;:::-;34261:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;34102:321;;;:::o;43462:164::-;43566:10;:17;;;;43539:15;:24;43555:7;43539:24;;;;;;;;;;;:44;;;;43594:10;43610:7;43594:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43462:164;:::o;44253:988::-;44519:22;44569:1;44544:22;44561:4;44544:16;:22::i;:::-;:26;;;;:::i;:::-;44519:51;;44581:18;44602:17;:26;44620:7;44602:26;;;;;;;;;;;;44581:47;;44749:14;44735:10;:28;44731:328;;44780:19;44802:12;:18;44815:4;44802:18;;;;;;;;;;;;;;;:34;44821:14;44802:34;;;;;;;;;;;;44780:56;;44886:11;44853:12;:18;44866:4;44853:18;;;;;;;;;;;;;;;:30;44872:10;44853:30;;;;;;;;;;;:44;;;;45003:10;44970:17;:30;44988:11;44970:30;;;;;;;;;;;:43;;;;44765:294;44731:328;45155:17;:26;45173:7;45155:26;;;;;;;;;;;45148:33;;;45199:12;:18;45212:4;45199:18;;;;;;;;;;;;;;;:34;45218:14;45199:34;;;;;;;;;;;45192:41;;;44334:907;;44253:988;;:::o;45536:1079::-;45789:22;45834:1;45814:10;:17;;;;:21;;;;:::i;:::-;45789:46;;45846:18;45867:15;:24;45883:7;45867:24;;;;;;;;;;;;45846:45;;46218:19;46240:10;46251:14;46240:26;;;;;;;;:::i;:::-;;;;;;;;;;46218:48;;46304:11;46279:10;46290;46279:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;46415:10;46384:15;:28;46400:11;46384:28;;;;;;;;;;;:41;;;;46556:15;:24;46572:7;46556:24;;;;;;;;;;;46549:31;;;46591:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45607:1008;;;45536:1079;:::o;43040:221::-;43125:14;43142:20;43159:2;43142:16;:20::i;:::-;43125:37;;43200:7;43173:12;:16;43186:2;43173:16;;;;;;;;;;;;;;;:24;43190:6;43173:24;;;;;;;;;;;:34;;;;43247:6;43218:17;:26;43236:7;43218:26;;;;;;;;;;;:35;;;;43114:147;43040:221;;:::o;1500:701::-;1583:7;1603:20;1626:4;1603:27;;1646:9;1641:523;1665:5;:12;1661:1;:16;1641:523;;;1699:20;1722:5;1728:1;1722:8;;;;;;;;:::i;:::-;;;;;;;;1699:31;;1765:12;1749;:28;1745:408;;1919:12;1933;1902:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1892:55;;;;;;1877:70;;1745:408;;;2109:12;2123;2092:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2082:55;;;;;;2067:70;;1745:408;1684:480;1679:3;;;;;:::i;:::-;;;;1641:523;;;;2181:12;2174:19;;;1500:701;;;;:::o;34759:382::-;34853:1;34839:16;;:2;:16;;;;34831:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34912:16;34920:7;34912;:16::i;:::-;34911:17;34903:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34974:45;35003:1;35007:2;35011:7;34974:20;:45::i;:::-;35049:1;35032:9;:13;35042:2;35032:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35080:2;35061:7;:16;35069:7;35061:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35125:7;35121:2;35100:33;;35117:1;35100:33;;;;;;;;;;;;34759:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:77::-;11511:7;11540:5;11529:16;;11474:77;;;:::o;11557:122::-;11630:24;11648:5;11630:24;:::i;:::-;11623:5;11620:35;11610:63;;11669:1;11666;11659:12;11610:63;11557:122;:::o;11685:139::-;11731:5;11769:6;11756:20;11747:29;;11785:33;11812:5;11785:33;:::i;:::-;11685:139;;;;:::o;11830:329::-;11889:6;11938:2;11926:9;11917:7;11913:23;11909:32;11906:119;;;11944:79;;:::i;:::-;11906:119;12064:1;12089:53;12134:7;12125:6;12114:9;12110:22;12089:53;:::i;:::-;12079:63;;12035:117;11830:329;;;;:::o;12165:468::-;12230:6;12238;12287:2;12275:9;12266:7;12262:23;12258:32;12255:119;;;12293:79;;:::i;:::-;12255:119;12413:1;12438:53;12483:7;12474:6;12463:9;12459:22;12438:53;:::i;:::-;12428:63;;12384:117;12540:2;12566:50;12608:7;12599:6;12588:9;12584:22;12566:50;:::i;:::-;12556:60;;12511:115;12165:468;;;;;:::o;12639:307::-;12700:4;12790:18;12782:6;12779:30;12776:56;;;12812:18;;:::i;:::-;12776:56;12850:29;12872:6;12850:29;:::i;:::-;12842:37;;12934:4;12928;12924:15;12916:23;;12639:307;;;:::o;12952:410::-;13029:5;13054:65;13070:48;13111:6;13070:48;:::i;:::-;13054:65;:::i;:::-;13045:74;;13142:6;13135:5;13128:21;13180:4;13173:5;13169:16;13218:3;13209:6;13204:3;13200:16;13197:25;13194:112;;;13225:79;;:::i;:::-;13194:112;13315:41;13349:6;13344:3;13339;13315:41;:::i;:::-;13035:327;12952:410;;;;;:::o;13381:338::-;13436:5;13485:3;13478:4;13470:6;13466:17;13462:27;13452:122;;13493:79;;:::i;:::-;13452:122;13610:6;13597:20;13635:78;13709:3;13701:6;13694:4;13686:6;13682:17;13635:78;:::i;:::-;13626:87;;13442:277;13381:338;;;;:::o;13725:943::-;13820:6;13828;13836;13844;13893:3;13881:9;13872:7;13868:23;13864:33;13861:120;;;13900:79;;:::i;:::-;13861:120;14020:1;14045:53;14090:7;14081:6;14070:9;14066:22;14045:53;:::i;:::-;14035:63;;13991:117;14147:2;14173:53;14218:7;14209:6;14198:9;14194:22;14173:53;:::i;:::-;14163:63;;14118:118;14275:2;14301:53;14346:7;14337:6;14326:9;14322:22;14301:53;:::i;:::-;14291:63;;14246:118;14431:2;14420:9;14416:18;14403:32;14462:18;14454:6;14451:30;14448:117;;;14484:79;;:::i;:::-;14448:117;14589:62;14643:7;14634:6;14623:9;14619:22;14589:62;:::i;:::-;14579:72;;14374:287;13725:943;;;;;;;:::o;14674:311::-;14751:4;14841:18;14833:6;14830:30;14827:56;;;14863:18;;:::i;:::-;14827:56;14913:4;14905:6;14901:17;14893:25;;14973:4;14967;14963:15;14955:23;;14674:311;;;:::o;14991:117::-;15100:1;15097;15090:12;15131:710;15227:5;15252:81;15268:64;15325:6;15268:64;:::i;:::-;15252:81;:::i;:::-;15243:90;;15353:5;15382:6;15375:5;15368:21;15416:4;15409:5;15405:16;15398:23;;15469:4;15461:6;15457:17;15449:6;15445:30;15498:3;15490:6;15487:15;15484:122;;;15517:79;;:::i;:::-;15484:122;15632:6;15615:220;15649:6;15644:3;15641:15;15615:220;;;15724:3;15753:37;15786:3;15774:10;15753:37;:::i;:::-;15748:3;15741:50;15820:4;15815:3;15811:14;15804:21;;15691:144;15675:4;15670:3;15666:14;15659:21;;15615:220;;;15619:21;15233:608;;15131:710;;;;;:::o;15864:370::-;15935:5;15984:3;15977:4;15969:6;15965:17;15961:27;15951:122;;15992:79;;:::i;:::-;15951:122;16109:6;16096:20;16134:94;16224:3;16216:6;16209:4;16201:6;16197:17;16134:94;:::i;:::-;16125:103;;15941:293;15864:370;;;;:::o;16240:684::-;16333:6;16341;16390:2;16378:9;16369:7;16365:23;16361:32;16358:119;;;16396:79;;:::i;:::-;16358:119;16516:1;16541:53;16586:7;16577:6;16566:9;16562:22;16541:53;:::i;:::-;16531:63;;16487:117;16671:2;16660:9;16656:18;16643:32;16702:18;16694:6;16691:30;16688:117;;;16724:79;;:::i;:::-;16688:117;16829:78;16899:7;16890:6;16879:9;16875:22;16829:78;:::i;:::-;16819:88;;16614:303;16240:684;;;;;:::o;16930:474::-;16998:6;17006;17055:2;17043:9;17034:7;17030:23;17026:32;17023:119;;;17061:79;;:::i;:::-;17023:119;17181:1;17206:53;17251:7;17242:6;17231:9;17227:22;17206:53;:::i;:::-;17196:63;;17152:117;17308:2;17334:53;17379:7;17370:6;17359:9;17355:22;17334:53;:::i;:::-;17324:63;;17279:118;16930:474;;;;;:::o;17410:539::-;17494:6;17543:2;17531:9;17522:7;17518:23;17514:32;17511:119;;;17549:79;;:::i;:::-;17511:119;17697:1;17686:9;17682:17;17669:31;17727:18;17719:6;17716:30;17713:117;;;17749:79;;:::i;:::-;17713:117;17854:78;17924:7;17915:6;17904:9;17900:22;17854:78;:::i;:::-;17844:88;;17640:302;17410:539;;;;:::o;17955:182::-;18095:34;18091:1;18083:6;18079:14;18072:58;17955:182;:::o;18143:366::-;18285:3;18306:67;18370:2;18365:3;18306:67;:::i;:::-;18299:74;;18382:93;18471:3;18382:93;:::i;:::-;18500:2;18495:3;18491:12;18484:19;;18143:366;;;:::o;18515:419::-;18681:4;18719:2;18708:9;18704:18;18696:26;;18768:9;18762:4;18758:20;18754:1;18743:9;18739:17;18732:47;18796:131;18922:4;18796:131;:::i;:::-;18788:139;;18515:419;;;:::o;18940:180::-;18988:77;18985:1;18978:88;19085:4;19082:1;19075:15;19109:4;19106:1;19099:15;19126:320;19170:6;19207:1;19201:4;19197:12;19187:22;;19254:1;19248:4;19244:12;19275:18;19265:81;;19331:4;19323:6;19319:17;19309:27;;19265:81;19393:2;19385:6;19382:14;19362:18;19359:38;19356:84;;;19412:18;;:::i;:::-;19356:84;19177:269;19126:320;;;:::o;19452:231::-;19592:34;19588:1;19580:6;19576:14;19569:58;19661:14;19656:2;19648:6;19644:15;19637:39;19452:231;:::o;19689:366::-;19831:3;19852:67;19916:2;19911:3;19852:67;:::i;:::-;19845:74;;19928:93;20017:3;19928:93;:::i;:::-;20046:2;20041:3;20037:12;20030:19;;19689:366;;;:::o;20061:419::-;20227:4;20265:2;20254:9;20250:18;20242:26;;20314:9;20308:4;20304:20;20300:1;20289:9;20285:17;20278:47;20342:131;20468:4;20342:131;:::i;:::-;20334:139;;20061:419;;;:::o;20486:220::-;20626:34;20622:1;20614:6;20610:14;20603:58;20695:3;20690:2;20682:6;20678:15;20671:28;20486:220;:::o;20712:366::-;20854:3;20875:67;20939:2;20934:3;20875:67;:::i;:::-;20868:74;;20951:93;21040:3;20951:93;:::i;:::-;21069:2;21064:3;21060:12;21053:19;;20712:366;;;:::o;21084:419::-;21250:4;21288:2;21277:9;21273:18;21265:26;;21337:9;21331:4;21327:20;21323:1;21312:9;21308:17;21301:47;21365:131;21491:4;21365:131;:::i;:::-;21357:139;;21084:419;;;:::o;21509:243::-;21649:34;21645:1;21637:6;21633:14;21626:58;21718:26;21713:2;21705:6;21701:15;21694:51;21509:243;:::o;21758:366::-;21900:3;21921:67;21985:2;21980:3;21921:67;:::i;:::-;21914:74;;21997:93;22086:3;21997:93;:::i;:::-;22115:2;22110:3;22106:12;22099:19;;21758:366;;;:::o;22130:419::-;22296:4;22334:2;22323:9;22319:18;22311:26;;22383:9;22377:4;22373:20;22369:1;22358:9;22354:17;22347:47;22411:131;22537:4;22411:131;:::i;:::-;22403:139;;22130:419;;;:::o;22555:236::-;22695:34;22691:1;22683:6;22679:14;22672:58;22764:19;22759:2;22751:6;22747:15;22740:44;22555:236;:::o;22797:366::-;22939:3;22960:67;23024:2;23019:3;22960:67;:::i;:::-;22953:74;;23036:93;23125:3;23036:93;:::i;:::-;23154:2;23149:3;23145:12;23138:19;;22797:366;;;:::o;23169:419::-;23335:4;23373:2;23362:9;23358:18;23350:26;;23422:9;23416:4;23412:20;23408:1;23397:9;23393:17;23386:47;23450:131;23576:4;23450:131;:::i;:::-;23442:139;;23169:419;;;:::o;23594:230::-;23734:34;23730:1;23722:6;23718:14;23711:58;23803:13;23798:2;23790:6;23786:15;23779:38;23594:230;:::o;23830:366::-;23972:3;23993:67;24057:2;24052:3;23993:67;:::i;:::-;23986:74;;24069:93;24158:3;24069:93;:::i;:::-;24187:2;24182:3;24178:12;24171:19;;23830:366;;;:::o;24202:419::-;24368:4;24406:2;24395:9;24391:18;24383:26;;24455:9;24449:4;24445:20;24441:1;24430:9;24426:17;24419:47;24483:131;24609:4;24483:131;:::i;:::-;24475:139;;24202:419;;;:::o;24627:180::-;24675:77;24672:1;24665:88;24772:4;24769:1;24762:15;24796:4;24793:1;24786:15;24813:180;24861:77;24858:1;24851:88;24958:4;24955:1;24948:15;24982:4;24979:1;24972:15;24999:233;25038:3;25061:24;25079:5;25061:24;:::i;:::-;25052:33;;25107:66;25100:5;25097:77;25094:103;;;25177:18;;:::i;:::-;25094:103;25224:1;25217:5;25213:13;25206:20;;24999:233;;;:::o;25238:231::-;25378:34;25374:1;25366:6;25362:14;25355:58;25447:14;25442:2;25434:6;25430:15;25423:39;25238:231;:::o;25475:366::-;25617:3;25638:67;25702:2;25697:3;25638:67;:::i;:::-;25631:74;;25714:93;25803:3;25714:93;:::i;:::-;25832:2;25827:3;25823:12;25816:19;;25475:366;;;:::o;25847:419::-;26013:4;26051:2;26040:9;26036:18;26028:26;;26100:9;26094:4;26090:20;26086:1;26075:9;26071:17;26064:47;26128:131;26254:4;26128:131;:::i;:::-;26120:139;;25847:419;;;:::o;26272:228::-;26412:34;26408:1;26400:6;26396:14;26389:58;26481:11;26476:2;26468:6;26464:15;26457:36;26272:228;:::o;26506:366::-;26648:3;26669:67;26733:2;26728:3;26669:67;:::i;:::-;26662:74;;26745:93;26834:3;26745:93;:::i;:::-;26863:2;26858:3;26854:12;26847:19;;26506:366;;;:::o;26878:419::-;27044:4;27082:2;27071:9;27067:18;27059:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27159:131;27285:4;27159:131;:::i;:::-;27151:139;;26878:419;;;:::o;27303:229::-;27443:34;27439:1;27431:6;27427:14;27420:58;27512:12;27507:2;27499:6;27495:15;27488:37;27303:229;:::o;27538:366::-;27680:3;27701:67;27765:2;27760:3;27701:67;:::i;:::-;27694:74;;27777:93;27866:3;27777:93;:::i;:::-;27895:2;27890:3;27886:12;27879:19;;27538:366;;;:::o;27910:419::-;28076:4;28114:2;28103:9;28099:18;28091:26;;28163:9;28157:4;28153:20;28149:1;28138:9;28134:17;28127:47;28191:131;28317:4;28191:131;:::i;:::-;28183:139;;27910:419;;;:::o;28335:172::-;28475:24;28471:1;28463:6;28459:14;28452:48;28335:172;:::o;28513:366::-;28655:3;28676:67;28740:2;28735:3;28676:67;:::i;:::-;28669:74;;28752:93;28841:3;28752:93;:::i;:::-;28870:2;28865:3;28861:12;28854:19;;28513:366;;;:::o;28885:419::-;29051:4;29089:2;29078:9;29074:18;29066:26;;29138:9;29132:4;29128:20;29124:1;29113:9;29109:17;29102:47;29166:131;29292:4;29166:131;:::i;:::-;29158:139;;28885:419;;;:::o;29310:174::-;29450:26;29446:1;29438:6;29434:14;29427:50;29310:174;:::o;29490:366::-;29632:3;29653:67;29717:2;29712:3;29653:67;:::i;:::-;29646:74;;29729:93;29818:3;29729:93;:::i;:::-;29847:2;29842:3;29838:12;29831:19;;29490:366;;;:::o;29862:419::-;30028:4;30066:2;30055:9;30051:18;30043:26;;30115:9;30109:4;30105:20;30101:1;30090:9;30086:17;30079:47;30143:131;30269:4;30143:131;:::i;:::-;30135:139;;29862:419;;;:::o;30287:305::-;30327:3;30346:20;30364:1;30346:20;:::i;:::-;30341:25;;30380:20;30398:1;30380:20;:::i;:::-;30375:25;;30534:1;30466:66;30462:74;30459:1;30456:81;30453:107;;;30540:18;;:::i;:::-;30453:107;30584:1;30581;30577:9;30570:16;;30287:305;;;;:::o;30598:175::-;30738:27;30734:1;30726:6;30722:14;30715:51;30598:175;:::o;30779:366::-;30921:3;30942:67;31006:2;31001:3;30942:67;:::i;:::-;30935:74;;31018:93;31107:3;31018:93;:::i;:::-;31136:2;31131:3;31127:12;31120:19;;30779:366;;;:::o;31151:419::-;31317:4;31355:2;31344:9;31340:18;31332:26;;31404:9;31398:4;31394:20;31390:1;31379:9;31375:17;31368:47;31432:131;31558:4;31432:131;:::i;:::-;31424:139;;31151:419;;;:::o;31576:180::-;31716:32;31712:1;31704:6;31700:14;31693:56;31576:180;:::o;31762:366::-;31904:3;31925:67;31989:2;31984:3;31925:67;:::i;:::-;31918:74;;32001:93;32090:3;32001:93;:::i;:::-;32119:2;32114:3;32110:12;32103:19;;31762:366;;;:::o;32134:419::-;32300:4;32338:2;32327:9;32323:18;32315:26;;32387:9;32381:4;32377:20;32373:1;32362:9;32358:17;32351:47;32415:131;32541:4;32415:131;:::i;:::-;32407:139;;32134:419;;;:::o;32559:164::-;32699:16;32695:1;32687:6;32683:14;32676:40;32559:164;:::o;32729:366::-;32871:3;32892:67;32956:2;32951:3;32892:67;:::i;:::-;32885:74;;32968:93;33057:3;32968:93;:::i;:::-;33086:2;33081:3;33077:12;33070:19;;32729:366;;;:::o;33101:419::-;33267:4;33305:2;33294:9;33290:18;33282:26;;33354:9;33348:4;33344:20;33340:1;33329:9;33325:17;33318:47;33382:131;33508:4;33382:131;:::i;:::-;33374:139;;33101:419;;;:::o;33526:166::-;33666:18;33662:1;33654:6;33650:14;33643:42;33526:166;:::o;33698:366::-;33840:3;33861:67;33925:2;33920:3;33861:67;:::i;:::-;33854:74;;33937:93;34026:3;33937:93;:::i;:::-;34055:2;34050:3;34046:12;34039:19;;33698:366;;;:::o;34070:419::-;34236:4;34274:2;34263:9;34259:18;34251:26;;34323:9;34317:4;34313:20;34309:1;34298:9;34294:17;34287:47;34351:131;34477:4;34351:131;:::i;:::-;34343:139;;34070:419;;;:::o;34495:348::-;34535:7;34558:20;34576:1;34558:20;:::i;:::-;34553:25;;34592:20;34610:1;34592:20;:::i;:::-;34587:25;;34780:1;34712:66;34708:74;34705:1;34702:81;34697:1;34690:9;34683:17;34679:105;34676:131;;;34787:18;;:::i;:::-;34676:131;34835:1;34832;34828:9;34817:20;;34495:348;;;;:::o;34849:168::-;34989:20;34985:1;34977:6;34973:14;34966:44;34849:168;:::o;35023:366::-;35165:3;35186:67;35250:2;35245:3;35186:67;:::i;:::-;35179:74;;35262:93;35351:3;35262:93;:::i;:::-;35380:2;35375:3;35371:12;35364:19;;35023:366;;;:::o;35395:419::-;35561:4;35599:2;35588:9;35584:18;35576:26;;35648:9;35642:4;35638:20;35634:1;35623:9;35619:17;35612:47;35676:131;35802:4;35676:131;:::i;:::-;35668:139;;35395:419;;;:::o;35820:234::-;35960:34;35956:1;35948:6;35944:14;35937:58;36029:17;36024:2;36016:6;36012:15;36005:42;35820:234;:::o;36060:366::-;36202:3;36223:67;36287:2;36282:3;36223:67;:::i;:::-;36216:74;;36299:93;36388:3;36299:93;:::i;:::-;36417:2;36412:3;36408:12;36401:19;;36060:366;;;:::o;36432:419::-;36598:4;36636:2;36625:9;36621:18;36613:26;;36685:9;36679:4;36675:20;36671:1;36660:9;36656:17;36649:47;36713:131;36839:4;36713:131;:::i;:::-;36705:139;;36432:419;;;:::o;36857:148::-;36959:11;36996:3;36981:18;;36857:148;;;;:::o;37011:377::-;37117:3;37145:39;37178:5;37145:39;:::i;:::-;37200:89;37282:6;37277:3;37200:89;:::i;:::-;37193:96;;37298:52;37343:6;37338:3;37331:4;37324:5;37320:16;37298:52;:::i;:::-;37375:6;37370:3;37366:16;37359:23;;37121:267;37011:377;;;;:::o;37394:141::-;37443:4;37466:3;37458:11;;37489:3;37486:1;37479:14;37523:4;37520:1;37510:18;37502:26;;37394:141;;;:::o;37565:845::-;37668:3;37705:5;37699:12;37734:36;37760:9;37734:36;:::i;:::-;37786:89;37868:6;37863:3;37786:89;:::i;:::-;37779:96;;37906:1;37895:9;37891:17;37922:1;37917:137;;;;38068:1;38063:341;;;;37884:520;;37917:137;38001:4;37997:9;37986;37982:25;37977:3;37970:38;38037:6;38032:3;38028:16;38021:23;;37917:137;;38063:341;38130:38;38162:5;38130:38;:::i;:::-;38190:1;38204:154;38218:6;38215:1;38212:13;38204:154;;;38292:7;38286:14;38282:1;38277:3;38273:11;38266:35;38342:1;38333:7;38329:15;38318:26;;38240:4;38237:1;38233:12;38228:17;;38204:154;;;38387:6;38382:3;38378:16;38371:23;;38070:334;;37884:520;;37672:738;;37565:845;;;;:::o;38416:589::-;38641:3;38663:95;38754:3;38745:6;38663:95;:::i;:::-;38656:102;;38775:95;38866:3;38857:6;38775:95;:::i;:::-;38768:102;;38887:92;38975:3;38966:6;38887:92;:::i;:::-;38880:99;;38996:3;38989:10;;38416:589;;;;;;:::o;39011:225::-;39151:34;39147:1;39139:6;39135:14;39128:58;39220:8;39215:2;39207:6;39203:15;39196:33;39011:225;:::o;39242:366::-;39384:3;39405:67;39469:2;39464:3;39405:67;:::i;:::-;39398:74;;39481:93;39570:3;39481:93;:::i;:::-;39599:2;39594:3;39590:12;39583:19;;39242:366;;;:::o;39614:419::-;39780:4;39818:2;39807:9;39803:18;39795:26;;39867:9;39861:4;39857:20;39853:1;39842:9;39838:17;39831:47;39895:131;40021:4;39895:131;:::i;:::-;39887:139;;39614:419;;;:::o;40039:231::-;40179:34;40175:1;40167:6;40163:14;40156:58;40248:14;40243:2;40235:6;40231:15;40224:39;40039:231;:::o;40276:366::-;40418:3;40439:67;40503:2;40498:3;40439:67;:::i;:::-;40432:74;;40515:93;40604:3;40515:93;:::i;:::-;40633:2;40628:3;40624:12;40617:19;;40276:366;;;:::o;40648:419::-;40814:4;40852:2;40841:9;40837:18;40829:26;;40901:9;40895:4;40891:20;40887:1;40876:9;40872:17;40865:47;40929:131;41055:4;40929:131;:::i;:::-;40921:139;;40648:419;;;:::o;41073:228::-;41213:34;41209:1;41201:6;41197:14;41190:58;41282:11;41277:2;41269:6;41265:15;41258:36;41073:228;:::o;41307:366::-;41449:3;41470:67;41534:2;41529:3;41470:67;:::i;:::-;41463:74;;41546:93;41635:3;41546:93;:::i;:::-;41664:2;41659:3;41655:12;41648:19;;41307:366;;;:::o;41679:419::-;41845:4;41883:2;41872:9;41868:18;41860:26;;41932:9;41926:4;41922:20;41918:1;41907:9;41903:17;41896:47;41960:131;42086:4;41960:131;:::i;:::-;41952:139;;41679:419;;;:::o;42104:223::-;42244:34;42240:1;42232:6;42228:14;42221:58;42313:6;42308:2;42300:6;42296:15;42289:31;42104:223;:::o;42333:366::-;42475:3;42496:67;42560:2;42555:3;42496:67;:::i;:::-;42489:74;;42572:93;42661:3;42572:93;:::i;:::-;42690:2;42685:3;42681:12;42674:19;;42333:366;;;:::o;42705:419::-;42871:4;42909:2;42898:9;42894:18;42886:26;;42958:9;42952:4;42948:20;42944:1;42933:9;42929:17;42922:47;42986:131;43112:4;42986:131;:::i;:::-;42978:139;;42705:419;;;:::o;43130:191::-;43170:4;43190:20;43208:1;43190:20;:::i;:::-;43185:25;;43224:20;43242:1;43224:20;:::i;:::-;43219:25;;43263:1;43260;43257:8;43254:34;;;43268:18;;:::i;:::-;43254:34;43313:1;43310;43306:9;43298:17;;43130:191;;;;:::o;43327:175::-;43467:27;43463:1;43455:6;43451:14;43444:51;43327:175;:::o;43508:366::-;43650:3;43671:67;43735:2;43730:3;43671:67;:::i;:::-;43664:74;;43747:93;43836:3;43747:93;:::i;:::-;43865:2;43860:3;43856:12;43849:19;;43508:366;;;:::o;43880:419::-;44046:4;44084:2;44073:9;44069:18;44061:26;;44133:9;44127:4;44123:20;44119:1;44108:9;44104:17;44097:47;44161:131;44287:4;44161:131;:::i;:::-;44153:139;;43880:419;;;:::o;44305:237::-;44445:34;44441:1;44433:6;44429:14;44422:58;44514:20;44509:2;44501:6;44497:15;44490:45;44305:237;:::o;44548:366::-;44690:3;44711:67;44775:2;44770:3;44711:67;:::i;:::-;44704:74;;44787:93;44876:3;44787:93;:::i;:::-;44905:2;44900:3;44896:12;44889:19;;44548:366;;;:::o;44920:419::-;45086:4;45124:2;45113:9;45109:18;45101:26;;45173:9;45167:4;45163:20;45159:1;45148:9;45144:17;45137:47;45201:131;45327:4;45201:131;:::i;:::-;45193:139;;44920:419;;;:::o;45345:94::-;45378:8;45426:5;45422:2;45418:14;45397:35;;45345:94;;;:::o;45445:::-;45484:7;45513:20;45527:5;45513:20;:::i;:::-;45502:31;;45445:94;;;:::o;45545:100::-;45584:7;45613:26;45633:5;45613:26;:::i;:::-;45602:37;;45545:100;;;:::o;45651:157::-;45756:45;45776:24;45794:5;45776:24;:::i;:::-;45756:45;:::i;:::-;45751:3;45744:58;45651:157;;:::o;45814:256::-;45926:3;45941:75;46012:3;46003:6;45941:75;:::i;:::-;46041:2;46036:3;46032:12;46025:19;;46061:3;46054:10;;45814:256;;;;:::o;46076:180::-;46124:77;46121:1;46114:88;46221:4;46218:1;46211:15;46245:4;46242:1;46235:15;46262:185;46302:1;46319:20;46337:1;46319:20;:::i;:::-;46314:25;;46353:20;46371:1;46353:20;:::i;:::-;46348:25;;46392:1;46382:35;;46397:18;;:::i;:::-;46382:35;46439:1;46436;46432:9;46427:14;;46262:185;;;;:::o;46453:176::-;46485:1;46502:20;46520:1;46502:20;:::i;:::-;46497:25;;46536:20;46554:1;46536:20;:::i;:::-;46531:25;;46575:1;46565:35;;46580:18;;:::i;:::-;46565:35;46621:1;46618;46614:9;46609:14;;46453:176;;;;:::o;46635:98::-;46686:6;46720:5;46714:12;46704:22;;46635:98;;;:::o;46739:168::-;46822:11;46856:6;46851:3;46844:19;46896:4;46891:3;46887:14;46872:29;;46739:168;;;;:::o;46913:360::-;46999:3;47027:38;47059:5;47027:38;:::i;:::-;47081:70;47144:6;47139:3;47081:70;:::i;:::-;47074:77;;47160:52;47205:6;47200:3;47193:4;47186:5;47182:16;47160:52;:::i;:::-;47237:29;47259:6;47237:29;:::i;:::-;47232:3;47228:39;47221:46;;47003:270;46913:360;;;;:::o;47279:640::-;47474:4;47512:3;47501:9;47497:19;47489:27;;47526:71;47594:1;47583:9;47579:17;47570:6;47526:71;:::i;:::-;47607:72;47675:2;47664:9;47660:18;47651:6;47607:72;:::i;:::-;47689;47757:2;47746:9;47742:18;47733:6;47689:72;:::i;:::-;47808:9;47802:4;47798:20;47793:2;47782:9;47778:18;47771:48;47836:76;47907:4;47898:6;47836:76;:::i;:::-;47828:84;;47279:640;;;;;;;:::o;47925:141::-;47981:5;48012:6;48006:13;47997:22;;48028:32;48054:5;48028:32;:::i;:::-;47925:141;;;;:::o;48072:349::-;48141:6;48190:2;48178:9;48169:7;48165:23;48161:32;48158:119;;;48196:79;;:::i;:::-;48158:119;48316:1;48341:63;48396:7;48387:6;48376:9;48372:22;48341:63;:::i;:::-;48331:73;;48287:127;48072:349;;;;:::o;48427:180::-;48475:77;48472:1;48465:88;48572:4;48569:1;48562:15;48596:4;48593:1;48586:15;48613:79;48652:7;48681:5;48670:16;;48613:79;;;:::o;48698:157::-;48803:45;48823:24;48841:5;48823:24;:::i;:::-;48803:45;:::i;:::-;48798:3;48791:58;48698:157;;:::o;48861:397::-;49001:3;49016:75;49087:3;49078:6;49016:75;:::i;:::-;49116:2;49111:3;49107:12;49100:19;;49129:75;49200:3;49191:6;49129:75;:::i;:::-;49229:2;49224:3;49220:12;49213:19;;49249:3;49242:10;;48861:397;;;;;:::o;49264:182::-;49404:34;49400:1;49392:6;49388:14;49381:58;49264:182;:::o;49452:366::-;49594:3;49615:67;49679:2;49674:3;49615:67;:::i;:::-;49608:74;;49691:93;49780:3;49691:93;:::i;:::-;49809:2;49804:3;49800:12;49793:19;;49452:366;;;:::o;49824:419::-;49990:4;50028:2;50017:9;50013:18;50005:26;;50077:9;50071:4;50067:20;50063:1;50052:9;50048:17;50041:47;50105:131;50231:4;50105:131;:::i;:::-;50097:139;;49824:419;;;:::o;50249:178::-;50389:30;50385:1;50377:6;50373:14;50366:54;50249:178;:::o;50433:366::-;50575:3;50596:67;50660:2;50655:3;50596:67;:::i;:::-;50589:74;;50672:93;50761:3;50672:93;:::i;:::-;50790:2;50785:3;50781:12;50774:19;;50433:366;;;:::o;50805:419::-;50971:4;51009:2;50998:9;50994:18;50986:26;;51058:9;51052:4;51048:20;51044:1;51033:9;51029:17;51022:47;51086:131;51212:4;51086:131;:::i;:::-;51078:139;;50805:419;;;:::o

Swarm Source

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