ETH Price: $2,459.03 (+3.94%)

Token

HPOSF2CI (XLM V1)
 

Overview

Max Total Supply

200 XLM V1

Holders

66

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 XLM V1
0x8bf7721856d306f7f86e7664398e8a0956d90422
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
XLMNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-21
*/

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


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

// File: NFT/XLMNFT.sol


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

// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)


pragma solidity ^0.8.0;

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

    /**
     * @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);
    }

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// 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 (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (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: address zero is not a valid owner");
        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: invalid token ID");
        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) {
        _requireMinted(tokenId);

        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 overridden 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 token owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {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 an {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 Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    /**
     * @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 {
                    /// @solidity memory-safe-assembly
                    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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        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();
    }
}





pragma solidity >=0.7.0 <0.9.0;



contract XLMNFT is ERC721Enumerable, Ownable {
  using Strings for uint256;
   IERC20 public xlmToken;


  string public baseURI;
  string public baseExtension = ".json";
  string public notRevealedUri;
  uint256 public cost = 100000000 * 10**9;
  uint256 public maxSupply = 200;
  uint256 public maxMintAmount = 5;
  uint256 public nftPerAddressLimit = 5;
  address public xlmDeployer;
  bool public paused = true;
  bool public revealed = false;
  mapping(address => uint256) public addressMintedBalance;

  constructor(
      
    string memory _name,
    string memory _symbol,
    string memory _initBaseURI,
    string memory _initNotRevealedUri,
    address _xlmToken,
    address _xlmDeployer
  ) ERC721(_name, _symbol) {
    setBaseURI(_initBaseURI);
    setNotRevealedURI(_initNotRevealedUri);
    xlmToken = IERC20(_xlmToken);
    xlmDeployer = _xlmDeployer;
  }

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

  // public
  function mint(uint256 _mintAmount) external {
    uint256 supply = totalSupply();
     uint256 newCost = cost * _mintAmount;
    require(_mintAmount > 0, "need to mint at least 1 NFT");
    require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");


    if (msg.sender == owner() || msg.sender == xlmDeployer) {
           require(_mintAmount > 0, "need to mint at least 1 NFT");
           require(_mintAmount <= maxSupply, "Max Supply Minted");  
        }

    else if (msg.sender != owner()) {
            require(!paused, "the contract is paused");
            require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
            uint256 ownerMintedCount = addressMintedBalance[msg.sender];
            require(ownerMintedCount + _mintAmount <= nftPerAddressLimit, "max NFT per address exceeded");   
            require(xlmToken.transferFrom(msg.sender, xlmDeployer, newCost), "insufficient XLM Tokens");
    }


       
    for (uint256 i = 1; i <= _mintAmount; i++) {
      addressMintedBalance[msg.sender]++;
      _safeMint(msg.sender, supply + i);
    }

   
  }
  

  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"
    );
    
    if(revealed == false) {
        return notRevealedUri;
    }

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

  //only owner
  function reveal() public onlyOwner {
      revealed = true;
  }
  
  function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
    nftPerAddressLimit = _limit;
  }
  
  function setMintCostWei(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 setNotRevealedURI(string memory _notRevealedURI) public onlyOwner {
    notRevealedUri = _notRevealedURI;
  }

  function pause(bool _state) public onlyOwner {
    paused = _state;
  }
  
 
  function withdraw() public payable onlyOwner {
    payable(owner()).transfer(address(this).balance);
  }

    function claimOtherTokens(IERC20 _tokenAddress, address _walletaddress)
        external
        onlyOwner
    {
        _tokenAddress.transfer(
            _walletaddress,
            _tokenAddress.balanceOf(address(this))
        );
    }



}

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":"string","name":"_initNotRevealedUri","type":"string"},{"internalType":"address","name":"_xlmToken","type":"address"},{"internalType":"address","name":"_xlmDeployer","type":"address"}],"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":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"contract IERC20","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","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"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"notRevealedUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_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":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"setMintCostWei","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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"},{"inputs":[],"name":"xlmDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"xlmToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000051929190620003bd565b5067016345785d8a0000600f5560c8601055600560115560056012556001601360146101000a81548160ff0219169083151502179055506000601360156101000a81548160ff021916908315150217905550348015620000b057600080fd5b506040516200531c3803806200531c8339818101604052810190620000d6919062000502565b85858160009080519060200190620000f0929190620003bd565b50806001908051906020019062000109929190620003bd565b5050506200012c62000120620001dc60201b60201c565b620001e460201b60201c565b6200013d84620002aa60201b60201c565b6200014e83620002d660201b60201c565b81600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200086f565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002ba6200030260201b60201c565b80600c9080519060200190620002d2929190620003bd565b5050565b620002e66200030260201b60201c565b80600e9080519060200190620002fe929190620003bd565b5050565b62000312620001dc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003386200039360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000391576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003889062000641565b60405180910390fd5b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003cb906200073d565b90600052602060002090601f016020900481019282620003ef57600085556200043b565b82601f106200040a57805160ff19168380011785556200043b565b828001600101855582156200043b579182015b828111156200043a5782518255916020019190600101906200041d565b5b5090506200044a91906200044e565b5090565b5b80821115620004695760008160009055506001016200044f565b5090565b6000620004846200047e846200068c565b62000663565b905082815260208101848484011115620004a357620004a26200080c565b5b620004b084828562000707565b509392505050565b600081519050620004c98162000855565b92915050565b600082601f830112620004e757620004e662000807565b5b8151620004f98482602086016200046d565b91505092915050565b60008060008060008060c0878903121562000522576200052162000816565b5b600087015167ffffffffffffffff81111562000543576200054262000811565b5b6200055189828a01620004cf565b965050602087015167ffffffffffffffff81111562000575576200057462000811565b5b6200058389828a01620004cf565b955050604087015167ffffffffffffffff811115620005a757620005a662000811565b5b620005b589828a01620004cf565b945050606087015167ffffffffffffffff811115620005d957620005d862000811565b5b620005e789828a01620004cf565b9350506080620005fa89828a01620004b8565b92505060a06200060d89828a01620004b8565b9150509295509295509295565b600062000629602083620006c2565b915062000636826200082c565b602082019050919050565b600060208201905081810360008301526200065c816200061a565b9050919050565b60006200066f62000682565b90506200067d828262000773565b919050565b6000604051905090565b600067ffffffffffffffff821115620006aa57620006a9620007d8565b5b620006b5826200081b565b9050602081019050919050565b600082825260208201905092915050565b6000620006e082620006e7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620007275780820151818401526020810190506200070a565b8381111562000737576000848401525b50505050565b600060028204905060018216806200075657607f821691505b602082108114156200076d576200076c620007a9565b5b50919050565b6200077e826200081b565b810181811067ffffffffffffffff82111715620007a0576200079f620007d8565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200086081620006d3565b81146200086c57600080fd5b50565b614a9d806200087f6000396000f3fe60806040526004361061025c5760003560e01c80636352211e11610144578063b5706967116100b6578063d0eb26b01161007a578063d0eb26b0146108db578063d5abeb0114610904578063da3ef23f1461092f578063e985e9c514610958578063f2c4ce1e14610995578063f2fde38b146109be5761025c565b8063b5706967146107f4578063b88d4fde1461081f578063ba7d2c7614610848578063c668286214610873578063c87b56dd1461089e5761025c565b80637f767818116101085780637f7678181461070c5780638da5cb5b1461073557806395d89b4114610760578063a0712d681461078b578063a22cb465146107b4578063a475b5dd146107dd5761025c565b80636352211e146106275780636c0360eb1461066457806370a082311461068f578063715018a6146106cc5780637f00c7a6146106e35761025c565b8063239c70ae116101dd57806342842e0e116101a157806342842e0e14610505578063438b63001461052e5780634f6ccce71461056b57806351830227146105a857806355f804b3146105d35780635c975abb146105fc5761025c565b8063239c70ae1461044157806323b872dd1461046c5780632f745c59146104955780633ae7dc20146104d25780633ccfd60b146104fb5761025c565b8063081c8c4411610224578063081c8c441461035a578063095ea7b31461038557806313faede6146103ae57806318160ddd146103d957806318cae269146104045761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c757806307b6fa30146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613484565b6109e7565b6040516102959190613be3565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061342a565b610a61565b005b3480156102d357600080fd5b506102dc610a86565b6040516102e99190613c19565b60405180910390f35b3480156102fe57600080fd5b50610307610b18565b6040516103149190613afa565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613567565b610b3e565b6040516103519190613afa565b60405180910390f35b34801561036657600080fd5b5061036f610b84565b60405161037c9190613c19565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906133ea565b610c12565b005b3480156103ba57600080fd5b506103c3610d2a565b6040516103d09190613f1b565b60405180910390f35b3480156103e557600080fd5b506103ee610d30565b6040516103fb9190613f1b565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613267565b610d3d565b6040516104389190613f1b565b60405180910390f35b34801561044d57600080fd5b50610456610d55565b6040516104639190613f1b565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132d4565b610d5b565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906133ea565b610dbb565b6040516104c99190613f1b565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906134de565b610e60565b005b610503610f82565b005b34801561051157600080fd5b5061052c600480360381019061052791906132d4565b610fda565b005b34801561053a57600080fd5b5061055560048036038101906105509190613267565b610ffa565b6040516105629190613bc1565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613567565b6110a8565b60405161059f9190613f1b565b60405180910390f35b3480156105b457600080fd5b506105bd611119565b6040516105ca9190613be3565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f5919061351e565b61112c565b005b34801561060857600080fd5b5061061161114e565b60405161061e9190613be3565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190613567565b611161565b60405161065b9190613afa565b60405180910390f35b34801561067057600080fd5b50610679611213565b6040516106869190613c19565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190613267565b6112a1565b6040516106c39190613f1b565b60405180910390f35b3480156106d857600080fd5b506106e1611359565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613567565b61136d565b005b34801561071857600080fd5b50610733600480360381019061072e9190613567565b61137f565b005b34801561074157600080fd5b5061074a611391565b6040516107579190613afa565b60405180910390f35b34801561076c57600080fd5b506107756113bb565b6040516107829190613c19565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613567565b61144d565b005b3480156107c057600080fd5b506107db60048036038101906107d691906133aa565b611927565b005b3480156107e957600080fd5b506107f261193d565b005b34801561080057600080fd5b50610809611962565b6040516108169190613bfe565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613327565b611988565b005b34801561085457600080fd5b5061085d6119ea565b60405161086a9190613f1b565b60405180910390f35b34801561087f57600080fd5b506108886119f0565b6040516108959190613c19565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190613567565b611a7e565b6040516108d29190613c19565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613567565b611bd7565b005b34801561091057600080fd5b50610919611be9565b6040516109269190613f1b565b60405180910390f35b34801561093b57600080fd5b506109566004803603810190610951919061351e565b611bef565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613294565b611c11565b60405161098c9190613be3565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b7919061351e565b611ca5565b005b3480156109ca57600080fd5b506109e560048036038101906109e09190613267565b611cc7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5a5750610a5982611d4b565b5b9050919050565b610a69611e2d565b80601360146101000a81548160ff02191690831515021790555050565b606060008054610a9590614261565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190614261565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b4982611eab565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610b9190614261565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90614261565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b6000610c1d82611161565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590613e9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cad611ef6565b73ffffffffffffffffffffffffffffffffffffffff161480610cdc5750610cdb81610cd6611ef6565b611c11565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613dbb565b60405180910390fd5b610d258383611efe565b505050565b600f5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60115481565b610d6c610d66611ef6565b82611fb7565b610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290613edb565b60405180910390fd5b610db683838361204c565b505050565b6000610dc6836112a1565b8210610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c3b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e68611e2d565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ebe9190613afa565b60206040518083038186803b158015610ed657600080fd5b505afa158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190613594565b6040518363ffffffff1660e01b8152600401610f2b929190613b98565b602060405180830381600087803b158015610f4557600080fd5b505af1158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190613457565b505050565b610f8a611e2d565b610f92611391565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd7573d6000803e3d6000fd5b50565b610ff583838360405180602001604052806000815250611988565b505050565b60606000611007836112a1565b905060008167ffffffffffffffff81111561102557611024614429565b5b6040519080825280602002602001820160405280156110535781602001602082028036833780820191505090505b50905060005b8281101561109d5761106b8582610dbb565b82828151811061107e5761107d6143fa565b5b6020026020010181815250508080611095906142c4565b915050611059565b508092505050919050565b60006110b2610d30565b82106110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613ebb565b60405180910390fd5b60088281548110611107576111066143fa565b5b90600052602060002001549050919050565b601360159054906101000a900460ff1681565b611134611e2d565b80600c908051906020019061114a92919061303c565b5050565b601360149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613e7b565b60405180910390fd5b80915050919050565b600c805461122090614261565b80601f016020809104026020016040519081016040528092919081815260200182805461124c90614261565b80156112995780601f1061126e57610100808354040283529160200191611299565b820191906000526020600020905b81548152906001019060200180831161127c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613d5b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611361611e2d565b61136b60006122b3565b565b611375611e2d565b8060118190555050565b611387611e2d565b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ca90614261565b80601f01602080910402602001604051908101604052809291908181526020018280546113f690614261565b80156114435780601f1061141857610100808354040283529160200191611443565b820191906000526020600020905b81548152906001019060200180831161142657829003601f168201915b5050505050905090565b6000611457610d30565b9050600082600f5461146991906140d5565b9050600083116114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613efb565b60405180910390fd5b60105483836114bd919061404e565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613d7b565b60405180910390fd5b611506611391565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061158c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561161e57600083116115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613efb565b60405180910390fd5b601054831115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613cfb565b60405180910390fd5b611896565b611626611391565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189557601360149054906101000a900460ff16156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90613e3b565b60405180910390fd5b6011548311156116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490613d9b565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506012548482611740919061404e565b1115611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613cdb565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161180293929190613b15565b602060405180830381600087803b15801561181c57600080fd5b505af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613457565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613dfb565b60405180910390fd5b505b5b6000600190505b83811161192157601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118f4906142c4565b919050555061190e338285611909919061404e565b612379565b8080611919906142c4565b91505061189d565b50505050565b611939611932611ef6565b8383612397565b5050565b611945611e2d565b6001601360156101000a81548160ff021916908315150217905550565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611999611993611ef6565b83611fb7565b6119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613edb565b60405180910390fd5b6119e484848484612504565b50505050565b60125481565b600d80546119fd90614261565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990614261565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505081565b6060611a8982612560565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613e5b565b60405180910390fd5b60001515601360159054906101000a900460ff1615151415611b7657600e8054611af190614261565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1d90614261565b8015611b6a5780601f10611b3f57610100808354040283529160200191611b6a565b820191906000526020600020905b815481529060010190602001808311611b4d57829003601f168201915b50505050509050611bd2565b6000611b806125cc565b90506000815111611ba05760405180602001604052806000815250611bce565b80611baa8461265e565b600d604051602001611bbe93929190613ac9565b6040516020818303038152906040525b9150505b919050565b611bdf611e2d565b8060128190555050565b60105481565b611bf7611e2d565b80600d9080519060200190611c0d92919061303c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cad611e2d565b80600e9080519060200190611cc392919061303c565b5050565b611ccf611e2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3690613c7b565b60405180910390fd5b611d48816122b3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e265750611e25826127bf565b5b9050919050565b611e35611ef6565b73ffffffffffffffffffffffffffffffffffffffff16611e53611391565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090613e1b565b60405180910390fd5b565b611eb481612560565b611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613e7b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7183611161565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611fc383611161565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200557506120048185611c11565b5b8061204357508373ffffffffffffffffffffffffffffffffffffffff1661202b84610b3e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661206c82611161565b73ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990613c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613d1b565b60405180910390fd5b61213d838383612829565b612148600082611efe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612198919061412f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ef919061404e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122ae83838361293d565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612393828260405180602001604052806000815250612942565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90613d3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124f79190613be3565b60405180910390a3505050565b61250f84848461204c565b61251b8484848461299d565b61255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255190613c5b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c80546125db90614261565b80601f016020809104026020016040519081016040528092919081815260200182805461260790614261565b80156126545780601f1061262957610100808354040283529160200191612654565b820191906000526020600020905b81548152906001019060200180831161263757829003601f168201915b5050505050905090565b606060008214156126a6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ba565b600082905060005b600082146126d85780806126c1906142c4565b915050600a826126d191906140a4565b91506126ae565b60008167ffffffffffffffff8111156126f4576126f3614429565b5b6040519080825280601f01601f1916602001820160405280156127265781602001600182028036833780820191505090505b5090505b600085146127b35760018261273f919061412f565b9150600a8561274e919061430d565b603061275a919061404e565b60f81b8183815181106127705761276f6143fa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ac91906140a4565b945061272a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b34565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b39565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b82565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cef565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612dc0565b5b5b505050565b505050565b61294c8383612e3f565b612959600084848461299d565b612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90613c5b565b60405180910390fd5b505050565b60006129be8473ffffffffffffffffffffffffffffffffffffffff16613019565b15612b27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e7611ef6565b8786866040518563ffffffff1660e01b8152600401612a099493929190613b4c565b602060405180830381600087803b158015612a2357600080fd5b505af1925050508015612a5457506040513d601f19601f82011682018060405250810190612a5191906134b1565b60015b612ad7573d8060008114612a84576040519150601f19603f3d011682016040523d82523d6000602084013e612a89565b606091505b50600081511415612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac690613c5b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b2c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8f846112a1565b612b99919061412f565b9050600060076000848152602001908152602001600020549050818114612c7e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d03919061412f565b9050600060096000848152602001908152602001600020549050600060088381548110612d3357612d326143fa565b5b906000526020600020015490508060088381548110612d5557612d546143fa565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612da457612da36143cb565b5b6001900381819060005260206000200160009055905550505050565b6000612dcb836112a1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea690613ddb565b60405180910390fd5b612eb881612560565b15612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613cbb565b60405180910390fd5b612f0460008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f54919061404e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130156000838361293d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461304890614261565b90600052602060002090601f01602090048101928261306a57600085556130b1565b82601f1061308357805160ff19168380011785556130b1565b828001600101855582156130b1579182015b828111156130b0578251825591602001919060010190613095565b5b5090506130be91906130c2565b5090565b5b808211156130db5760008160009055506001016130c3565b5090565b60006130f26130ed84613f5b565b613f36565b90508281526020810184848401111561310e5761310d61445d565b5b61311984828561421f565b509392505050565b600061313461312f84613f8c565b613f36565b9050828152602081018484840111156131505761314f61445d565b5b61315b84828561421f565b509392505050565b600081359050613172816149f4565b92915050565b60008135905061318781614a0b565b92915050565b60008151905061319c81614a0b565b92915050565b6000813590506131b181614a22565b92915050565b6000815190506131c681614a22565b92915050565b600082601f8301126131e1576131e0614458565b5b81356131f18482602086016130df565b91505092915050565b60008135905061320981614a39565b92915050565b600082601f83011261322457613223614458565b5b8135613234848260208601613121565b91505092915050565b60008135905061324c81614a50565b92915050565b60008151905061326181614a50565b92915050565b60006020828403121561327d5761327c614467565b5b600061328b84828501613163565b91505092915050565b600080604083850312156132ab576132aa614467565b5b60006132b985828601613163565b92505060206132ca85828601613163565b9150509250929050565b6000806000606084860312156132ed576132ec614467565b5b60006132fb86828701613163565b935050602061330c86828701613163565b925050604061331d8682870161323d565b9150509250925092565b6000806000806080858703121561334157613340614467565b5b600061334f87828801613163565b945050602061336087828801613163565b93505060406133718782880161323d565b925050606085013567ffffffffffffffff81111561339257613391614462565b5b61339e878288016131cc565b91505092959194509250565b600080604083850312156133c1576133c0614467565b5b60006133cf85828601613163565b92505060206133e085828601613178565b9150509250929050565b6000806040838503121561340157613400614467565b5b600061340f85828601613163565b92505060206134208582860161323d565b9150509250929050565b6000602082840312156134405761343f614467565b5b600061344e84828501613178565b91505092915050565b60006020828403121561346d5761346c614467565b5b600061347b8482850161318d565b91505092915050565b60006020828403121561349a57613499614467565b5b60006134a8848285016131a2565b91505092915050565b6000602082840312156134c7576134c6614467565b5b60006134d5848285016131b7565b91505092915050565b600080604083850312156134f5576134f4614467565b5b6000613503858286016131fa565b925050602061351485828601613163565b9150509250929050565b60006020828403121561353457613533614467565b5b600082013567ffffffffffffffff81111561355257613551614462565b5b61355e8482850161320f565b91505092915050565b60006020828403121561357d5761357c614467565b5b600061358b8482850161323d565b91505092915050565b6000602082840312156135aa576135a9614467565b5b60006135b884828501613252565b91505092915050565b60006135cd8383613aab565b60208301905092915050565b6135e281614163565b82525050565b60006135f382613fe2565b6135fd8185614010565b935061360883613fbd565b8060005b8381101561363957815161362088826135c1565b975061362b83614003565b92505060018101905061360c565b5085935050505092915050565b61364f81614175565b82525050565b600061366082613fed565b61366a8185614021565b935061367a81856020860161422e565b6136838161446c565b840191505092915050565b613697816141e9565b82525050565b60006136a882613ff8565b6136b28185614032565b93506136c281856020860161422e565b6136cb8161446c565b840191505092915050565b60006136e182613ff8565b6136eb8185614043565b93506136fb81856020860161422e565b80840191505092915050565b6000815461371481614261565b61371e8186614043565b94506001821660008114613739576001811461374a5761377d565b60ff1983168652818601935061377d565b61375385613fcd565b60005b8381101561377557815481890152600182019150602081019050613756565b838801955050505b50505092915050565b6000613793602b83614032565b915061379e8261447d565b604082019050919050565b60006137b6603283614032565b91506137c1826144cc565b604082019050919050565b60006137d9602683614032565b91506137e48261451b565b604082019050919050565b60006137fc602583614032565b91506138078261456a565b604082019050919050565b600061381f601c83614032565b915061382a826145b9565b602082019050919050565b6000613842601c83614032565b915061384d826145e2565b602082019050919050565b6000613865601183614032565b91506138708261460b565b602082019050919050565b6000613888602483614032565b915061389382614634565b604082019050919050565b60006138ab601983614032565b91506138b682614683565b602082019050919050565b60006138ce602983614032565b91506138d9826146ac565b604082019050919050565b60006138f1601683614032565b91506138fc826146fb565b602082019050919050565b6000613914602483614032565b915061391f82614724565b604082019050919050565b6000613937603e83614032565b915061394282614773565b604082019050919050565b600061395a602083614032565b9150613965826147c2565b602082019050919050565b600061397d601783614032565b9150613988826147eb565b602082019050919050565b60006139a0602083614032565b91506139ab82614814565b602082019050919050565b60006139c3601683614032565b91506139ce8261483d565b602082019050919050565b60006139e6602f83614032565b91506139f182614866565b604082019050919050565b6000613a09601883614032565b9150613a14826148b5565b602082019050919050565b6000613a2c602183614032565b9150613a37826148de565b604082019050919050565b6000613a4f602c83614032565b9150613a5a8261492d565b604082019050919050565b6000613a72602e83614032565b9150613a7d8261497c565b604082019050919050565b6000613a95601b83614032565b9150613aa0826149cb565b602082019050919050565b613ab4816141df565b82525050565b613ac3816141df565b82525050565b6000613ad582866136d6565b9150613ae182856136d6565b9150613aed8284613707565b9150819050949350505050565b6000602082019050613b0f60008301846135d9565b92915050565b6000606082019050613b2a60008301866135d9565b613b3760208301856135d9565b613b446040830184613aba565b949350505050565b6000608082019050613b6160008301876135d9565b613b6e60208301866135d9565b613b7b6040830185613aba565b8181036060830152613b8d8184613655565b905095945050505050565b6000604082019050613bad60008301856135d9565b613bba6020830184613aba565b9392505050565b60006020820190508181036000830152613bdb81846135e8565b905092915050565b6000602082019050613bf86000830184613646565b92915050565b6000602082019050613c13600083018461368e565b92915050565b60006020820190508181036000830152613c33818461369d565b905092915050565b60006020820190508181036000830152613c5481613786565b9050919050565b60006020820190508181036000830152613c74816137a9565b9050919050565b60006020820190508181036000830152613c94816137cc565b9050919050565b60006020820190508181036000830152613cb4816137ef565b9050919050565b60006020820190508181036000830152613cd481613812565b9050919050565b60006020820190508181036000830152613cf481613835565b9050919050565b60006020820190508181036000830152613d1481613858565b9050919050565b60006020820190508181036000830152613d348161387b565b9050919050565b60006020820190508181036000830152613d548161389e565b9050919050565b60006020820190508181036000830152613d74816138c1565b9050919050565b60006020820190508181036000830152613d94816138e4565b9050919050565b60006020820190508181036000830152613db481613907565b9050919050565b60006020820190508181036000830152613dd48161392a565b9050919050565b60006020820190508181036000830152613df48161394d565b9050919050565b60006020820190508181036000830152613e1481613970565b9050919050565b60006020820190508181036000830152613e3481613993565b9050919050565b60006020820190508181036000830152613e54816139b6565b9050919050565b60006020820190508181036000830152613e74816139d9565b9050919050565b60006020820190508181036000830152613e94816139fc565b9050919050565b60006020820190508181036000830152613eb481613a1f565b9050919050565b60006020820190508181036000830152613ed481613a42565b9050919050565b60006020820190508181036000830152613ef481613a65565b9050919050565b60006020820190508181036000830152613f1481613a88565b9050919050565b6000602082019050613f306000830184613aba565b92915050565b6000613f40613f51565b9050613f4c8282614293565b919050565b6000604051905090565b600067ffffffffffffffff821115613f7657613f75614429565b5b613f7f8261446c565b9050602081019050919050565b600067ffffffffffffffff821115613fa757613fa6614429565b5b613fb08261446c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614059826141df565b9150614064836141df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140995761409861433e565b5b828201905092915050565b60006140af826141df565b91506140ba836141df565b9250826140ca576140c961436d565b5b828204905092915050565b60006140e0826141df565b91506140eb836141df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141245761412361433e565b5b828202905092915050565b600061413a826141df565b9150614145836141df565b9250828210156141585761415761433e565b5b828203905092915050565b600061416e826141bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141b882614163565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006141f4826141fb565b9050919050565b60006142068261420d565b9050919050565b6000614218826141bf565b9050919050565b82818337600083830152505050565b60005b8381101561424c578082015181840152602081019050614231565b8381111561425b576000848401525b50505050565b6000600282049050600182168061427957607f821691505b6020821081141561428d5761428c61439c565b5b50919050565b61429c8261446c565b810181811067ffffffffffffffff821117156142bb576142ba614429565b5b80604052505050565b60006142cf826141df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143025761430161433e565b5b600182019050919050565b6000614318826141df565b9150614323836141df565b9250826143335761433261436d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4d617820537570706c79204d696e746564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f696e73756666696369656e7420584c4d20546f6b656e73000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6149fd81614163565b8114614a0857600080fd5b50565b614a1481614175565b8114614a1f57600080fd5b50565b614a2b81614181565b8114614a3657600080fd5b50565b614a42816141ad565b8114614a4d57600080fd5b50565b614a59816141df565b8114614a6457600080fd5b5056fea264697066735822122000fbef4e4f676679cf68a326b6fb8c15d4d028f8be5079f67fbd9f0eab22245d64736f6c6343000807003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000003ffdde70f128de8a5c8b116142d79889d6d5a5510000000000000000000000002fe332dfcca62432869d903d9507c370f5d4971b000000000000000000000000000000000000000000000000000000000000000848504f53463243490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006584c4d2056310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696770726163626c736f796968747632786436776266673670636676773764767a6c6e73683770796e6e78713763797435706934712f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696770726163626c736f796968747632786436776266673670636676773764767a6c6e73683770796e6e78713763797435706934712f00000000000000

Deployed Bytecode

0x60806040526004361061025c5760003560e01c80636352211e11610144578063b5706967116100b6578063d0eb26b01161007a578063d0eb26b0146108db578063d5abeb0114610904578063da3ef23f1461092f578063e985e9c514610958578063f2c4ce1e14610995578063f2fde38b146109be5761025c565b8063b5706967146107f4578063b88d4fde1461081f578063ba7d2c7614610848578063c668286214610873578063c87b56dd1461089e5761025c565b80637f767818116101085780637f7678181461070c5780638da5cb5b1461073557806395d89b4114610760578063a0712d681461078b578063a22cb465146107b4578063a475b5dd146107dd5761025c565b80636352211e146106275780636c0360eb1461066457806370a082311461068f578063715018a6146106cc5780637f00c7a6146106e35761025c565b8063239c70ae116101dd57806342842e0e116101a157806342842e0e14610505578063438b63001461052e5780634f6ccce71461056b57806351830227146105a857806355f804b3146105d35780635c975abb146105fc5761025c565b8063239c70ae1461044157806323b872dd1461046c5780632f745c59146104955780633ae7dc20146104d25780633ccfd60b146104fb5761025c565b8063081c8c4411610224578063081c8c441461035a578063095ea7b31461038557806313faede6146103ae57806318160ddd146103d957806318cae269146104045761025c565b806301ffc9a71461026157806302329a291461029e57806306fdde03146102c757806307b6fa30146102f2578063081812fc1461031d575b600080fd5b34801561026d57600080fd5b5061028860048036038101906102839190613484565b6109e7565b6040516102959190613be3565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c0919061342a565b610a61565b005b3480156102d357600080fd5b506102dc610a86565b6040516102e99190613c19565b60405180910390f35b3480156102fe57600080fd5b50610307610b18565b6040516103149190613afa565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190613567565b610b3e565b6040516103519190613afa565b60405180910390f35b34801561036657600080fd5b5061036f610b84565b60405161037c9190613c19565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a791906133ea565b610c12565b005b3480156103ba57600080fd5b506103c3610d2a565b6040516103d09190613f1b565b60405180910390f35b3480156103e557600080fd5b506103ee610d30565b6040516103fb9190613f1b565b60405180910390f35b34801561041057600080fd5b5061042b60048036038101906104269190613267565b610d3d565b6040516104389190613f1b565b60405180910390f35b34801561044d57600080fd5b50610456610d55565b6040516104639190613f1b565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906132d4565b610d5b565b005b3480156104a157600080fd5b506104bc60048036038101906104b791906133ea565b610dbb565b6040516104c99190613f1b565b60405180910390f35b3480156104de57600080fd5b506104f960048036038101906104f491906134de565b610e60565b005b610503610f82565b005b34801561051157600080fd5b5061052c600480360381019061052791906132d4565b610fda565b005b34801561053a57600080fd5b5061055560048036038101906105509190613267565b610ffa565b6040516105629190613bc1565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d9190613567565b6110a8565b60405161059f9190613f1b565b60405180910390f35b3480156105b457600080fd5b506105bd611119565b6040516105ca9190613be3565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f5919061351e565b61112c565b005b34801561060857600080fd5b5061061161114e565b60405161061e9190613be3565b60405180910390f35b34801561063357600080fd5b5061064e60048036038101906106499190613567565b611161565b60405161065b9190613afa565b60405180910390f35b34801561067057600080fd5b50610679611213565b6040516106869190613c19565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190613267565b6112a1565b6040516106c39190613f1b565b60405180910390f35b3480156106d857600080fd5b506106e1611359565b005b3480156106ef57600080fd5b5061070a60048036038101906107059190613567565b61136d565b005b34801561071857600080fd5b50610733600480360381019061072e9190613567565b61137f565b005b34801561074157600080fd5b5061074a611391565b6040516107579190613afa565b60405180910390f35b34801561076c57600080fd5b506107756113bb565b6040516107829190613c19565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad9190613567565b61144d565b005b3480156107c057600080fd5b506107db60048036038101906107d691906133aa565b611927565b005b3480156107e957600080fd5b506107f261193d565b005b34801561080057600080fd5b50610809611962565b6040516108169190613bfe565b60405180910390f35b34801561082b57600080fd5b5061084660048036038101906108419190613327565b611988565b005b34801561085457600080fd5b5061085d6119ea565b60405161086a9190613f1b565b60405180910390f35b34801561087f57600080fd5b506108886119f0565b6040516108959190613c19565b60405180910390f35b3480156108aa57600080fd5b506108c560048036038101906108c09190613567565b611a7e565b6040516108d29190613c19565b60405180910390f35b3480156108e757600080fd5b5061090260048036038101906108fd9190613567565b611bd7565b005b34801561091057600080fd5b50610919611be9565b6040516109269190613f1b565b60405180910390f35b34801561093b57600080fd5b506109566004803603810190610951919061351e565b611bef565b005b34801561096457600080fd5b5061097f600480360381019061097a9190613294565b611c11565b60405161098c9190613be3565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b7919061351e565b611ca5565b005b3480156109ca57600080fd5b506109e560048036038101906109e09190613267565b611cc7565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a5a5750610a5982611d4b565b5b9050919050565b610a69611e2d565b80601360146101000a81548160ff02191690831515021790555050565b606060008054610a9590614261565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac190614261565b8015610b0e5780601f10610ae357610100808354040283529160200191610b0e565b820191906000526020600020905b815481529060010190602001808311610af157829003601f168201915b5050505050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610b4982611eab565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600e8054610b9190614261565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90614261565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b6000610c1d82611161565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8590613e9b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cad611ef6565b73ffffffffffffffffffffffffffffffffffffffff161480610cdc5750610cdb81610cd6611ef6565b611c11565b5b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1290613dbb565b60405180910390fd5b610d258383611efe565b505050565b600f5481565b6000600880549050905090565b60146020528060005260406000206000915090505481565b60115481565b610d6c610d66611ef6565b82611fb7565b610dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da290613edb565b60405180910390fd5b610db683838361204c565b505050565b6000610dc6836112a1565b8210610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90613c3b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610e68611e2d565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ebe9190613afa565b60206040518083038186803b158015610ed657600080fd5b505afa158015610eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0e9190613594565b6040518363ffffffff1660e01b8152600401610f2b929190613b98565b602060405180830381600087803b158015610f4557600080fd5b505af1158015610f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7d9190613457565b505050565b610f8a611e2d565b610f92611391565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610fd7573d6000803e3d6000fd5b50565b610ff583838360405180602001604052806000815250611988565b505050565b60606000611007836112a1565b905060008167ffffffffffffffff81111561102557611024614429565b5b6040519080825280602002602001820160405280156110535781602001602082028036833780820191505090505b50905060005b8281101561109d5761106b8582610dbb565b82828151811061107e5761107d6143fa565b5b6020026020010181815250508080611095906142c4565b915050611059565b508092505050919050565b60006110b2610d30565b82106110f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ea90613ebb565b60405180910390fd5b60088281548110611107576111066143fa565b5b90600052602060002001549050919050565b601360159054906101000a900460ff1681565b611134611e2d565b80600c908051906020019061114a92919061303c565b5050565b601360149054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561120a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120190613e7b565b60405180910390fd5b80915050919050565b600c805461122090614261565b80601f016020809104026020016040519081016040528092919081815260200182805461124c90614261565b80156112995780601f1061126e57610100808354040283529160200191611299565b820191906000526020600020905b81548152906001019060200180831161127c57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130990613d5b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611361611e2d565b61136b60006122b3565b565b611375611e2d565b8060118190555050565b611387611e2d565b80600f8190555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546113ca90614261565b80601f01602080910402602001604051908101604052809291908181526020018280546113f690614261565b80156114435780601f1061141857610100808354040283529160200191611443565b820191906000526020600020905b81548152906001019060200180831161142657829003601f168201915b5050505050905090565b6000611457610d30565b9050600082600f5461146991906140d5565b9050600083116114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590613efb565b60405180910390fd5b60105483836114bd919061404e565b11156114fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f590613d7b565b60405180910390fd5b611506611391565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061158c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1561161e57600083116115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90613efb565b60405180910390fd5b601054831115611619576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161090613cfb565b60405180910390fd5b611896565b611626611391565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461189557601360149054906101000a900460ff16156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f90613e3b565b60405180910390fd5b6011548311156116ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e490613d9b565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506012548482611740919061404e565b1115611781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177890613cdb565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd33601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161180293929190613b15565b602060405180830381600087803b15801561181c57600080fd5b505af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613457565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613dfb565b60405180910390fd5b505b5b6000600190505b83811161192157601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118f4906142c4565b919050555061190e338285611909919061404e565b612379565b8080611919906142c4565b91505061189d565b50505050565b611939611932611ef6565b8383612397565b5050565b611945611e2d565b6001601360156101000a81548160ff021916908315150217905550565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611999611993611ef6565b83611fb7565b6119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90613edb565b60405180910390fd5b6119e484848484612504565b50505050565b60125481565b600d80546119fd90614261565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2990614261565b8015611a765780601f10611a4b57610100808354040283529160200191611a76565b820191906000526020600020905b815481529060010190602001808311611a5957829003601f168201915b505050505081565b6060611a8982612560565b611ac8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abf90613e5b565b60405180910390fd5b60001515601360159054906101000a900460ff1615151415611b7657600e8054611af190614261565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1d90614261565b8015611b6a5780601f10611b3f57610100808354040283529160200191611b6a565b820191906000526020600020905b815481529060010190602001808311611b4d57829003601f168201915b50505050509050611bd2565b6000611b806125cc565b90506000815111611ba05760405180602001604052806000815250611bce565b80611baa8461265e565b600d604051602001611bbe93929190613ac9565b6040516020818303038152906040525b9150505b919050565b611bdf611e2d565b8060128190555050565b60105481565b611bf7611e2d565b80600d9080519060200190611c0d92919061303c565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cad611e2d565b80600e9080519060200190611cc392919061303c565b5050565b611ccf611e2d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3690613c7b565b60405180910390fd5b611d48816122b3565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e1657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611e265750611e25826127bf565b5b9050919050565b611e35611ef6565b73ffffffffffffffffffffffffffffffffffffffff16611e53611391565b73ffffffffffffffffffffffffffffffffffffffff1614611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090613e1b565b60405180910390fd5b565b611eb481612560565b611ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eea90613e7b565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f7183611161565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080611fc383611161565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061200557506120048185611c11565b5b8061204357508373ffffffffffffffffffffffffffffffffffffffff1661202b84610b3e565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661206c82611161565b73ffffffffffffffffffffffffffffffffffffffff16146120c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b990613c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990613d1b565b60405180910390fd5b61213d838383612829565b612148600082611efe565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612198919061412f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546121ef919061404e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122ae83838361293d565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612393828260405180602001604052806000815250612942565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fd90613d3b565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124f79190613be3565b60405180910390a3505050565b61250f84848461204c565b61251b8484848461299d565b61255a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255190613c5b565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600c80546125db90614261565b80601f016020809104026020016040519081016040528092919081815260200182805461260790614261565b80156126545780601f1061262957610100808354040283529160200191612654565b820191906000526020600020905b81548152906001019060200180831161263757829003601f168201915b5050505050905090565b606060008214156126a6576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ba565b600082905060005b600082146126d85780806126c1906142c4565b915050600a826126d191906140a4565b91506126ae565b60008167ffffffffffffffff8111156126f4576126f3614429565b5b6040519080825280601f01601f1916602001820160405280156127265781602001600182028036833780820191505090505b5090505b600085146127b35760018261273f919061412f565b9150600a8561274e919061430d565b603061275a919061404e565b60f81b8183815181106127705761276f6143fa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127ac91906140a4565b945061272a565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612834838383612b34565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128775761287281612b39565b6128b6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146128b5576128b48382612b82565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f9576128f481612cef565b612938565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612937576129368282612dc0565b5b5b505050565b505050565b61294c8383612e3f565b612959600084848461299d565b612998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298f90613c5b565b60405180910390fd5b505050565b60006129be8473ffffffffffffffffffffffffffffffffffffffff16613019565b15612b27578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e7611ef6565b8786866040518563ffffffff1660e01b8152600401612a099493929190613b4c565b602060405180830381600087803b158015612a2357600080fd5b505af1925050508015612a5457506040513d601f19601f82011682018060405250810190612a5191906134b1565b60015b612ad7573d8060008114612a84576040519150601f19603f3d011682016040523d82523d6000602084013e612a89565b606091505b50600081511415612acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac690613c5b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b2c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612b8f846112a1565b612b99919061412f565b9050600060076000848152602001908152602001600020549050818114612c7e576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612d03919061412f565b9050600060096000848152602001908152602001600020549050600060088381548110612d3357612d326143fa565b5b906000526020600020015490508060088381548110612d5557612d546143fa565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612da457612da36143cb565b5b6001900381819060005260206000200160009055905550505050565b6000612dcb836112a1565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea690613ddb565b60405180910390fd5b612eb881612560565b15612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef90613cbb565b60405180910390fd5b612f0460008383612829565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f54919061404e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130156000838361293d565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461304890614261565b90600052602060002090601f01602090048101928261306a57600085556130b1565b82601f1061308357805160ff19168380011785556130b1565b828001600101855582156130b1579182015b828111156130b0578251825591602001919060010190613095565b5b5090506130be91906130c2565b5090565b5b808211156130db5760008160009055506001016130c3565b5090565b60006130f26130ed84613f5b565b613f36565b90508281526020810184848401111561310e5761310d61445d565b5b61311984828561421f565b509392505050565b600061313461312f84613f8c565b613f36565b9050828152602081018484840111156131505761314f61445d565b5b61315b84828561421f565b509392505050565b600081359050613172816149f4565b92915050565b60008135905061318781614a0b565b92915050565b60008151905061319c81614a0b565b92915050565b6000813590506131b181614a22565b92915050565b6000815190506131c681614a22565b92915050565b600082601f8301126131e1576131e0614458565b5b81356131f18482602086016130df565b91505092915050565b60008135905061320981614a39565b92915050565b600082601f83011261322457613223614458565b5b8135613234848260208601613121565b91505092915050565b60008135905061324c81614a50565b92915050565b60008151905061326181614a50565b92915050565b60006020828403121561327d5761327c614467565b5b600061328b84828501613163565b91505092915050565b600080604083850312156132ab576132aa614467565b5b60006132b985828601613163565b92505060206132ca85828601613163565b9150509250929050565b6000806000606084860312156132ed576132ec614467565b5b60006132fb86828701613163565b935050602061330c86828701613163565b925050604061331d8682870161323d565b9150509250925092565b6000806000806080858703121561334157613340614467565b5b600061334f87828801613163565b945050602061336087828801613163565b93505060406133718782880161323d565b925050606085013567ffffffffffffffff81111561339257613391614462565b5b61339e878288016131cc565b91505092959194509250565b600080604083850312156133c1576133c0614467565b5b60006133cf85828601613163565b92505060206133e085828601613178565b9150509250929050565b6000806040838503121561340157613400614467565b5b600061340f85828601613163565b92505060206134208582860161323d565b9150509250929050565b6000602082840312156134405761343f614467565b5b600061344e84828501613178565b91505092915050565b60006020828403121561346d5761346c614467565b5b600061347b8482850161318d565b91505092915050565b60006020828403121561349a57613499614467565b5b60006134a8848285016131a2565b91505092915050565b6000602082840312156134c7576134c6614467565b5b60006134d5848285016131b7565b91505092915050565b600080604083850312156134f5576134f4614467565b5b6000613503858286016131fa565b925050602061351485828601613163565b9150509250929050565b60006020828403121561353457613533614467565b5b600082013567ffffffffffffffff81111561355257613551614462565b5b61355e8482850161320f565b91505092915050565b60006020828403121561357d5761357c614467565b5b600061358b8482850161323d565b91505092915050565b6000602082840312156135aa576135a9614467565b5b60006135b884828501613252565b91505092915050565b60006135cd8383613aab565b60208301905092915050565b6135e281614163565b82525050565b60006135f382613fe2565b6135fd8185614010565b935061360883613fbd565b8060005b8381101561363957815161362088826135c1565b975061362b83614003565b92505060018101905061360c565b5085935050505092915050565b61364f81614175565b82525050565b600061366082613fed565b61366a8185614021565b935061367a81856020860161422e565b6136838161446c565b840191505092915050565b613697816141e9565b82525050565b60006136a882613ff8565b6136b28185614032565b93506136c281856020860161422e565b6136cb8161446c565b840191505092915050565b60006136e182613ff8565b6136eb8185614043565b93506136fb81856020860161422e565b80840191505092915050565b6000815461371481614261565b61371e8186614043565b94506001821660008114613739576001811461374a5761377d565b60ff1983168652818601935061377d565b61375385613fcd565b60005b8381101561377557815481890152600182019150602081019050613756565b838801955050505b50505092915050565b6000613793602b83614032565b915061379e8261447d565b604082019050919050565b60006137b6603283614032565b91506137c1826144cc565b604082019050919050565b60006137d9602683614032565b91506137e48261451b565b604082019050919050565b60006137fc602583614032565b91506138078261456a565b604082019050919050565b600061381f601c83614032565b915061382a826145b9565b602082019050919050565b6000613842601c83614032565b915061384d826145e2565b602082019050919050565b6000613865601183614032565b91506138708261460b565b602082019050919050565b6000613888602483614032565b915061389382614634565b604082019050919050565b60006138ab601983614032565b91506138b682614683565b602082019050919050565b60006138ce602983614032565b91506138d9826146ac565b604082019050919050565b60006138f1601683614032565b91506138fc826146fb565b602082019050919050565b6000613914602483614032565b915061391f82614724565b604082019050919050565b6000613937603e83614032565b915061394282614773565b604082019050919050565b600061395a602083614032565b9150613965826147c2565b602082019050919050565b600061397d601783614032565b9150613988826147eb565b602082019050919050565b60006139a0602083614032565b91506139ab82614814565b602082019050919050565b60006139c3601683614032565b91506139ce8261483d565b602082019050919050565b60006139e6602f83614032565b91506139f182614866565b604082019050919050565b6000613a09601883614032565b9150613a14826148b5565b602082019050919050565b6000613a2c602183614032565b9150613a37826148de565b604082019050919050565b6000613a4f602c83614032565b9150613a5a8261492d565b604082019050919050565b6000613a72602e83614032565b9150613a7d8261497c565b604082019050919050565b6000613a95601b83614032565b9150613aa0826149cb565b602082019050919050565b613ab4816141df565b82525050565b613ac3816141df565b82525050565b6000613ad582866136d6565b9150613ae182856136d6565b9150613aed8284613707565b9150819050949350505050565b6000602082019050613b0f60008301846135d9565b92915050565b6000606082019050613b2a60008301866135d9565b613b3760208301856135d9565b613b446040830184613aba565b949350505050565b6000608082019050613b6160008301876135d9565b613b6e60208301866135d9565b613b7b6040830185613aba565b8181036060830152613b8d8184613655565b905095945050505050565b6000604082019050613bad60008301856135d9565b613bba6020830184613aba565b9392505050565b60006020820190508181036000830152613bdb81846135e8565b905092915050565b6000602082019050613bf86000830184613646565b92915050565b6000602082019050613c13600083018461368e565b92915050565b60006020820190508181036000830152613c33818461369d565b905092915050565b60006020820190508181036000830152613c5481613786565b9050919050565b60006020820190508181036000830152613c74816137a9565b9050919050565b60006020820190508181036000830152613c94816137cc565b9050919050565b60006020820190508181036000830152613cb4816137ef565b9050919050565b60006020820190508181036000830152613cd481613812565b9050919050565b60006020820190508181036000830152613cf481613835565b9050919050565b60006020820190508181036000830152613d1481613858565b9050919050565b60006020820190508181036000830152613d348161387b565b9050919050565b60006020820190508181036000830152613d548161389e565b9050919050565b60006020820190508181036000830152613d74816138c1565b9050919050565b60006020820190508181036000830152613d94816138e4565b9050919050565b60006020820190508181036000830152613db481613907565b9050919050565b60006020820190508181036000830152613dd48161392a565b9050919050565b60006020820190508181036000830152613df48161394d565b9050919050565b60006020820190508181036000830152613e1481613970565b9050919050565b60006020820190508181036000830152613e3481613993565b9050919050565b60006020820190508181036000830152613e54816139b6565b9050919050565b60006020820190508181036000830152613e74816139d9565b9050919050565b60006020820190508181036000830152613e94816139fc565b9050919050565b60006020820190508181036000830152613eb481613a1f565b9050919050565b60006020820190508181036000830152613ed481613a42565b9050919050565b60006020820190508181036000830152613ef481613a65565b9050919050565b60006020820190508181036000830152613f1481613a88565b9050919050565b6000602082019050613f306000830184613aba565b92915050565b6000613f40613f51565b9050613f4c8282614293565b919050565b6000604051905090565b600067ffffffffffffffff821115613f7657613f75614429565b5b613f7f8261446c565b9050602081019050919050565b600067ffffffffffffffff821115613fa757613fa6614429565b5b613fb08261446c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614059826141df565b9150614064836141df565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140995761409861433e565b5b828201905092915050565b60006140af826141df565b91506140ba836141df565b9250826140ca576140c961436d565b5b828204905092915050565b60006140e0826141df565b91506140eb836141df565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141245761412361433e565b5b828202905092915050565b600061413a826141df565b9150614145836141df565b9250828210156141585761415761433e565b5b828203905092915050565b600061416e826141bf565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006141b882614163565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006141f4826141fb565b9050919050565b60006142068261420d565b9050919050565b6000614218826141bf565b9050919050565b82818337600083830152505050565b60005b8381101561424c578082015181840152602081019050614231565b8381111561425b576000848401525b50505050565b6000600282049050600182168061427957607f821691505b6020821081141561428d5761428c61439c565b5b50919050565b61429c8261446c565b810181811067ffffffffffffffff821117156142bb576142ba614429565b5b80604052505050565b60006142cf826141df565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156143025761430161433e565b5b600182019050919050565b6000614318826141df565b9150614323836141df565b9250826143335761433261436d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4d617820537570706c79204d696e746564000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f696e73756666696369656e7420584c4d20546f6b656e73000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b6149fd81614163565b8114614a0857600080fd5b50565b614a1481614175565b8114614a1f57600080fd5b50565b614a2b81614181565b8114614a3657600080fd5b50565b614a42816141ad565b8114614a4d57600080fd5b50565b614a59816141df565b8114614a6457600080fd5b5056fea264697066735822122000fbef4e4f676679cf68a326b6fb8c15d4d028f8be5079f67fbd9f0eab22245d64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000003ffdde70f128de8a5c8b116142d79889d6d5a5510000000000000000000000002fe332dfcca62432869d903d9507c370f5d4971b000000000000000000000000000000000000000000000000000000000000000848504f53463243490000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006584c4d2056310000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696770726163626c736f796968747632786436776266673670636676773764767a6c6e73683770796e6e78713763797435706934712f00000000000000000000000000000000000000000000000000000000000000000000000000005968747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166796265696770726163626c736f796968747632786436776266673670636676773764767a6c6e73683770796e6e78713763797435706934712f00000000000000

-----Decoded View---------------
Arg [0] : _name (string): HPOSF2CI
Arg [1] : _symbol (string): XLM V1
Arg [2] : _initBaseURI (string): https://nftstorage.link/ipfs/bafybeigpracblsoyihtv2xd6wbfg6pcfvw7dvzlnsh7pynnxq7cyt5pi4q/
Arg [3] : _initNotRevealedUri (string): https://nftstorage.link/ipfs/bafybeigpracblsoyihtv2xd6wbfg6pcfvw7dvzlnsh7pynnxq7cyt5pi4q/
Arg [4] : _xlmToken (address): 0x3ffDDe70f128de8A5c8b116142d79889d6d5a551
Arg [5] : _xlmDeployer (address): 0x2FE332DFCCA62432869d903D9507C370F5d4971b

-----Encoded View---------------
18 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [3] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [4] : 0000000000000000000000003ffdde70f128de8a5c8b116142d79889d6d5a551
Arg [5] : 0000000000000000000000002fe332dfcca62432869d903d9507c370f5d4971b
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [7] : 48504f5346324349000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [9] : 584c4d2056310000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [11] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [12] : 796265696770726163626c736f79696874763278643677626667367063667677
Arg [13] : 3764767a6c6e73683770796e6e78713763797435706934712f00000000000000
Arg [14] : 0000000000000000000000000000000000000000000000000000000000000059
Arg [15] : 68747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f626166
Arg [16] : 796265696770726163626c736f79696874763278643677626667367063667677
Arg [17] : 3764767a6c6e73683770796e6e78713763797435706934712f00000000000000


Deployed Bytecode Sourcemap

49113:4280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42918:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52938:73;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29652:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49484:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31165:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49293:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30682:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49326:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43558:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49578:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49405:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31865:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43226:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53136:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53022:106;;;:::i;:::-;;32272:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51303:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43748:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49545:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52578:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49515:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29363:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49225:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29094:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8181:103;;;;;;;;;;;;;:::i;:::-;;52454:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52361:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7533;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29821:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50158:1135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31408:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52176:65;;;;;;;;;;;;;:::i;:::-;;49194:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32528:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49442:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49251;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51657:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52249:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49370:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52682:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31634:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52812:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8439:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42918:224;43020:4;43059:35;43044:50;;;:11;:50;;;;:90;;;;43098:36;43122:11;43098:23;:36::i;:::-;43044:90;43037:97;;42918:224;;;:::o;52938:73::-;7419:13;:11;:13::i;:::-;52999:6:::1;52990;;:15;;;;;;;;;;;;;;;;;;52938:73:::0;:::o;29652:100::-;29706:13;29739:5;29732:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29652:100;:::o;49484:26::-;;;;;;;;;;;;;:::o;31165:171::-;31241:7;31261:23;31276:7;31261:14;:23::i;:::-;31304:15;:24;31320:7;31304:24;;;;;;;;;;;;;;;;;;;;;31297:31;;31165:171;;;:::o;49293:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;30682:417::-;30763:13;30779:23;30794:7;30779:14;:23::i;:::-;30763:39;;30827:5;30821:11;;:2;:11;;;;30813:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30921:5;30905:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30930:37;30947:5;30954:12;:10;:12::i;:::-;30930:16;:37::i;:::-;30905:62;30883:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;31070:21;31079:2;31083:7;31070:8;:21::i;:::-;30752:347;30682:417;;:::o;49326:39::-;;;;:::o;43558:113::-;43619:7;43646:10;:17;;;;43639:24;;43558:113;:::o;49578:55::-;;;;;;;;;;;;;;;;;:::o;49405:32::-;;;;:::o;31865:336::-;32060:41;32079:12;:10;:12::i;:::-;32093:7;32060:18;:41::i;:::-;32052:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32165:28;32175:4;32181:2;32185:7;32165:9;:28::i;:::-;31865:336;;;:::o;43226:256::-;43323:7;43359:23;43376:5;43359:16;:23::i;:::-;43351:5;:31;43343:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;43448:12;:19;43461:5;43448:19;;;;;;;;;;;;;;;:26;43468:5;43448:26;;;;;;;;;;;;43441:33;;43226:256;;;;:::o;53136:248::-;7419:13;:11;:13::i;:::-;53261::::1;:22;;;53298:14;53327:13;:23;;;53359:4;53327:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53261:115;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53136:248:::0;;:::o;53022:106::-;7419:13;:11;:13::i;:::-;53082:7:::1;:5;:7::i;:::-;53074:25;;:48;53100:21;53074:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;53022:106::o:0;32272:185::-;32410:39;32427:4;32433:2;32437:7;32410:39;;;;;;;;;;;;:16;:39::i;:::-;32272:185;;;:::o;51303:348::-;51378:16;51406:23;51432:17;51442:6;51432:9;:17::i;:::-;51406:43;;51456:25;51498:15;51484:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51456:58;;51526:9;51521:103;51541:15;51537:1;:19;51521:103;;;51586:30;51606:6;51614:1;51586:19;:30::i;:::-;51572:8;51581:1;51572:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;51558:3;;;;;:::i;:::-;;;;51521:103;;;;51637:8;51630:15;;;;51303:348;;;:::o;43748:233::-;43823:7;43859:30;:28;:30::i;:::-;43851:5;:38;43843:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;43956:10;43967:5;43956:17;;;;;;;;:::i;:::-;;;;;;;;;;43949:24;;43748:233;;;:::o;49545:28::-;;;;;;;;;;;;;:::o;52578:98::-;7419:13;:11;:13::i;:::-;52659:11:::1;52649:7;:21;;;;;;;;;;;;:::i;:::-;;52578:98:::0;:::o;49515:25::-;;;;;;;;;;;;;:::o;29363:222::-;29435:7;29455:13;29471:7;:16;29479:7;29471:16;;;;;;;;;;;;;;;;;;;;;29455:32;;29523:1;29506:19;;:5;:19;;;;29498:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29572:5;29565:12;;;29363:222;;;:::o;49225:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29094:207::-;29166:7;29211:1;29194:19;;:5;:19;;;;29186:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29277:9;:16;29287:5;29277:16;;;;;;;;;;;;;;;;29270:23;;29094:207;;;:::o;8181:103::-;7419:13;:11;:13::i;:::-;8246:30:::1;8273:1;8246:18;:30::i;:::-;8181:103::o:0;52454:116::-;7419:13;:11;:13::i;:::-;52547:17:::1;52531:13;:33;;;;52454:116:::0;:::o;52361:87::-;7419:13;:11;:13::i;:::-;52434:8:::1;52427:4;:15;;;;52361:87:::0;:::o;7533:::-;7579:7;7606:6;;;;;;;;;;;7599:13;;7533:87;:::o;29821:104::-;29877:13;29910:7;29903:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29821:104;:::o;50158:1135::-;50209:14;50226:13;:11;:13::i;:::-;50209:30;;50247:15;50272:11;50265:4;;:18;;;;:::i;:::-;50247:36;;50312:1;50298:11;:15;50290:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50384:9;;50369:11;50360:6;:20;;;;:::i;:::-;:33;;50352:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50449:7;:5;:7::i;:::-;50435:21;;:10;:21;;;:50;;;;50474:11;;;;;;;;;;;50460:25;;:10;:25;;;50435:50;50431:695;;;50523:1;50509:11;:15;50501:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50593:9;;50578:11;:24;;50570:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;50431:695;;;50669:7;:5;:7::i;:::-;50655:21;;:10;:21;;;50651:475;;50702:6;;;;;;;;;;;50701:7;50693:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;50773:13;;50758:11;:28;;50750:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;50842:24;50869:20;:32;50890:10;50869:32;;;;;;;;;;;;;;;;50842:59;;50958:18;;50943:11;50924:16;:30;;;;:::i;:::-;:52;;50916:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;51035:8;;;;;;;;;;;:21;;;51057:10;51069:11;;;;;;;;;;;51082:7;51035:55;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51027:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;50678:448;50651:475;50431:695;51150:9;51162:1;51150:13;;51145:136;51170:11;51165:1;:16;51145:136;;51197:20;:32;51218:10;51197:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;51240:33;51250:10;51271:1;51262:6;:10;;;;:::i;:::-;51240:9;:33::i;:::-;51183:3;;;;;:::i;:::-;;;;51145:136;;;;50202:1091;;50158:1135;:::o;31408:155::-;31503:52;31522:12;:10;:12::i;:::-;31536:8;31546;31503:18;:52::i;:::-;31408:155;;:::o;52176:65::-;7419:13;:11;:13::i;:::-;52231:4:::1;52220:8;;:15;;;;;;;;;;;;;;;;;;52176:65::o:0;49194:22::-;;;;;;;;;;;;;:::o;32528:323::-;32702:41;32721:12;:10;:12::i;:::-;32735:7;32702:18;:41::i;:::-;32694:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;32805:38;32819:4;32825:2;32829:7;32838:4;32805:13;:38::i;:::-;32528:323;;;;:::o;49442:37::-;;;;:::o;49251:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51657:497::-;51755:13;51796:16;51804:7;51796;:16::i;:::-;51780:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;51905:5;51893:17;;:8;;;;;;;;;;;:17;;;51890:62;;;51930:14;51923:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51890:62;51960:28;51991:10;:8;:10::i;:::-;51960:41;;52046:1;52021:14;52015:28;:32;:133;;;;;;;;;;;;;;;;;52083:14;52099:18;:7;:16;:18::i;:::-;52119:13;52066:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;52015:133;52008:140;;;51657:497;;;;:::o;52249:104::-;7419:13;:11;:13::i;:::-;52341:6:::1;52320:18;:27;;;;52249:104:::0;:::o;49370:30::-;;;;:::o;52682:122::-;7419:13;:11;:13::i;:::-;52781:17:::1;52765:13;:33;;;;;;;;;;;;:::i;:::-;;52682:122:::0;:::o;31634:164::-;31731:4;31755:18;:25;31774:5;31755:25;;;;;;;;;;;;;;;:35;31781:8;31755:35;;;;;;;;;;;;;;;;;;;;;;;;;31748:42;;31634:164;;;;:::o;52812:120::-;7419:13;:11;:13::i;:::-;52911:15:::1;52894:14;:32;;;;;;;;;;;;:::i;:::-;;52812:120:::0;:::o;8439:201::-;7419:13;:11;:13::i;:::-;8548:1:::1;8528:22;;:8;:22;;;;8520:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8604:28;8623:8;8604:18;:28::i;:::-;8439:201:::0;:::o;28725:305::-;28827:4;28879:25;28864:40;;;:11;:40;;;;:105;;;;28936:33;28921:48;;;:11;:48;;;;28864:105;:158;;;;28986:36;29010:11;28986:23;:36::i;:::-;28864:158;28844:178;;28725:305;;;:::o;7698:132::-;7773:12;:10;:12::i;:::-;7762:23;;:7;:5;:7::i;:::-;:23;;;7754:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7698:132::o;39140:135::-;39222:16;39230:7;39222;:16::i;:::-;39214:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39140:135;:::o;6084:98::-;6137:7;6164:10;6157:17;;6084:98;:::o;38419:174::-;38521:2;38494:15;:24;38510:7;38494:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38577:7;38573:2;38539:46;;38548:23;38563:7;38548:14;:23::i;:::-;38539:46;;;;;;;;;;;;38419:174;;:::o;34652:264::-;34745:4;34762:13;34778:23;34793:7;34778:14;:23::i;:::-;34762:39;;34831:5;34820:16;;:7;:16;;;:52;;;;34840:32;34857:5;34864:7;34840:16;:32::i;:::-;34820:52;:87;;;;34900:7;34876:31;;:20;34888:7;34876:11;:20::i;:::-;:31;;;34820:87;34812:96;;;34652:264;;;;:::o;37675:625::-;37834:4;37807:31;;:23;37822:7;37807:14;:23::i;:::-;:31;;;37799:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37913:1;37899:16;;:2;:16;;;;37891:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37969:39;37990:4;37996:2;38000:7;37969:20;:39::i;:::-;38073:29;38090:1;38094:7;38073:8;:29::i;:::-;38134:1;38115:9;:15;38125:4;38115:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38163:1;38146:9;:13;38156:2;38146:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38194:2;38175:7;:16;38183:7;38175:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38233:7;38229:2;38214:27;;38223:4;38214:27;;;;;;;;;;;;38254:38;38274:4;38280:2;38284:7;38254:19;:38::i;:::-;37675:625;;;:::o;8800:191::-;8874:16;8893:6;;;;;;;;;;;8874:25;;8919:8;8910:6;;:17;;;;;;;;;;;;;;;;;;8974:8;8943:40;;8964:8;8943:40;;;;;;;;;;;;8863:128;8800:191;:::o;35258:110::-;35334:26;35344:2;35348:7;35334:26;;;;;;;;;;;;:9;:26::i;:::-;35258:110;;:::o;38736:315::-;38891:8;38882:17;;:5;:17;;;;38874:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38978:8;38940:18;:25;38959:5;38940:25;;;;;;;;;;;;;;;:35;38966:8;38940:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39024:8;39002:41;;39017:5;39002:41;;;39034:8;39002:41;;;;;;:::i;:::-;;;;;;;;38736:315;;;:::o;33732:313::-;33888:28;33898:4;33904:2;33908:7;33888:9;:28::i;:::-;33935:47;33958:4;33964:2;33968:7;33977:4;33935:22;:47::i;:::-;33927:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;33732:313;;;;:::o;34358:127::-;34423:4;34475:1;34447:30;;:7;:16;34455:7;34447:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34440:37;;34358:127;;;:::o;50037:102::-;50097:13;50126:7;50119:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50037:102;:::o;3338:723::-;3394:13;3624:1;3615:5;:10;3611:53;;;3642:10;;;;;;;;;;;;;;;;;;;;;3611:53;3674:12;3689:5;3674:20;;3705:14;3730:78;3745:1;3737:4;:9;3730:78;;3763:8;;;;;:::i;:::-;;;;3794:2;3786:10;;;;;:::i;:::-;;;3730:78;;;3818:19;3850:6;3840:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3818:39;;3868:154;3884:1;3875:5;:10;3868:154;;3912:1;3902:11;;;;;:::i;:::-;;;3979:2;3971:5;:10;;;;:::i;:::-;3958:2;:24;;;;:::i;:::-;3945:39;;3928:6;3935;3928:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4008:2;3999:11;;;;;:::i;:::-;;;3868:154;;;4046:6;4032:21;;;;;3338:723;;;;:::o;20387:157::-;20472:4;20511:25;20496:40;;;:11;:40;;;;20489:47;;20387:157;;;:::o;44594:589::-;44738:45;44765:4;44771:2;44775:7;44738:26;:45::i;:::-;44816:1;44800:18;;:4;:18;;;44796:187;;;44835:40;44867:7;44835:31;:40::i;:::-;44796:187;;;44905:2;44897:10;;:4;:10;;;44893:90;;44924:47;44957:4;44963:7;44924:32;:47::i;:::-;44893:90;44796:187;45011:1;44997:16;;:2;:16;;;44993:183;;;45030:45;45067:7;45030:36;:45::i;:::-;44993:183;;;45103:4;45097:10;;:2;:10;;;45093:83;;45124:40;45152:2;45156:7;45124:27;:40::i;:::-;45093:83;44993:183;44594:589;;;:::o;41775:125::-;;;;:::o;35595:319::-;35724:18;35730:2;35734:7;35724:5;:18::i;:::-;35775:53;35806:1;35810:2;35814:7;35823:4;35775:22;:53::i;:::-;35753:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;35595:319;;;:::o;39839:853::-;39993:4;40014:15;:2;:13;;;:15::i;:::-;40010:675;;;40066:2;40050:36;;;40087:12;:10;:12::i;:::-;40101:4;40107:7;40116:4;40050:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40046:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40308:1;40291:6;:13;:18;40287:328;;;40334:60;;;;;;;;;;:::i;:::-;;;;;;;;40287:328;40565:6;40559:13;40550:6;40546:2;40542:15;40535:38;40046:584;40182:41;;;40172:51;;;:6;:51;;;;40165:58;;;;;40010:675;40669:4;40662:11;;39839:853;;;;;;;:::o;41264:126::-;;;;:::o;45906:164::-;46010:10;:17;;;;45983:15;:24;45999:7;45983:24;;;;;;;;;;;:44;;;;46038:10;46054:7;46038:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45906:164;:::o;46697:988::-;46963:22;47013:1;46988:22;47005:4;46988:16;:22::i;:::-;:26;;;;:::i;:::-;46963:51;;47025:18;47046:17;:26;47064:7;47046:26;;;;;;;;;;;;47025:47;;47193:14;47179:10;:28;47175:328;;47224:19;47246:12;:18;47259:4;47246:18;;;;;;;;;;;;;;;:34;47265:14;47246:34;;;;;;;;;;;;47224:56;;47330:11;47297:12;:18;47310:4;47297:18;;;;;;;;;;;;;;;:30;47316:10;47297:30;;;;;;;;;;;:44;;;;47447:10;47414:17;:30;47432:11;47414:30;;;;;;;;;;;:43;;;;47209:294;47175:328;47599:17;:26;47617:7;47599:26;;;;;;;;;;;47592:33;;;47643:12;:18;47656:4;47643:18;;;;;;;;;;;;;;;:34;47662:14;47643:34;;;;;;;;;;;47636:41;;;46778:907;;46697:988;;:::o;47980:1079::-;48233:22;48278:1;48258:10;:17;;;;:21;;;;:::i;:::-;48233:46;;48290:18;48311:15;:24;48327:7;48311:24;;;;;;;;;;;;48290:45;;48662:19;48684:10;48695:14;48684:26;;;;;;;;:::i;:::-;;;;;;;;;;48662:48;;48748:11;48723:10;48734;48723:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;48859:10;48828:15;:28;48844:11;48828:28;;;;;;;;;;;:41;;;;49000:15;:24;49016:7;49000:24;;;;;;;;;;;48993:31;;;49035:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48051:1008;;;47980:1079;:::o;45484:221::-;45569:14;45586:20;45603:2;45586:16;:20::i;:::-;45569:37;;45644:7;45617:12;:16;45630:2;45617:16;;;;;;;;;;;;;;;:24;45634:6;45617:24;;;;;;;;;;;:34;;;;45691:6;45662:17;:26;45680:7;45662:26;;;;;;;;;;;:35;;;;45558:147;45484:221;;:::o;36250:439::-;36344:1;36330:16;;:2;:16;;;;36322:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36403:16;36411:7;36403;:16::i;:::-;36402:17;36394:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36465:45;36494:1;36498:2;36502:7;36465:20;:45::i;:::-;36540:1;36523:9;:13;36533:2;36523:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36571:2;36552:7;:16;36560:7;36552:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36616:7;36612:2;36591:33;;36608:1;36591:33;;;;;;;;;;;;36637:44;36665:1;36669:2;36673:7;36637:19;:44::i;:::-;36250:439;;:::o;10231:326::-;10291:4;10548:1;10526:7;:19;;;:23;10519:30;;10231:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1915:165::-;1974:5;2012:6;1999:20;1990:29;;2028:46;2068:5;2028:46;:::i;:::-;1915:165;;;;:::o;2100:340::-;2156:5;2205:3;2198:4;2190:6;2186:17;2182:27;2172:122;;2213:79;;:::i;:::-;2172:122;2330:6;2317:20;2355:79;2430:3;2422:6;2415:4;2407:6;2403:17;2355:79;:::i;:::-;2346:88;;2162:278;2100:340;;;;:::o;2446:139::-;2492:5;2530:6;2517:20;2508:29;;2546:33;2573:5;2546:33;:::i;:::-;2446:139;;;;:::o;2591:143::-;2648:5;2679:6;2673:13;2664:22;;2695:33;2722:5;2695:33;:::i;:::-;2591:143;;;;:::o;2740:329::-;2799:6;2848:2;2836:9;2827:7;2823:23;2819:32;2816:119;;;2854:79;;:::i;:::-;2816:119;2974:1;2999:53;3044:7;3035:6;3024:9;3020:22;2999:53;:::i;:::-;2989:63;;2945:117;2740:329;;;;:::o;3075:474::-;3143:6;3151;3200:2;3188:9;3179:7;3175:23;3171:32;3168:119;;;3206:79;;:::i;:::-;3168:119;3326:1;3351:53;3396:7;3387:6;3376:9;3372:22;3351:53;:::i;:::-;3341:63;;3297:117;3453:2;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3424:118;3075:474;;;;;:::o;3555:619::-;3632:6;3640;3648;3697:2;3685:9;3676:7;3672:23;3668:32;3665:119;;;3703:79;;:::i;:::-;3665:119;3823:1;3848:53;3893:7;3884:6;3873:9;3869:22;3848:53;:::i;:::-;3838:63;;3794:117;3950:2;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3921:118;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;3555:619;;;;;:::o;4180:943::-;4275:6;4283;4291;4299;4348:3;4336:9;4327:7;4323:23;4319:33;4316:120;;;4355:79;;:::i;:::-;4316:120;4475:1;4500:53;4545:7;4536:6;4525:9;4521:22;4500:53;:::i;:::-;4490:63;;4446:117;4602:2;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4573:118;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4886:2;4875:9;4871:18;4858:32;4917:18;4909:6;4906:30;4903:117;;;4939:79;;:::i;:::-;4903:117;5044:62;5098:7;5089:6;5078:9;5074:22;5044:62;:::i;:::-;5034:72;;4829:287;4180:943;;;;;;;:::o;5129:468::-;5194:6;5202;5251:2;5239:9;5230:7;5226:23;5222:32;5219:119;;;5257:79;;:::i;:::-;5219:119;5377:1;5402:53;5447:7;5438:6;5427:9;5423:22;5402:53;:::i;:::-;5392:63;;5348:117;5504:2;5530:50;5572:7;5563:6;5552:9;5548:22;5530:50;:::i;:::-;5520:60;;5475:115;5129:468;;;;;:::o;5603:474::-;5671:6;5679;5728:2;5716:9;5707:7;5703:23;5699:32;5696:119;;;5734:79;;:::i;:::-;5696:119;5854:1;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5825:117;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5603:474;;;;;:::o;6083:323::-;6139:6;6188:2;6176:9;6167:7;6163:23;6159:32;6156:119;;;6194:79;;:::i;:::-;6156:119;6314:1;6339:50;6381:7;6372:6;6361:9;6357:22;6339:50;:::i;:::-;6329:60;;6285:114;6083:323;;;;:::o;6412:345::-;6479:6;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:61;6732:7;6723:6;6712:9;6708:22;6679:61;:::i;:::-;6669:71;;6625:125;6412:345;;;;:::o;6763:327::-;6821:6;6870:2;6858:9;6849:7;6845:23;6841:32;6838:119;;;6876:79;;:::i;:::-;6838:119;6996:1;7021:52;7065:7;7056:6;7045:9;7041:22;7021:52;:::i;:::-;7011:62;;6967:116;6763:327;;;;:::o;7096:349::-;7165:6;7214:2;7202:9;7193:7;7189:23;7185:32;7182:119;;;7220:79;;:::i;:::-;7182:119;7340:1;7365:63;7420:7;7411:6;7400:9;7396:22;7365:63;:::i;:::-;7355:73;;7311:127;7096:349;;;;:::o;7451:500::-;7532:6;7540;7589:2;7577:9;7568:7;7564:23;7560:32;7557:119;;;7595:79;;:::i;:::-;7557:119;7715:1;7740:66;7798:7;7789:6;7778:9;7774:22;7740:66;:::i;:::-;7730:76;;7686:130;7855:2;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7826:118;7451:500;;;;;:::o;7957:509::-;8026:6;8075:2;8063:9;8054:7;8050:23;8046:32;8043:119;;;8081:79;;:::i;:::-;8043:119;8229:1;8218:9;8214:17;8201:31;8259:18;8251:6;8248:30;8245:117;;;8281:79;;:::i;:::-;8245:117;8386:63;8441:7;8432:6;8421:9;8417:22;8386:63;:::i;:::-;8376:73;;8172:287;7957:509;;;;:::o;8472:329::-;8531:6;8580:2;8568:9;8559:7;8555:23;8551:32;8548:119;;;8586:79;;:::i;:::-;8548:119;8706:1;8731:53;8776:7;8767:6;8756:9;8752:22;8731:53;:::i;:::-;8721:63;;8677:117;8472:329;;;;:::o;8807:351::-;8877:6;8926:2;8914:9;8905:7;8901:23;8897:32;8894:119;;;8932:79;;:::i;:::-;8894:119;9052:1;9077:64;9133:7;9124:6;9113:9;9109:22;9077:64;:::i;:::-;9067:74;;9023:128;8807:351;;;;:::o;9164:179::-;9233:10;9254:46;9296:3;9288:6;9254:46;:::i;:::-;9332:4;9327:3;9323:14;9309:28;;9164:179;;;;:::o;9349:118::-;9436:24;9454:5;9436:24;:::i;:::-;9431:3;9424:37;9349:118;;:::o;9503:732::-;9622:3;9651:54;9699:5;9651:54;:::i;:::-;9721:86;9800:6;9795:3;9721:86;:::i;:::-;9714:93;;9831:56;9881:5;9831:56;:::i;:::-;9910:7;9941:1;9926:284;9951:6;9948:1;9945:13;9926:284;;;10027:6;10021:13;10054:63;10113:3;10098:13;10054:63;:::i;:::-;10047:70;;10140:60;10193:6;10140:60;:::i;:::-;10130:70;;9986:224;9973:1;9970;9966:9;9961:14;;9926:284;;;9930:14;10226:3;10219:10;;9627:608;;;9503:732;;;;:::o;10241:109::-;10322:21;10337:5;10322:21;:::i;:::-;10317:3;10310:34;10241:109;;:::o;10356:360::-;10442:3;10470:38;10502:5;10470:38;:::i;:::-;10524:70;10587:6;10582:3;10524:70;:::i;:::-;10517:77;;10603:52;10648:6;10643:3;10636:4;10629:5;10625:16;10603:52;:::i;:::-;10680:29;10702:6;10680:29;:::i;:::-;10675:3;10671:39;10664:46;;10446:270;10356:360;;;;:::o;10722:157::-;10822:50;10866:5;10822:50;:::i;:::-;10817:3;10810:63;10722:157;;:::o;10885:364::-;10973:3;11001:39;11034:5;11001:39;:::i;:::-;11056:71;11120:6;11115:3;11056:71;:::i;:::-;11049:78;;11136:52;11181:6;11176:3;11169:4;11162:5;11158:16;11136:52;:::i;:::-;11213:29;11235:6;11213:29;:::i;:::-;11208:3;11204:39;11197:46;;10977:272;10885:364;;;;:::o;11255:377::-;11361:3;11389:39;11422:5;11389:39;:::i;:::-;11444:89;11526:6;11521:3;11444:89;:::i;:::-;11437:96;;11542:52;11587:6;11582:3;11575:4;11568:5;11564:16;11542:52;:::i;:::-;11619:6;11614:3;11610:16;11603:23;;11365:267;11255:377;;;;:::o;11662:845::-;11765:3;11802:5;11796:12;11831:36;11857:9;11831:36;:::i;:::-;11883:89;11965:6;11960:3;11883:89;:::i;:::-;11876:96;;12003:1;11992:9;11988:17;12019:1;12014:137;;;;12165:1;12160:341;;;;11981:520;;12014:137;12098:4;12094:9;12083;12079:25;12074:3;12067:38;12134:6;12129:3;12125:16;12118:23;;12014:137;;12160:341;12227:38;12259:5;12227:38;:::i;:::-;12287:1;12301:154;12315:6;12312:1;12309:13;12301:154;;;12389:7;12383:14;12379:1;12374:3;12370:11;12363:35;12439:1;12430:7;12426:15;12415:26;;12337:4;12334:1;12330:12;12325:17;;12301:154;;;12484:6;12479:3;12475:16;12468:23;;12167:334;;11981:520;;11769:738;;11662:845;;;;:::o;12513:366::-;12655:3;12676:67;12740:2;12735:3;12676:67;:::i;:::-;12669:74;;12752:93;12841:3;12752:93;:::i;:::-;12870:2;12865:3;12861:12;12854:19;;12513:366;;;:::o;12885:::-;13027:3;13048:67;13112:2;13107:3;13048:67;:::i;:::-;13041:74;;13124:93;13213:3;13124:93;:::i;:::-;13242:2;13237:3;13233:12;13226:19;;12885:366;;;:::o;13257:::-;13399:3;13420:67;13484:2;13479:3;13420:67;:::i;:::-;13413:74;;13496:93;13585:3;13496:93;:::i;:::-;13614:2;13609:3;13605:12;13598:19;;13257:366;;;:::o;13629:::-;13771:3;13792:67;13856:2;13851:3;13792:67;:::i;:::-;13785:74;;13868:93;13957:3;13868:93;:::i;:::-;13986:2;13981:3;13977:12;13970:19;;13629:366;;;:::o;14001:::-;14143:3;14164:67;14228:2;14223:3;14164:67;:::i;:::-;14157:74;;14240:93;14329:3;14240:93;:::i;:::-;14358:2;14353:3;14349:12;14342:19;;14001:366;;;:::o;14373:::-;14515:3;14536:67;14600:2;14595:3;14536:67;:::i;:::-;14529:74;;14612:93;14701:3;14612:93;:::i;:::-;14730:2;14725:3;14721:12;14714:19;;14373:366;;;:::o;14745:::-;14887:3;14908:67;14972:2;14967:3;14908:67;:::i;:::-;14901:74;;14984:93;15073:3;14984:93;:::i;:::-;15102:2;15097:3;15093:12;15086:19;;14745:366;;;:::o;15117:::-;15259:3;15280:67;15344:2;15339:3;15280:67;:::i;:::-;15273:74;;15356:93;15445:3;15356:93;:::i;:::-;15474:2;15469:3;15465:12;15458:19;;15117:366;;;:::o;15489:::-;15631:3;15652:67;15716:2;15711:3;15652:67;:::i;:::-;15645:74;;15728:93;15817:3;15728:93;:::i;:::-;15846:2;15841:3;15837:12;15830:19;;15489:366;;;:::o;15861:::-;16003:3;16024:67;16088:2;16083:3;16024:67;:::i;:::-;16017:74;;16100:93;16189:3;16100:93;:::i;:::-;16218:2;16213:3;16209:12;16202:19;;15861:366;;;:::o;16233:::-;16375:3;16396:67;16460:2;16455:3;16396:67;:::i;:::-;16389:74;;16472:93;16561:3;16472:93;:::i;:::-;16590:2;16585:3;16581:12;16574:19;;16233:366;;;:::o;16605:::-;16747:3;16768:67;16832:2;16827:3;16768:67;:::i;:::-;16761:74;;16844:93;16933:3;16844:93;:::i;:::-;16962:2;16957:3;16953:12;16946:19;;16605:366;;;:::o;16977:::-;17119:3;17140:67;17204:2;17199:3;17140:67;:::i;:::-;17133:74;;17216:93;17305:3;17216:93;:::i;:::-;17334:2;17329:3;17325:12;17318:19;;16977:366;;;:::o;17349:::-;17491:3;17512:67;17576:2;17571:3;17512:67;:::i;:::-;17505:74;;17588:93;17677:3;17588:93;:::i;:::-;17706:2;17701:3;17697:12;17690:19;;17349:366;;;:::o;17721:::-;17863:3;17884:67;17948:2;17943:3;17884:67;:::i;:::-;17877:74;;17960:93;18049:3;17960:93;:::i;:::-;18078:2;18073:3;18069:12;18062:19;;17721:366;;;:::o;18093:::-;18235:3;18256:67;18320:2;18315:3;18256:67;:::i;:::-;18249:74;;18332:93;18421:3;18332:93;:::i;:::-;18450:2;18445:3;18441:12;18434:19;;18093:366;;;:::o;18465:::-;18607:3;18628:67;18692:2;18687:3;18628:67;:::i;:::-;18621:74;;18704:93;18793:3;18704:93;:::i;:::-;18822:2;18817:3;18813:12;18806:19;;18465:366;;;:::o;18837:::-;18979:3;19000:67;19064:2;19059:3;19000:67;:::i;:::-;18993:74;;19076:93;19165:3;19076:93;:::i;:::-;19194:2;19189:3;19185:12;19178:19;;18837:366;;;:::o;19209:::-;19351:3;19372:67;19436:2;19431:3;19372:67;:::i;:::-;19365:74;;19448:93;19537:3;19448:93;:::i;:::-;19566:2;19561:3;19557:12;19550:19;;19209:366;;;:::o;19581:::-;19723:3;19744:67;19808:2;19803:3;19744:67;:::i;:::-;19737:74;;19820:93;19909:3;19820:93;:::i;:::-;19938:2;19933:3;19929:12;19922:19;;19581:366;;;:::o;19953:::-;20095:3;20116:67;20180:2;20175:3;20116:67;:::i;:::-;20109:74;;20192:93;20281:3;20192:93;:::i;:::-;20310:2;20305:3;20301:12;20294:19;;19953:366;;;:::o;20325:::-;20467:3;20488:67;20552:2;20547:3;20488:67;:::i;:::-;20481:74;;20564:93;20653:3;20564:93;:::i;:::-;20682:2;20677:3;20673:12;20666:19;;20325:366;;;:::o;20697:::-;20839:3;20860:67;20924:2;20919:3;20860:67;:::i;:::-;20853:74;;20936:93;21025:3;20936:93;:::i;:::-;21054:2;21049:3;21045:12;21038:19;;20697:366;;;:::o;21069:108::-;21146:24;21164:5;21146:24;:::i;:::-;21141:3;21134:37;21069:108;;:::o;21183:118::-;21270:24;21288:5;21270:24;:::i;:::-;21265:3;21258:37;21183:118;;:::o;21307:589::-;21532:3;21554:95;21645:3;21636:6;21554:95;:::i;:::-;21547:102;;21666:95;21757:3;21748:6;21666:95;:::i;:::-;21659:102;;21778:92;21866:3;21857:6;21778:92;:::i;:::-;21771:99;;21887:3;21880:10;;21307:589;;;;;;:::o;21902:222::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22046:71;22114:1;22103:9;22099:17;22090:6;22046:71;:::i;:::-;21902:222;;;;:::o;22130:442::-;22279:4;22317:2;22306:9;22302:18;22294:26;;22330:71;22398:1;22387:9;22383:17;22374:6;22330:71;:::i;:::-;22411:72;22479:2;22468:9;22464:18;22455:6;22411:72;:::i;:::-;22493;22561:2;22550:9;22546:18;22537:6;22493:72;:::i;:::-;22130:442;;;;;;:::o;22578:640::-;22773:4;22811:3;22800:9;22796:19;22788:27;;22825:71;22893:1;22882:9;22878:17;22869:6;22825:71;:::i;:::-;22906:72;22974:2;22963:9;22959:18;22950:6;22906:72;:::i;:::-;22988;23056:2;23045:9;23041:18;23032:6;22988:72;:::i;:::-;23107:9;23101:4;23097:20;23092:2;23081:9;23077:18;23070:48;23135:76;23206:4;23197:6;23135:76;:::i;:::-;23127:84;;22578:640;;;;;;;:::o;23224:332::-;23345:4;23383:2;23372:9;23368:18;23360:26;;23396:71;23464:1;23453:9;23449:17;23440:6;23396:71;:::i;:::-;23477:72;23545:2;23534:9;23530:18;23521:6;23477:72;:::i;:::-;23224:332;;;;;:::o;23562:373::-;23705:4;23743:2;23732:9;23728:18;23720:26;;23792:9;23786:4;23782:20;23778:1;23767:9;23763:17;23756:47;23820:108;23923:4;23914:6;23820:108;:::i;:::-;23812:116;;23562:373;;;;:::o;23941:210::-;24028:4;24066:2;24055:9;24051:18;24043:26;;24079:65;24141:1;24130:9;24126:17;24117:6;24079:65;:::i;:::-;23941:210;;;;:::o;24157:248::-;24263:4;24301:2;24290:9;24286:18;24278:26;;24314:84;24395:1;24384:9;24380:17;24371:6;24314:84;:::i;:::-;24157:248;;;;:::o;24411:313::-;24524:4;24562:2;24551:9;24547:18;24539:26;;24611:9;24605:4;24601:20;24597:1;24586:9;24582:17;24575:47;24639:78;24712:4;24703:6;24639:78;:::i;:::-;24631:86;;24411:313;;;;:::o;24730:419::-;24896:4;24934:2;24923:9;24919:18;24911:26;;24983:9;24977:4;24973:20;24969:1;24958:9;24954:17;24947:47;25011:131;25137:4;25011:131;:::i;:::-;25003:139;;24730:419;;;:::o;25155:::-;25321:4;25359:2;25348:9;25344:18;25336:26;;25408:9;25402:4;25398:20;25394:1;25383:9;25379:17;25372:47;25436:131;25562:4;25436:131;:::i;:::-;25428:139;;25155:419;;;:::o;25580:::-;25746:4;25784:2;25773:9;25769:18;25761:26;;25833:9;25827:4;25823:20;25819:1;25808:9;25804:17;25797:47;25861:131;25987:4;25861:131;:::i;:::-;25853:139;;25580:419;;;:::o;26005:::-;26171:4;26209:2;26198:9;26194:18;26186:26;;26258:9;26252:4;26248:20;26244:1;26233:9;26229:17;26222:47;26286:131;26412:4;26286:131;:::i;:::-;26278:139;;26005:419;;;:::o;26430:::-;26596:4;26634:2;26623:9;26619:18;26611:26;;26683:9;26677:4;26673:20;26669:1;26658:9;26654:17;26647:47;26711:131;26837:4;26711:131;:::i;:::-;26703:139;;26430:419;;;:::o;26855:::-;27021:4;27059:2;27048:9;27044:18;27036:26;;27108:9;27102:4;27098:20;27094:1;27083:9;27079:17;27072:47;27136:131;27262:4;27136:131;:::i;:::-;27128:139;;26855:419;;;:::o;27280:::-;27446:4;27484:2;27473:9;27469:18;27461:26;;27533:9;27527:4;27523:20;27519:1;27508:9;27504:17;27497:47;27561:131;27687:4;27561:131;:::i;:::-;27553:139;;27280:419;;;:::o;27705:::-;27871:4;27909:2;27898:9;27894:18;27886:26;;27958:9;27952:4;27948:20;27944:1;27933:9;27929:17;27922:47;27986:131;28112:4;27986:131;:::i;:::-;27978:139;;27705:419;;;:::o;28130:::-;28296:4;28334:2;28323:9;28319:18;28311:26;;28383:9;28377:4;28373:20;28369:1;28358:9;28354:17;28347:47;28411:131;28537:4;28411:131;:::i;:::-;28403:139;;28130:419;;;:::o;28555:::-;28721:4;28759:2;28748:9;28744:18;28736:26;;28808:9;28802:4;28798:20;28794:1;28783:9;28779:17;28772:47;28836:131;28962:4;28836:131;:::i;:::-;28828:139;;28555:419;;;:::o;28980:::-;29146:4;29184:2;29173:9;29169:18;29161:26;;29233:9;29227:4;29223:20;29219:1;29208:9;29204:17;29197:47;29261:131;29387:4;29261:131;:::i;:::-;29253:139;;28980:419;;;:::o;29405:::-;29571:4;29609:2;29598:9;29594:18;29586:26;;29658:9;29652:4;29648:20;29644:1;29633:9;29629:17;29622:47;29686:131;29812:4;29686:131;:::i;:::-;29678:139;;29405:419;;;:::o;29830:::-;29996:4;30034:2;30023:9;30019:18;30011:26;;30083:9;30077:4;30073:20;30069:1;30058:9;30054:17;30047:47;30111:131;30237:4;30111:131;:::i;:::-;30103:139;;29830:419;;;:::o;30255:::-;30421:4;30459:2;30448:9;30444:18;30436:26;;30508:9;30502:4;30498:20;30494:1;30483:9;30479:17;30472:47;30536:131;30662:4;30536:131;:::i;:::-;30528:139;;30255:419;;;:::o;30680:::-;30846:4;30884:2;30873:9;30869:18;30861:26;;30933:9;30927:4;30923:20;30919:1;30908:9;30904:17;30897:47;30961:131;31087:4;30961:131;:::i;:::-;30953:139;;30680:419;;;:::o;31105:::-;31271:4;31309:2;31298:9;31294:18;31286:26;;31358:9;31352:4;31348:20;31344:1;31333:9;31329:17;31322:47;31386:131;31512:4;31386:131;:::i;:::-;31378:139;;31105:419;;;:::o;31530:::-;31696:4;31734:2;31723:9;31719:18;31711:26;;31783:9;31777:4;31773:20;31769:1;31758:9;31754:17;31747:47;31811:131;31937:4;31811:131;:::i;:::-;31803:139;;31530:419;;;:::o;31955:::-;32121:4;32159:2;32148:9;32144:18;32136:26;;32208:9;32202:4;32198:20;32194:1;32183:9;32179:17;32172:47;32236:131;32362:4;32236:131;:::i;:::-;32228:139;;31955:419;;;:::o;32380:::-;32546:4;32584:2;32573:9;32569:18;32561:26;;32633:9;32627:4;32623:20;32619:1;32608:9;32604:17;32597:47;32661:131;32787:4;32661:131;:::i;:::-;32653:139;;32380:419;;;:::o;32805:::-;32971:4;33009:2;32998:9;32994:18;32986:26;;33058:9;33052:4;33048:20;33044:1;33033:9;33029:17;33022:47;33086:131;33212:4;33086:131;:::i;:::-;33078:139;;32805:419;;;:::o;33230:::-;33396:4;33434:2;33423:9;33419:18;33411:26;;33483:9;33477:4;33473:20;33469:1;33458:9;33454:17;33447:47;33511:131;33637:4;33511:131;:::i;:::-;33503:139;;33230:419;;;:::o;33655:::-;33821:4;33859:2;33848:9;33844:18;33836:26;;33908:9;33902:4;33898:20;33894:1;33883:9;33879:17;33872:47;33936:131;34062:4;33936:131;:::i;:::-;33928:139;;33655:419;;;:::o;34080:::-;34246:4;34284:2;34273:9;34269:18;34261:26;;34333:9;34327:4;34323:20;34319:1;34308:9;34304:17;34297:47;34361:131;34487:4;34361:131;:::i;:::-;34353:139;;34080:419;;;:::o;34505:222::-;34598:4;34636:2;34625:9;34621:18;34613:26;;34649:71;34717:1;34706:9;34702:17;34693:6;34649:71;:::i;:::-;34505:222;;;;:::o;34733:129::-;34767:6;34794:20;;:::i;:::-;34784:30;;34823:33;34851:4;34843:6;34823:33;:::i;:::-;34733:129;;;:::o;34868:75::-;34901:6;34934:2;34928:9;34918:19;;34868:75;:::o;34949:307::-;35010:4;35100:18;35092:6;35089:30;35086:56;;;35122:18;;:::i;:::-;35086:56;35160:29;35182:6;35160:29;:::i;:::-;35152:37;;35244:4;35238;35234:15;35226:23;;34949:307;;;:::o;35262:308::-;35324:4;35414:18;35406:6;35403:30;35400:56;;;35436:18;;:::i;:::-;35400:56;35474:29;35496:6;35474:29;:::i;:::-;35466:37;;35558:4;35552;35548:15;35540:23;;35262:308;;;:::o;35576:132::-;35643:4;35666:3;35658:11;;35696:4;35691:3;35687:14;35679:22;;35576:132;;;:::o;35714:141::-;35763:4;35786:3;35778:11;;35809:3;35806:1;35799:14;35843:4;35840:1;35830:18;35822:26;;35714:141;;;:::o;35861:114::-;35928:6;35962:5;35956:12;35946:22;;35861:114;;;:::o;35981:98::-;36032:6;36066:5;36060:12;36050:22;;35981:98;;;:::o;36085:99::-;36137:6;36171:5;36165:12;36155:22;;36085:99;;;:::o;36190:113::-;36260:4;36292;36287:3;36283:14;36275:22;;36190:113;;;:::o;36309:184::-;36408:11;36442:6;36437:3;36430:19;36482:4;36477:3;36473:14;36458:29;;36309:184;;;;:::o;36499:168::-;36582:11;36616:6;36611:3;36604:19;36656:4;36651:3;36647:14;36632:29;;36499:168;;;;:::o;36673:169::-;36757:11;36791:6;36786:3;36779:19;36831:4;36826:3;36822:14;36807:29;;36673:169;;;;:::o;36848:148::-;36950:11;36987:3;36972:18;;36848:148;;;;:::o;37002:305::-;37042:3;37061:20;37079:1;37061:20;:::i;:::-;37056:25;;37095:20;37113:1;37095:20;:::i;:::-;37090:25;;37249:1;37181:66;37177:74;37174:1;37171:81;37168:107;;;37255:18;;:::i;:::-;37168:107;37299:1;37296;37292:9;37285:16;;37002:305;;;;:::o;37313:185::-;37353:1;37370:20;37388:1;37370:20;:::i;:::-;37365:25;;37404:20;37422:1;37404:20;:::i;:::-;37399:25;;37443:1;37433:35;;37448:18;;:::i;:::-;37433:35;37490:1;37487;37483:9;37478:14;;37313:185;;;;:::o;37504:348::-;37544:7;37567:20;37585:1;37567:20;:::i;:::-;37562:25;;37601:20;37619:1;37601:20;:::i;:::-;37596:25;;37789:1;37721:66;37717:74;37714:1;37711:81;37706:1;37699:9;37692:17;37688:105;37685:131;;;37796:18;;:::i;:::-;37685:131;37844:1;37841;37837:9;37826:20;;37504:348;;;;:::o;37858:191::-;37898:4;37918:20;37936:1;37918:20;:::i;:::-;37913:25;;37952:20;37970:1;37952:20;:::i;:::-;37947:25;;37991:1;37988;37985:8;37982:34;;;37996:18;;:::i;:::-;37982:34;38041:1;38038;38034:9;38026:17;;37858:191;;;;:::o;38055:96::-;38092:7;38121:24;38139:5;38121:24;:::i;:::-;38110:35;;38055:96;;;:::o;38157:90::-;38191:7;38234:5;38227:13;38220:21;38209:32;;38157:90;;;:::o;38253:149::-;38289:7;38329:66;38322:5;38318:78;38307:89;;38253:149;;;:::o;38408:109::-;38458:7;38487:24;38505:5;38487:24;:::i;:::-;38476:35;;38408:109;;;:::o;38523:126::-;38560:7;38600:42;38593:5;38589:54;38578:65;;38523:126;;;:::o;38655:77::-;38692:7;38721:5;38710:16;;38655:77;;;:::o;38738:139::-;38801:9;38834:37;38865:5;38834:37;:::i;:::-;38821:50;;38738:139;;;:::o;38883:126::-;38933:9;38966:37;38997:5;38966:37;:::i;:::-;38953:50;;38883:126;;;:::o;39015:113::-;39065:9;39098:24;39116:5;39098:24;:::i;:::-;39085:37;;39015:113;;;:::o;39134:154::-;39218:6;39213:3;39208;39195:30;39280:1;39271:6;39266:3;39262:16;39255:27;39134:154;;;:::o;39294:307::-;39362:1;39372:113;39386:6;39383:1;39380:13;39372:113;;;39471:1;39466:3;39462:11;39456:18;39452:1;39447:3;39443:11;39436:39;39408:2;39405:1;39401:10;39396:15;;39372:113;;;39503:6;39500:1;39497:13;39494:101;;;39583:1;39574:6;39569:3;39565:16;39558:27;39494:101;39343:258;39294:307;;;:::o;39607:320::-;39651:6;39688:1;39682:4;39678:12;39668:22;;39735:1;39729:4;39725:12;39756:18;39746:81;;39812:4;39804:6;39800:17;39790:27;;39746:81;39874:2;39866:6;39863:14;39843:18;39840:38;39837:84;;;39893:18;;:::i;:::-;39837:84;39658:269;39607:320;;;:::o;39933:281::-;40016:27;40038:4;40016:27;:::i;:::-;40008:6;40004:40;40146:6;40134:10;40131:22;40110:18;40098:10;40095:34;40092:62;40089:88;;;40157:18;;:::i;:::-;40089:88;40197:10;40193:2;40186:22;39976:238;39933:281;;:::o;40220:233::-;40259:3;40282:24;40300:5;40282:24;:::i;:::-;40273:33;;40328:66;40321:5;40318:77;40315:103;;;40398:18;;:::i;:::-;40315:103;40445:1;40438:5;40434:13;40427:20;;40220:233;;;:::o;40459:176::-;40491:1;40508:20;40526:1;40508:20;:::i;:::-;40503:25;;40542:20;40560:1;40542:20;:::i;:::-;40537:25;;40581:1;40571:35;;40586:18;;:::i;:::-;40571:35;40627:1;40624;40620:9;40615:14;;40459:176;;;;:::o;40641:180::-;40689:77;40686:1;40679:88;40786:4;40783:1;40776:15;40810:4;40807:1;40800:15;40827:180;40875:77;40872:1;40865:88;40972:4;40969:1;40962:15;40996:4;40993:1;40986:15;41013:180;41061:77;41058:1;41051:88;41158:4;41155:1;41148:15;41182:4;41179:1;41172:15;41199:180;41247:77;41244:1;41237:88;41344:4;41341:1;41334:15;41368:4;41365:1;41358:15;41385:180;41433:77;41430:1;41423:88;41530:4;41527:1;41520:15;41554:4;41551:1;41544:15;41571:180;41619:77;41616:1;41609:88;41716:4;41713:1;41706:15;41740:4;41737:1;41730:15;41757:117;41866:1;41863;41856:12;41880:117;41989:1;41986;41979:12;42003:117;42112:1;42109;42102:12;42126:117;42235:1;42232;42225:12;42249:102;42290:6;42341:2;42337:7;42332:2;42325:5;42321:14;42317:28;42307:38;;42249:102;;;:::o;42357:230::-;42497:34;42493:1;42485:6;42481:14;42474:58;42566:13;42561:2;42553:6;42549:15;42542:38;42357:230;:::o;42593:237::-;42733:34;42729:1;42721:6;42717:14;42710:58;42802:20;42797:2;42789:6;42785:15;42778:45;42593:237;:::o;42836:225::-;42976:34;42972:1;42964:6;42960:14;42953:58;43045:8;43040:2;43032:6;43028:15;43021:33;42836:225;:::o;43067:224::-;43207:34;43203:1;43195:6;43191:14;43184:58;43276:7;43271:2;43263:6;43259:15;43252:32;43067:224;:::o;43297:178::-;43437:30;43433:1;43425:6;43421:14;43414:54;43297:178;:::o;43481:::-;43621:30;43617:1;43609:6;43605:14;43598:54;43481:178;:::o;43665:167::-;43805:19;43801:1;43793:6;43789:14;43782:43;43665:167;:::o;43838:223::-;43978:34;43974:1;43966:6;43962:14;43955:58;44047:6;44042:2;44034:6;44030:15;44023:31;43838:223;:::o;44067:175::-;44207:27;44203:1;44195:6;44191:14;44184:51;44067:175;:::o;44248:228::-;44388:34;44384:1;44376:6;44372:14;44365:58;44457:11;44452:2;44444:6;44440:15;44433:36;44248:228;:::o;44482:172::-;44622:24;44618:1;44610:6;44606:14;44599:48;44482:172;:::o;44660:223::-;44800:34;44796:1;44788:6;44784:14;44777:58;44869:6;44864:2;44856:6;44852:15;44845:31;44660:223;:::o;44889:249::-;45029:34;45025:1;45017:6;45013:14;45006:58;45098:32;45093:2;45085:6;45081:15;45074:57;44889:249;:::o;45144:182::-;45284:34;45280:1;45272:6;45268:14;45261:58;45144:182;:::o;45332:173::-;45472:25;45468:1;45460:6;45456:14;45449:49;45332:173;:::o;45511:182::-;45651:34;45647:1;45639:6;45635:14;45628:58;45511:182;:::o;45699:172::-;45839:24;45835:1;45827:6;45823:14;45816:48;45699:172;:::o;45877:234::-;46017:34;46013:1;46005:6;46001:14;45994:58;46086:17;46081:2;46073:6;46069:15;46062:42;45877:234;:::o;46117:174::-;46257:26;46253:1;46245:6;46241:14;46234:50;46117:174;:::o;46297:220::-;46437:34;46433:1;46425:6;46421:14;46414:58;46506:3;46501:2;46493:6;46489:15;46482:28;46297:220;:::o;46523:231::-;46663:34;46659:1;46651:6;46647:14;46640:58;46732:14;46727:2;46719:6;46715:15;46708:39;46523:231;:::o;46760:233::-;46900:34;46896:1;46888:6;46884:14;46877:58;46969:16;46964:2;46956:6;46952:15;46945:41;46760:233;:::o;46999:177::-;47139:29;47135:1;47127:6;47123:14;47116:53;46999:177;:::o;47182:122::-;47255:24;47273:5;47255:24;:::i;:::-;47248:5;47245:35;47235:63;;47294:1;47291;47284:12;47235:63;47182:122;:::o;47310:116::-;47380:21;47395:5;47380:21;:::i;:::-;47373:5;47370:32;47360:60;;47416:1;47413;47406:12;47360:60;47310:116;:::o;47432:120::-;47504:23;47521:5;47504:23;:::i;:::-;47497:5;47494:34;47484:62;;47542:1;47539;47532:12;47484:62;47432:120;:::o;47558:148::-;47644:37;47675:5;47644:37;:::i;:::-;47637:5;47634:48;47624:76;;47696:1;47693;47686:12;47624:76;47558:148;:::o;47712:122::-;47785:24;47803:5;47785:24;:::i;:::-;47778:5;47775:35;47765:63;;47824:1;47821;47814:12;47765:63;47712:122;:::o

Swarm Source

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