ETH Price: $2,618.56 (-5.07%)
Gas: 0.89 Gwei

Token

Carlito Timeless Collection (CARLITO)
 

Overview

Max Total Supply

1,000 CARLITO

Holders

362

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 CARLITO
0x995a5d125938d4f1ac7d3ed5c7f0b8540f6cc34e
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:
ERC721CarlitoCollection

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-30
*/

pragma solidity ^0.8.7;

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
/**
 * @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/token/ERC721/IERC721.sol
// 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)
/**
 * @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 be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;
    /**
     * @dev 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/IERC721Receiver.sol
// 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
/**
 * @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/token/ERC721/extensions/IERC721Metadata.sol
// 
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
/**
 * @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/utils/Address.sol
// 
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.
        return account.code.length > 0;
    }
    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// File: @openzeppelin/contracts/utils/Context.sol
// 
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: @openzeppelin/contracts/utils/Strings.sol
// 
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// 
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
/**
 * @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/ERC721.sol
// 
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol)
/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    // Token name
    string private _name;
    // Token symbol
    string private _symbol;
    // Mapping from token ID to owner address
    mapping(uint256 => address) private _owners;
    // Mapping owner address to token count
    mapping(address => uint256) private _balances;
    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;
    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be 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 owner nor approved for all"
        );
        _approve(to, tokenId);
    }
    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");
        return _tokenApprovals[tokenId];
    }
    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }
    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || 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 a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }
    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
    /**
     * @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/access/Ownable.sol
// 
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
// File: @openzeppelin/contracts/utils/Counters.sol
// 
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }
    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }
    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }
    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }
    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}
// File: contracts/ERC721clean.sol
// 
contract ERC721CarlitoCollection is ERC721, Ownable {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIdCounter;
    /*
     * Base uri for tokens.
     */
    string private baseUri;
    /*
     * Enforce the existence of only 100 Tokens.
     */
    uint256 MAX_SUPPLY;
    constructor(
        string memory _name,
        string memory _symbol,
        uint256 _maxSupply,
        string memory _baseUri
    ) ERC721(_name, _symbol) {
        baseUri = _baseUri;
        MAX_SUPPLY = _maxSupply;
        _tokenIdCounter.increment();
    }
    /**
     * @dev Mints a token to an address with a tokenURI.
     * @param to address of the future owner of the token
     */
    function safeMint(address to) public onlyOwner {
        require(canMint(1));
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
    }
    /**
     * @dev Mints a certain amount of NFTs in advance to save gas costs.
     * @param _to address of the future owner of the token
     * @param amount amount of tokens to mint
     */
    function preMint(address _to, uint256 amount) public onlyOwner {
        require(canMint(amount));
        for (uint256 i = 0; i < amount; i++) {
            safeMint(_to);
        }
    }
    function airDrop(address[] memory _to) public onlyOwner {
        require(canMint(_to.length));
        for (uint256 i = 0; i < _to.length; i++) {
            safeMint(_to[i]);
        }
    }
    /**
     * @dev Checks if amount of tokens can be minted
     * @dev Takles the amount of tokens to mint as input, not the type!
     * @param amount amount of tokens to mint
     */
    function canMint(uint256 amount) public view returns (bool) {
        return totalSupply() <= (MAX_SUPPLY - amount);
    }
    /**
        @dev Returns the total tokens minted so far.
        1 is always subtracted from the Counter since it tracks the next available tokenId.
     */
    function totalSupply() public view returns (uint256) {
        return _tokenIdCounter.current() - 1;
    }
    
    function baseTokenURI() public view returns (string memory) {
        return baseUri;
    }

    function setBaseTokenURI(string memory _baseUri) public onlyOwner {
        baseUri = _baseUri;
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(baseTokenURI(), Strings.toString(_tokenId))
            );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"string","name":"_baseUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"airDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"preMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"safeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051620036ff380380620036ff8339818101604052810190620000379190620002f7565b8383816000908051906020019062000051929190620001b2565b5080600190805190602001906200006a929190620001b2565b5050506200008d62000081620000ce60201b60201c565b620000d660201b60201c565b8060089080519060200190620000a5929190620001b2565b5081600981905550620000c460076200019c60201b620010801760201c565b505050506200056e565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001816000016000828254019250508190555050565b828054620001c09062000465565b90600052602060002090601f016020900481019282620001e4576000855562000230565b82601f10620001ff57805160ff191683800117855562000230565b8280016001018555821562000230579182015b828111156200022f57825182559160200191906001019062000212565b5b5090506200023f919062000243565b5090565b5b808211156200025e57600081600090555060010162000244565b5090565b6000620002796200027384620003ef565b620003c6565b90508281526020810184848401111562000298576200029762000534565b5b620002a58482856200042f565b509392505050565b600082601f830112620002c557620002c46200052f565b5b8151620002d784826020860162000262565b91505092915050565b600081519050620002f18162000554565b92915050565b600080600080608085870312156200031457620003136200053e565b5b600085015167ffffffffffffffff81111562000335576200033462000539565b5b6200034387828801620002ad565b945050602085015167ffffffffffffffff81111562000367576200036662000539565b5b6200037587828801620002ad565b93505060406200038887828801620002e0565b925050606085015167ffffffffffffffff811115620003ac57620003ab62000539565b5b620003ba87828801620002ad565b91505092959194509250565b6000620003d2620003e5565b9050620003e082826200049b565b919050565b6000604051905090565b600067ffffffffffffffff8211156200040d576200040c62000500565b5b620004188262000543565b9050602081019050919050565b6000819050919050565b60005b838110156200044f57808201518184015260208101905062000432565b838111156200045f576000848401525b50505050565b600060028204905060018216806200047e57607f821691505b60208210811415620004955762000494620004d1565b5b50919050565b620004a68262000543565b810181811067ffffffffffffffff82111715620004c857620004c762000500565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200055f8162000425565b81146200056b57600080fd5b50565b613181806200057e6000396000f3fe608060405234801561001057600080fd5b506004361061014c5760003560e01c80635dd871a3116100c3578063a22cb4651161007c578063a22cb46514610387578063b88d4fde146103a3578063c87b56dd146103bf578063d547cfb7146103ef578063e985e9c51461040d578063f2fde38b1461043d5761014c565b80635dd871a3146102b15780636352211e146102e157806370a0823114610311578063715018a6146103415780638da5cb5b1461034b57806395d89b41146103695761014c565b806318160ddd1161011557806318160ddd1461020757806323b872dd14610225578063290c292d1461024157806330176e131461025d57806340d097c31461027957806342842e0e146102955761014c565b8062b6849f1461015157806301ffc9a71461016d57806306fdde031461019d578063081812fc146101bb578063095ea7b3146101eb575b600080fd5b61016b600480360381019061016691906121d4565b610459565b005b6101876004803603810190610182919061221d565b61052e565b6040516101949190612655565b60405180910390f35b6101a5610610565b6040516101b29190612670565b60405180910390f35b6101d560048036038101906101d091906122c0565b6106a2565b6040516101e291906125ee565b60405180910390f35b61020560048036038101906102009190612194565b610727565b005b61020f61083f565b60405161021c9190612872565b60405180910390f35b61023f600480360381019061023a919061207e565b61085c565b005b61025b60048036038101906102569190612194565b6108bc565b005b61027760048036038101906102729190612277565b610976565b005b610293600480360381019061028e9190612011565b610a0c565b005b6102af60048036038101906102aa919061207e565b610ac1565b005b6102cb60048036038101906102c691906122c0565b610ae1565b6040516102d89190612655565b60405180910390f35b6102fb60048036038101906102f691906122c0565b610b02565b60405161030891906125ee565b60405180910390f35b61032b60048036038101906103269190612011565b610bb4565b6040516103389190612872565b60405180910390f35b610349610c6c565b005b610353610cf4565b60405161036091906125ee565b60405180910390f35b610371610d1e565b60405161037e9190612670565b60405180910390f35b6103a1600480360381019061039c9190612154565b610db0565b005b6103bd60048036038101906103b891906120d1565b610dc6565b005b6103d960048036038101906103d491906122c0565b610e28565b6040516103e69190612670565b60405180910390f35b6103f7610e62565b6040516104049190612670565b60405180910390f35b6104276004803603810190610422919061203e565b610ef4565b6040516104349190612655565b60405180910390f35b61045760048036038101906104529190612011565b610f88565b005b610461611096565b73ffffffffffffffffffffffffffffffffffffffff1661047f610cf4565b73ffffffffffffffffffffffffffffffffffffffff16146104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90612812565b60405180910390fd5b6104df8151610ae1565b6104e857600080fd5b60005b815181101561052a5761051782828151811061050a57610509612c5e565b5b6020026020010151610a0c565b808061052290612b57565b9150506104eb565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060957506106088261109e565b5b9050919050565b60606000805461061f90612af4565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612af4565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad82611108565b6106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906127f2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073282610b02565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612832565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c2611096565b73ffffffffffffffffffffffffffffffffffffffff1614806107f157506107f0816107eb611096565b610ef4565b5b610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082790612772565b60405180910390fd5b61083a8383611174565b505050565b6000600161084d600761122d565b6108579190612a0a565b905090565b61086d610867611096565b8261123b565b6108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390612852565b60405180910390fd5b6108b7838383611319565b505050565b6108c4611096565b73ffffffffffffffffffffffffffffffffffffffff166108e2610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90612812565b60405180910390fd5b61094181610ae1565b61094a57600080fd5b60005b818110156109715761095e83610a0c565b808061096990612b57565b91505061094d565b505050565b61097e611096565b73ffffffffffffffffffffffffffffffffffffffff1661099c610cf4565b73ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990612812565b60405180910390fd5b8060089080519060200190610a08929190611d87565b5050565b610a14611096565b73ffffffffffffffffffffffffffffffffffffffff16610a32610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90612812565b60405180910390fd5b610a926001610ae1565b610a9b57600080fd5b6000610aa7600761122d565b9050610ab36007611080565b610abd8282611580565b5050565b610adc83838360405180602001604052806000815250610dc6565b505050565b600081600954610af19190612a0a565b610af961083f565b11159050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba2906127b2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90612792565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c74611096565b73ffffffffffffffffffffffffffffffffffffffff16610c92610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612812565b60405180910390fd5b610cf2600061159e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d2d90612af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5990612af4565b8015610da65780601f10610d7b57610100808354040283529160200191610da6565b820191906000526020600020905b815481529060010190602001808311610d8957829003601f168201915b5050505050905090565b610dc2610dbb611096565b8383611664565b5050565b610dd7610dd1611096565b8361123b565b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90612852565b60405180910390fd5b610e22848484846117d1565b50505050565b6060610e32610e62565b610e3b8361182d565b604051602001610e4c9291906125ca565b6040516020818303038152906040529050919050565b606060088054610e7190612af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90612af4565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f90611096565b73ffffffffffffffffffffffffffffffffffffffff16610fae610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90612812565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b906126b2565b60405180910390fd5b61107d8161159e565b50565b6001816000016000828254019250508190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166111e783610b02565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061124682611108565b611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90612752565b60405180910390fd5b600061129083610b02565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112d257506112d18185610ef4565b5b8061131057508373ffffffffffffffffffffffffffffffffffffffff166112f8846106a2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661133982610b02565b73ffffffffffffffffffffffffffffffffffffffff161461138f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611386906126d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612712565b60405180910390fd5b61140a83838361198e565b611415600082611174565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114659190612a0a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114bc9190612983565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461157b838383611993565b505050565b61159a828260405180602001604052806000815250611998565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612732565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c49190612655565b60405180910390a3505050565b6117dc848484611319565b6117e8848484846119f3565b611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90612692565b60405180910390fd5b50505050565b60606000821415611875576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611989565b600082905060005b600082146118a757808061189090612b57565b915050600a826118a091906129d9565b915061187d565b60008167ffffffffffffffff8111156118c3576118c2612c8d565b5b6040519080825280601f01601f1916602001820160405280156118f55781602001600182028036833780820191505090505b5090505b600085146119825760018261190e9190612a0a565b9150600a8561191d9190612ba0565b60306119299190612983565b60f81b81838151811061193f5761193e612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561197b91906129d9565b94506118f9565b8093505050505b919050565b505050565b505050565b6119a28383611b8a565b6119af60008484846119f3565b6119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590612692565b60405180910390fd5b505050565b6000611a148473ffffffffffffffffffffffffffffffffffffffff16611d64565b15611b7d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a3d611096565b8786866040518563ffffffff1660e01b8152600401611a5f9493929190612609565b602060405180830381600087803b158015611a7957600080fd5b505af1925050508015611aaa57506040513d601f19601f82011682018060405250810190611aa7919061224a565b60015b611b2d573d8060008114611ada576040519150601f19603f3d011682016040523d82523d6000602084013e611adf565b606091505b50600081511415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90612692565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b82565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906127d2565b60405180910390fd5b611c0381611108565b15611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a906126f2565b60405180910390fd5b611c4f6000838361198e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c9f9190612983565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d6060008383611993565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611d9390612af4565b90600052602060002090601f016020900481019282611db55760008555611dfc565b82601f10611dce57805160ff1916838001178555611dfc565b82800160010185558215611dfc579182015b82811115611dfb578251825591602001919060010190611de0565b5b509050611e099190611e0d565b5090565b5b80821115611e26576000816000905550600101611e0e565b5090565b6000611e3d611e38846128b2565b61288d565b90508083825260208201905082856020860282011115611e6057611e5f612cc1565b5b60005b85811015611e905781611e768882611f1e565b845260208401935060208301925050600181019050611e63565b5050509392505050565b6000611ead611ea8846128de565b61288d565b905082815260208101848484011115611ec957611ec8612cc6565b5b611ed4848285612ab2565b509392505050565b6000611eef611eea8461290f565b61288d565b905082815260208101848484011115611f0b57611f0a612cc6565b5b611f16848285612ab2565b509392505050565b600081359050611f2d816130ef565b92915050565b600082601f830112611f4857611f47612cbc565b5b8135611f58848260208601611e2a565b91505092915050565b600081359050611f7081613106565b92915050565b600081359050611f858161311d565b92915050565b600081519050611f9a8161311d565b92915050565b600082601f830112611fb557611fb4612cbc565b5b8135611fc5848260208601611e9a565b91505092915050565b600082601f830112611fe357611fe2612cbc565b5b8135611ff3848260208601611edc565b91505092915050565b60008135905061200b81613134565b92915050565b60006020828403121561202757612026612cd0565b5b600061203584828501611f1e565b91505092915050565b6000806040838503121561205557612054612cd0565b5b600061206385828601611f1e565b925050602061207485828601611f1e565b9150509250929050565b60008060006060848603121561209757612096612cd0565b5b60006120a586828701611f1e565b93505060206120b686828701611f1e565b92505060406120c786828701611ffc565b9150509250925092565b600080600080608085870312156120eb576120ea612cd0565b5b60006120f987828801611f1e565b945050602061210a87828801611f1e565b935050604061211b87828801611ffc565b925050606085013567ffffffffffffffff81111561213c5761213b612ccb565b5b61214887828801611fa0565b91505092959194509250565b6000806040838503121561216b5761216a612cd0565b5b600061217985828601611f1e565b925050602061218a85828601611f61565b9150509250929050565b600080604083850312156121ab576121aa612cd0565b5b60006121b985828601611f1e565b92505060206121ca85828601611ffc565b9150509250929050565b6000602082840312156121ea576121e9612cd0565b5b600082013567ffffffffffffffff81111561220857612207612ccb565b5b61221484828501611f33565b91505092915050565b60006020828403121561223357612232612cd0565b5b600061224184828501611f76565b91505092915050565b6000602082840312156122605761225f612cd0565b5b600061226e84828501611f8b565b91505092915050565b60006020828403121561228d5761228c612cd0565b5b600082013567ffffffffffffffff8111156122ab576122aa612ccb565b5b6122b784828501611fce565b91505092915050565b6000602082840312156122d6576122d5612cd0565b5b60006122e484828501611ffc565b91505092915050565b6122f681612a3e565b82525050565b61230581612a50565b82525050565b600061231682612940565b6123208185612956565b9350612330818560208601612ac1565b61233981612cd5565b840191505092915050565b600061234f8261294b565b6123598185612967565b9350612369818560208601612ac1565b61237281612cd5565b840191505092915050565b60006123888261294b565b6123928185612978565b93506123a2818560208601612ac1565b80840191505092915050565b60006123bb603283612967565b91506123c682612ce6565b604082019050919050565b60006123de602683612967565b91506123e982612d35565b604082019050919050565b6000612401602583612967565b915061240c82612d84565b604082019050919050565b6000612424601c83612967565b915061242f82612dd3565b602082019050919050565b6000612447602483612967565b915061245282612dfc565b604082019050919050565b600061246a601983612967565b915061247582612e4b565b602082019050919050565b600061248d602c83612967565b915061249882612e74565b604082019050919050565b60006124b0603883612967565b91506124bb82612ec3565b604082019050919050565b60006124d3602a83612967565b91506124de82612f12565b604082019050919050565b60006124f6602983612967565b915061250182612f61565b604082019050919050565b6000612519602083612967565b915061252482612fb0565b602082019050919050565b600061253c602c83612967565b915061254782612fd9565b604082019050919050565b600061255f602083612967565b915061256a82613028565b602082019050919050565b6000612582602183612967565b915061258d82613051565b604082019050919050565b60006125a5603183612967565b91506125b0826130a0565b604082019050919050565b6125c481612aa8565b82525050565b60006125d6828561237d565b91506125e2828461237d565b91508190509392505050565b600060208201905061260360008301846122ed565b92915050565b600060808201905061261e60008301876122ed565b61262b60208301866122ed565b61263860408301856125bb565b818103606083015261264a818461230b565b905095945050505050565b600060208201905061266a60008301846122fc565b92915050565b6000602082019050818103600083015261268a8184612344565b905092915050565b600060208201905081810360008301526126ab816123ae565b9050919050565b600060208201905081810360008301526126cb816123d1565b9050919050565b600060208201905081810360008301526126eb816123f4565b9050919050565b6000602082019050818103600083015261270b81612417565b9050919050565b6000602082019050818103600083015261272b8161243a565b9050919050565b6000602082019050818103600083015261274b8161245d565b9050919050565b6000602082019050818103600083015261276b81612480565b9050919050565b6000602082019050818103600083015261278b816124a3565b9050919050565b600060208201905081810360008301526127ab816124c6565b9050919050565b600060208201905081810360008301526127cb816124e9565b9050919050565b600060208201905081810360008301526127eb8161250c565b9050919050565b6000602082019050818103600083015261280b8161252f565b9050919050565b6000602082019050818103600083015261282b81612552565b9050919050565b6000602082019050818103600083015261284b81612575565b9050919050565b6000602082019050818103600083015261286b81612598565b9050919050565b600060208201905061288760008301846125bb565b92915050565b60006128976128a8565b90506128a38282612b26565b919050565b6000604051905090565b600067ffffffffffffffff8211156128cd576128cc612c8d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128f9576128f8612c8d565b5b61290282612cd5565b9050602081019050919050565b600067ffffffffffffffff82111561292a57612929612c8d565b5b61293382612cd5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061298e82612aa8565b915061299983612aa8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129ce576129cd612bd1565b5b828201905092915050565b60006129e482612aa8565b91506129ef83612aa8565b9250826129ff576129fe612c00565b5b828204905092915050565b6000612a1582612aa8565b9150612a2083612aa8565b925082821015612a3357612a32612bd1565b5b828203905092915050565b6000612a4982612a88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612adf578082015181840152602081019050612ac4565b83811115612aee576000848401525b50505050565b60006002820490506001821680612b0c57607f821691505b60208210811415612b2057612b1f612c2f565b5b50919050565b612b2f82612cd5565b810181811067ffffffffffffffff82111715612b4e57612b4d612c8d565b5b80604052505050565b6000612b6282612aa8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b9557612b94612bd1565b5b600182019050919050565b6000612bab82612aa8565b9150612bb683612aa8565b925082612bc657612bc5612c00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6130f881612a3e565b811461310357600080fd5b50565b61310f81612a50565b811461311a57600080fd5b50565b61312681612a5c565b811461313157600080fd5b50565b61313d81612aa8565b811461314857600080fd5b5056fea264697066735822122030c96d8a1b396ee652fa9a75440b785ba46b538537d88f0fc9551ec8f2bea18264736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001b4361726c69746f2054696d656c65737320436f6c6c656374696f6e000000000000000000000000000000000000000000000000000000000000000000000000074341524c49544f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d54583876336441674a3270545841694b3178707a7767726d4c5261326f796742704352644c696e514371564b2f000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014c5760003560e01c80635dd871a3116100c3578063a22cb4651161007c578063a22cb46514610387578063b88d4fde146103a3578063c87b56dd146103bf578063d547cfb7146103ef578063e985e9c51461040d578063f2fde38b1461043d5761014c565b80635dd871a3146102b15780636352211e146102e157806370a0823114610311578063715018a6146103415780638da5cb5b1461034b57806395d89b41146103695761014c565b806318160ddd1161011557806318160ddd1461020757806323b872dd14610225578063290c292d1461024157806330176e131461025d57806340d097c31461027957806342842e0e146102955761014c565b8062b6849f1461015157806301ffc9a71461016d57806306fdde031461019d578063081812fc146101bb578063095ea7b3146101eb575b600080fd5b61016b600480360381019061016691906121d4565b610459565b005b6101876004803603810190610182919061221d565b61052e565b6040516101949190612655565b60405180910390f35b6101a5610610565b6040516101b29190612670565b60405180910390f35b6101d560048036038101906101d091906122c0565b6106a2565b6040516101e291906125ee565b60405180910390f35b61020560048036038101906102009190612194565b610727565b005b61020f61083f565b60405161021c9190612872565b60405180910390f35b61023f600480360381019061023a919061207e565b61085c565b005b61025b60048036038101906102569190612194565b6108bc565b005b61027760048036038101906102729190612277565b610976565b005b610293600480360381019061028e9190612011565b610a0c565b005b6102af60048036038101906102aa919061207e565b610ac1565b005b6102cb60048036038101906102c691906122c0565b610ae1565b6040516102d89190612655565b60405180910390f35b6102fb60048036038101906102f691906122c0565b610b02565b60405161030891906125ee565b60405180910390f35b61032b60048036038101906103269190612011565b610bb4565b6040516103389190612872565b60405180910390f35b610349610c6c565b005b610353610cf4565b60405161036091906125ee565b60405180910390f35b610371610d1e565b60405161037e9190612670565b60405180910390f35b6103a1600480360381019061039c9190612154565b610db0565b005b6103bd60048036038101906103b891906120d1565b610dc6565b005b6103d960048036038101906103d491906122c0565b610e28565b6040516103e69190612670565b60405180910390f35b6103f7610e62565b6040516104049190612670565b60405180910390f35b6104276004803603810190610422919061203e565b610ef4565b6040516104349190612655565b60405180910390f35b61045760048036038101906104529190612011565b610f88565b005b610461611096565b73ffffffffffffffffffffffffffffffffffffffff1661047f610cf4565b73ffffffffffffffffffffffffffffffffffffffff16146104d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104cc90612812565b60405180910390fd5b6104df8151610ae1565b6104e857600080fd5b60005b815181101561052a5761051782828151811061050a57610509612c5e565b5b6020026020010151610a0c565b808061052290612b57565b9150506104eb565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105f957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061060957506106088261109e565b5b9050919050565b60606000805461061f90612af4565b80601f016020809104026020016040519081016040528092919081815260200182805461064b90612af4565b80156106985780601f1061066d57610100808354040283529160200191610698565b820191906000526020600020905b81548152906001019060200180831161067b57829003601f168201915b5050505050905090565b60006106ad82611108565b6106ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e3906127f2565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061073282610b02565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161079a90612832565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107c2611096565b73ffffffffffffffffffffffffffffffffffffffff1614806107f157506107f0816107eb611096565b610ef4565b5b610830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082790612772565b60405180910390fd5b61083a8383611174565b505050565b6000600161084d600761122d565b6108579190612a0a565b905090565b61086d610867611096565b8261123b565b6108ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a390612852565b60405180910390fd5b6108b7838383611319565b505050565b6108c4611096565b73ffffffffffffffffffffffffffffffffffffffff166108e2610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f90612812565b60405180910390fd5b61094181610ae1565b61094a57600080fd5b60005b818110156109715761095e83610a0c565b808061096990612b57565b91505061094d565b505050565b61097e611096565b73ffffffffffffffffffffffffffffffffffffffff1661099c610cf4565b73ffffffffffffffffffffffffffffffffffffffff16146109f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e990612812565b60405180910390fd5b8060089080519060200190610a08929190611d87565b5050565b610a14611096565b73ffffffffffffffffffffffffffffffffffffffff16610a32610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7f90612812565b60405180910390fd5b610a926001610ae1565b610a9b57600080fd5b6000610aa7600761122d565b9050610ab36007611080565b610abd8282611580565b5050565b610adc83838360405180602001604052806000815250610dc6565b505050565b600081600954610af19190612a0a565b610af961083f565b11159050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba2906127b2565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1c90612792565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c74611096565b73ffffffffffffffffffffffffffffffffffffffff16610c92610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614610ce8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdf90612812565b60405180910390fd5b610cf2600061159e565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610d2d90612af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5990612af4565b8015610da65780601f10610d7b57610100808354040283529160200191610da6565b820191906000526020600020905b815481529060010190602001808311610d8957829003601f168201915b5050505050905090565b610dc2610dbb611096565b8383611664565b5050565b610dd7610dd1611096565b8361123b565b610e16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0d90612852565b60405180910390fd5b610e22848484846117d1565b50505050565b6060610e32610e62565b610e3b8361182d565b604051602001610e4c9291906125ca565b6040516020818303038152906040529050919050565b606060088054610e7190612af4565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9d90612af4565b8015610eea5780601f10610ebf57610100808354040283529160200191610eea565b820191906000526020600020905b815481529060010190602001808311610ecd57829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f90611096565b73ffffffffffffffffffffffffffffffffffffffff16610fae610cf4565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb90612812565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b906126b2565b60405180910390fd5b61107d8161159e565b50565b6001816000016000828254019250508190555050565b600033905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166111e783610b02565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061124682611108565b611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90612752565b60405180910390fd5b600061129083610b02565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806112d257506112d18185610ef4565b5b8061131057508373ffffffffffffffffffffffffffffffffffffffff166112f8846106a2565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661133982610b02565b73ffffffffffffffffffffffffffffffffffffffff161461138f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611386906126d2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690612712565b60405180910390fd5b61140a83838361198e565b611415600082611174565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114659190612a0a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114bc9190612983565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461157b838383611993565b505050565b61159a828260405180602001604052806000815250611998565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ca90612732565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117c49190612655565b60405180910390a3505050565b6117dc848484611319565b6117e8848484846119f3565b611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90612692565b60405180910390fd5b50505050565b60606000821415611875576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611989565b600082905060005b600082146118a757808061189090612b57565b915050600a826118a091906129d9565b915061187d565b60008167ffffffffffffffff8111156118c3576118c2612c8d565b5b6040519080825280601f01601f1916602001820160405280156118f55781602001600182028036833780820191505090505b5090505b600085146119825760018261190e9190612a0a565b9150600a8561191d9190612ba0565b60306119299190612983565b60f81b81838151811061193f5761193e612c5e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561197b91906129d9565b94506118f9565b8093505050505b919050565b505050565b505050565b6119a28383611b8a565b6119af60008484846119f3565b6119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590612692565b60405180910390fd5b505050565b6000611a148473ffffffffffffffffffffffffffffffffffffffff16611d64565b15611b7d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611a3d611096565b8786866040518563ffffffff1660e01b8152600401611a5f9493929190612609565b602060405180830381600087803b158015611a7957600080fd5b505af1925050508015611aaa57506040513d601f19601f82011682018060405250810190611aa7919061224a565b60015b611b2d573d8060008114611ada576040519150601f19603f3d011682016040523d82523d6000602084013e611adf565b606091505b50600081511415611b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1c90612692565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611b82565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf1906127d2565b60405180910390fd5b611c0381611108565b15611c43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3a906126f2565b60405180910390fd5b611c4f6000838361198e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c9f9190612983565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d6060008383611993565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b828054611d9390612af4565b90600052602060002090601f016020900481019282611db55760008555611dfc565b82601f10611dce57805160ff1916838001178555611dfc565b82800160010185558215611dfc579182015b82811115611dfb578251825591602001919060010190611de0565b5b509050611e099190611e0d565b5090565b5b80821115611e26576000816000905550600101611e0e565b5090565b6000611e3d611e38846128b2565b61288d565b90508083825260208201905082856020860282011115611e6057611e5f612cc1565b5b60005b85811015611e905781611e768882611f1e565b845260208401935060208301925050600181019050611e63565b5050509392505050565b6000611ead611ea8846128de565b61288d565b905082815260208101848484011115611ec957611ec8612cc6565b5b611ed4848285612ab2565b509392505050565b6000611eef611eea8461290f565b61288d565b905082815260208101848484011115611f0b57611f0a612cc6565b5b611f16848285612ab2565b509392505050565b600081359050611f2d816130ef565b92915050565b600082601f830112611f4857611f47612cbc565b5b8135611f58848260208601611e2a565b91505092915050565b600081359050611f7081613106565b92915050565b600081359050611f858161311d565b92915050565b600081519050611f9a8161311d565b92915050565b600082601f830112611fb557611fb4612cbc565b5b8135611fc5848260208601611e9a565b91505092915050565b600082601f830112611fe357611fe2612cbc565b5b8135611ff3848260208601611edc565b91505092915050565b60008135905061200b81613134565b92915050565b60006020828403121561202757612026612cd0565b5b600061203584828501611f1e565b91505092915050565b6000806040838503121561205557612054612cd0565b5b600061206385828601611f1e565b925050602061207485828601611f1e565b9150509250929050565b60008060006060848603121561209757612096612cd0565b5b60006120a586828701611f1e565b93505060206120b686828701611f1e565b92505060406120c786828701611ffc565b9150509250925092565b600080600080608085870312156120eb576120ea612cd0565b5b60006120f987828801611f1e565b945050602061210a87828801611f1e565b935050604061211b87828801611ffc565b925050606085013567ffffffffffffffff81111561213c5761213b612ccb565b5b61214887828801611fa0565b91505092959194509250565b6000806040838503121561216b5761216a612cd0565b5b600061217985828601611f1e565b925050602061218a85828601611f61565b9150509250929050565b600080604083850312156121ab576121aa612cd0565b5b60006121b985828601611f1e565b92505060206121ca85828601611ffc565b9150509250929050565b6000602082840312156121ea576121e9612cd0565b5b600082013567ffffffffffffffff81111561220857612207612ccb565b5b61221484828501611f33565b91505092915050565b60006020828403121561223357612232612cd0565b5b600061224184828501611f76565b91505092915050565b6000602082840312156122605761225f612cd0565b5b600061226e84828501611f8b565b91505092915050565b60006020828403121561228d5761228c612cd0565b5b600082013567ffffffffffffffff8111156122ab576122aa612ccb565b5b6122b784828501611fce565b91505092915050565b6000602082840312156122d6576122d5612cd0565b5b60006122e484828501611ffc565b91505092915050565b6122f681612a3e565b82525050565b61230581612a50565b82525050565b600061231682612940565b6123208185612956565b9350612330818560208601612ac1565b61233981612cd5565b840191505092915050565b600061234f8261294b565b6123598185612967565b9350612369818560208601612ac1565b61237281612cd5565b840191505092915050565b60006123888261294b565b6123928185612978565b93506123a2818560208601612ac1565b80840191505092915050565b60006123bb603283612967565b91506123c682612ce6565b604082019050919050565b60006123de602683612967565b91506123e982612d35565b604082019050919050565b6000612401602583612967565b915061240c82612d84565b604082019050919050565b6000612424601c83612967565b915061242f82612dd3565b602082019050919050565b6000612447602483612967565b915061245282612dfc565b604082019050919050565b600061246a601983612967565b915061247582612e4b565b602082019050919050565b600061248d602c83612967565b915061249882612e74565b604082019050919050565b60006124b0603883612967565b91506124bb82612ec3565b604082019050919050565b60006124d3602a83612967565b91506124de82612f12565b604082019050919050565b60006124f6602983612967565b915061250182612f61565b604082019050919050565b6000612519602083612967565b915061252482612fb0565b602082019050919050565b600061253c602c83612967565b915061254782612fd9565b604082019050919050565b600061255f602083612967565b915061256a82613028565b602082019050919050565b6000612582602183612967565b915061258d82613051565b604082019050919050565b60006125a5603183612967565b91506125b0826130a0565b604082019050919050565b6125c481612aa8565b82525050565b60006125d6828561237d565b91506125e2828461237d565b91508190509392505050565b600060208201905061260360008301846122ed565b92915050565b600060808201905061261e60008301876122ed565b61262b60208301866122ed565b61263860408301856125bb565b818103606083015261264a818461230b565b905095945050505050565b600060208201905061266a60008301846122fc565b92915050565b6000602082019050818103600083015261268a8184612344565b905092915050565b600060208201905081810360008301526126ab816123ae565b9050919050565b600060208201905081810360008301526126cb816123d1565b9050919050565b600060208201905081810360008301526126eb816123f4565b9050919050565b6000602082019050818103600083015261270b81612417565b9050919050565b6000602082019050818103600083015261272b8161243a565b9050919050565b6000602082019050818103600083015261274b8161245d565b9050919050565b6000602082019050818103600083015261276b81612480565b9050919050565b6000602082019050818103600083015261278b816124a3565b9050919050565b600060208201905081810360008301526127ab816124c6565b9050919050565b600060208201905081810360008301526127cb816124e9565b9050919050565b600060208201905081810360008301526127eb8161250c565b9050919050565b6000602082019050818103600083015261280b8161252f565b9050919050565b6000602082019050818103600083015261282b81612552565b9050919050565b6000602082019050818103600083015261284b81612575565b9050919050565b6000602082019050818103600083015261286b81612598565b9050919050565b600060208201905061288760008301846125bb565b92915050565b60006128976128a8565b90506128a38282612b26565b919050565b6000604051905090565b600067ffffffffffffffff8211156128cd576128cc612c8d565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156128f9576128f8612c8d565b5b61290282612cd5565b9050602081019050919050565b600067ffffffffffffffff82111561292a57612929612c8d565b5b61293382612cd5565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061298e82612aa8565b915061299983612aa8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129ce576129cd612bd1565b5b828201905092915050565b60006129e482612aa8565b91506129ef83612aa8565b9250826129ff576129fe612c00565b5b828204905092915050565b6000612a1582612aa8565b9150612a2083612aa8565b925082821015612a3357612a32612bd1565b5b828203905092915050565b6000612a4982612a88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612adf578082015181840152602081019050612ac4565b83811115612aee576000848401525b50505050565b60006002820490506001821680612b0c57607f821691505b60208210811415612b2057612b1f612c2f565b5b50919050565b612b2f82612cd5565b810181811067ffffffffffffffff82111715612b4e57612b4d612c8d565b5b80604052505050565b6000612b6282612aa8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b9557612b94612bd1565b5b600182019050919050565b6000612bab82612aa8565b9150612bb683612aa8565b925082612bc657612bc5612c00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6130f881612a3e565b811461310357600080fd5b50565b61310f81612a50565b811461311a57600080fd5b50565b61312681612a5c565b811461313157600080fd5b50565b61313d81612aa8565b811461314857600080fd5b5056fea264697066735822122030c96d8a1b396ee652fa9a75440b785ba46b538537d88f0fc9551ec8f2bea18264736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000003e80000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001b4361726c69746f2054696d656c65737320436f6c6c656374696f6e000000000000000000000000000000000000000000000000000000000000000000000000074341524c49544f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005168747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f516d54583876336441674a3270545841694b3178707a7767726d4c5261326f796742704352644c696e514371564b2f000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Carlito Timeless Collection
Arg [1] : _symbol (string): CARLITO
Arg [2] : _maxSupply (uint256): 1000
Arg [3] : _baseUri (string): https://gateway.pinata.cloud/ipfs/QmTX8v3dAgJ2pTXAiK1xpzwgrmLRa2oygBpCRdLinQCqVK/

-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 000000000000000000000000000000000000000000000000000000000000001b
Arg [5] : 4361726c69746f2054696d656c65737320436f6c6c656374696f6e0000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [7] : 4341524c49544f00000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000051
Arg [9] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [10] : 732f516d54583876336441674a3270545841694b3178707a7767726d4c526132
Arg [11] : 6f796742704352644c696e514371564b2f000000000000000000000000000000


Deployed Bytecode Sourcemap

38275:2631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39620:197;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21300:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22239:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23783:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23312:407;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40310:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24525:337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39421:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40531:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39006:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24931:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40015:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21935:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21667:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35996:103;;;:::i;:::-;;35349:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22406:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24072:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25185:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40642:261;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40430:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24296:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36252:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39620:197;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39695:19:::1;39703:3;:10;39695:7;:19::i;:::-;39687:28;;;::::0;::::1;;39731:9;39726:84;39750:3;:10;39746:1;:14;39726:84;;;39782:16;39791:3;39795:1;39791:6;;;;;;;;:::i;:::-;;;;;;;;39782:8;:16::i;:::-;39762:3;;;;;:::i;:::-;;;;39726:84;;;;39620:197:::0;:::o;21300:305::-;21402:4;21454:25;21439:40;;;:11;:40;;;;:105;;;;21511:33;21496:48;;;:11;:48;;;;21439:105;:158;;;;21561:36;21585:11;21561:23;:36::i;:::-;21439:158;21419:178;;21300:305;;;:::o;22239:100::-;22293:13;22326:5;22319:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22239:100;:::o;23783:219::-;23859:7;23887:16;23895:7;23887;:16::i;:::-;23879:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23970:15;:24;23986:7;23970:24;;;;;;;;;;;;;;;;;;;;;23963:31;;23783:219;;;:::o;23312:407::-;23393:13;23409:23;23424:7;23409:14;:23::i;:::-;23393:39;;23457:5;23451:11;;:2;:11;;;;23443:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23549:5;23533:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23558:37;23575:5;23582:12;:10;:12::i;:::-;23558:16;:37::i;:::-;23533:62;23511:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23690:21;23699:2;23703:7;23690:8;:21::i;:::-;23382:337;23312:407;;:::o;40310:108::-;40354:7;40409:1;40381:25;:15;:23;:25::i;:::-;:29;;;;:::i;:::-;40374:36;;40310:108;:::o;24525:337::-;24720:41;24739:12;:10;:12::i;:::-;24753:7;24720:18;:41::i;:::-;24712:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24826:28;24836:4;24842:2;24846:7;24826:9;:28::i;:::-;24525:337;;;:::o;39421:193::-;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39503:15:::1;39511:6;39503:7;:15::i;:::-;39495:24;;;::::0;::::1;;39535:9;39530:77;39554:6;39550:1;:10;39530:77;;;39582:13;39591:3;39582:8;:13::i;:::-;39562:3;;;;;:::i;:::-;;;;39530:77;;;;39421:193:::0;;:::o;40531:103::-;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40618:8:::1;40608:7;:18;;;;;;;;;;;;:::i;:::-;;40531:103:::0;:::o;39006:210::-;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39072:10:::1;39080:1;39072:7;:10::i;:::-;39064:19;;;::::0;::::1;;39094:15;39112:25;:15;:23;:25::i;:::-;39094:43;;39148:27;:15;:25;:27::i;:::-;39186:22;39196:2;39200:7;39186:9;:22::i;:::-;39053:163;39006:210:::0;:::o;24931:185::-;25069:39;25086:4;25092:2;25096:7;25069:39;;;;;;;;;;;;:16;:39::i;:::-;24931:185;;;:::o;40015:124::-;40069:4;40124:6;40111:10;;:19;;;;:::i;:::-;40093:13;:11;:13::i;:::-;:38;;40086:45;;40015:124;;;:::o;21935:239::-;22007:7;22027:13;22043:7;:16;22051:7;22043:16;;;;;;;;;;;;;;;;;;;;;22027:32;;22095:1;22078:19;;:5;:19;;;;22070:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22161:5;22154:12;;;21935:239;;;:::o;21667:208::-;21739:7;21784:1;21767:19;;:5;:19;;;;21759:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21851:9;:16;21861:5;21851:16;;;;;;;;;;;;;;;;21844:23;;21667:208;;;:::o;35996:103::-;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36061:30:::1;36088:1;36061:18;:30::i;:::-;35996:103::o:0;35349:87::-;35395:7;35422:6;;;;;;;;;;;35415:13;;35349:87;:::o;22406:104::-;22462:13;22495:7;22488:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22406:104;:::o;24072:155::-;24167:52;24186:12;:10;:12::i;:::-;24200:8;24210;24167:18;:52::i;:::-;24072:155;;:::o;25185:328::-;25360:41;25379:12;:10;:12::i;:::-;25393:7;25360:18;:41::i;:::-;25352:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25466:39;25480:4;25486:2;25490:7;25499:5;25466:13;:39::i;:::-;25185:328;;;;:::o;40642:261::-;40744:13;40837:14;:12;:14::i;:::-;40853:26;40870:8;40853:16;:26::i;:::-;40820:60;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40775:120;;40642:261;;;:::o;40430:93::-;40475:13;40508:7;40501:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40430:93;:::o;24296:164::-;24393:4;24417:18;:25;24436:5;24417:25;;;;;;;;;;;;;;;:35;24443:8;24417:35;;;;;;;;;;;;;;;;;;;;;;;;;24410:42;;24296:164;;;;:::o;36252:201::-;35578:12;:10;:12::i;:::-;35567:23;;:7;:5;:7::i;:::-;:23;;;35559:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36361:1:::1;36341:22;;:8;:22;;;;36333:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36417:28;36436:8;36417:18;:28::i;:::-;36252:201:::0;:::o;37769:127::-;37876:1;37858:7;:14;;;:19;;;;;;;;;;;37769:127;:::o;16658:98::-;16711:7;16738:10;16731:17;;16658:98;:::o;19789:157::-;19874:4;19913:25;19898:40;;;:11;:40;;;;19891:47;;19789:157;;;:::o;27019:127::-;27084:4;27136:1;27108:30;;:7;:16;27116:7;27108:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27101:37;;27019:127;;;:::o;31123:174::-;31225:2;31198:15;:24;31214:7;31198:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31281:7;31277:2;31243:46;;31252:23;31267:7;31252:14;:23::i;:::-;31243:46;;;;;;;;;;;;31123:174;;:::o;37649:114::-;37714:7;37741;:14;;;37734:21;;37649:114;;;:::o;27311:348::-;27404:4;27429:16;27437:7;27429;:16::i;:::-;27421:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27505:13;27521:23;27536:7;27521:14;:23::i;:::-;27505:39;;27574:5;27563:16;;:7;:16;;;:52;;;;27583:32;27600:5;27607:7;27583:16;:32::i;:::-;27563:52;:87;;;;27643:7;27619:31;;:20;27631:7;27619:11;:20::i;:::-;:31;;;27563:87;27555:96;;;27311:348;;;;:::o;30392:615::-;30551:4;30524:31;;:23;30539:7;30524:14;:23::i;:::-;:31;;;30516:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30630:1;30616:16;;:2;:16;;;;30608:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30684:39;30705:4;30711:2;30715:7;30684:20;:39::i;:::-;30786:29;30803:1;30807:7;30786:8;:29::i;:::-;30845:1;30826:9;:15;30836:4;30826:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30874:1;30857:9;:13;30867:2;30857:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30905:2;30886:7;:16;30894:7;30886:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30942:7;30938:2;30923:27;;30932:4;30923:27;;;;;;;;;;;;30961:38;30981:4;30987:2;30991:7;30961:19;:38::i;:::-;30392:615;;;:::o;27999:110::-;28075:26;28085:2;28089:7;28075:26;;;;;;;;;;;;:9;:26::i;:::-;27999:110;;:::o;36611:191::-;36685:16;36704:6;;;;;;;;;;;36685:25;;36730:8;36721:6;;:17;;;;;;;;;;;;;;;;;;36785:8;36754:40;;36775:8;36754:40;;;;;;;;;;;;36674:128;36611:191;:::o;31437:315::-;31592:8;31583:17;;:5;:17;;;;31575:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31679:8;31641:18;:25;31660:5;31641:25;;;;;;;;;;;;;;;:35;31667:8;31641:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31725:8;31703:41;;31718:5;31703:41;;;31735:8;31703:41;;;;;;:::i;:::-;;;;;;;;31437:315;;;:::o;26393:::-;26550:28;26560:4;26566:2;26570:7;26550:9;:28::i;:::-;26597:48;26620:4;26626:2;26630:7;26639:5;26597:22;:48::i;:::-;26589:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26393:315;;;;:::o;17203:721::-;17259:13;17487:1;17478:5;:10;17474:53;;;17505:10;;;;;;;;;;;;;;;;;;;;;17474:53;17537:12;17552:5;17537:20;;17568:14;17593:78;17608:1;17600:4;:9;17593:78;;17626:8;;;;;:::i;:::-;;;;17657:2;17649:10;;;;;:::i;:::-;;;17593:78;;;17681:19;17713:6;17703:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17681:39;;17731:154;17747:1;17738:5;:10;17731:154;;17775:1;17765:11;;;;;:::i;:::-;;;17842:2;17834:5;:10;;;;:::i;:::-;17821:2;:24;;;;:::i;:::-;17808:39;;17791:6;17798;17791:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17871:2;17862:11;;;;;:::i;:::-;;;17731:154;;;17909:6;17895:21;;;;;17203:721;;;;:::o;33684:126::-;;;;:::o;34193:125::-;;;;:::o;28334:321::-;28464:18;28470:2;28474:7;28464:5;:18::i;:::-;28515:54;28546:1;28550:2;28554:7;28563:5;28515:22;:54::i;:::-;28493:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28334:321;;;:::o;32315:799::-;32470:4;32491:15;:2;:13;;;:15::i;:::-;32487:620;;;32543:2;32527:36;;;32564:12;:10;:12::i;:::-;32578:4;32584:7;32593:5;32527:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32523:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32786:1;32769:6;:13;:18;32765:272;;;32812:60;;;;;;;;;;:::i;:::-;;;;;;;;32765:272;32987:6;32981:13;32972:6;32968:2;32964:15;32957:38;32523:529;32660:41;;;32650:51;;;:6;:51;;;;32643:58;;;;;32487:620;33091:4;33084:11;;32315:799;;;;;;;:::o;28989:431::-;29083:1;29069:16;;:2;:16;;;;29061:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29142:16;29150:7;29142;:16::i;:::-;29141:17;29133:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29202:45;29231:1;29235:2;29239:7;29202:20;:45::i;:::-;29275:1;29258:9;:13;29268:2;29258:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29306:2;29287:7;:16;29295:7;29287:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29349:7;29345:2;29324:33;;29341:1;29324:33;;;;;;;;;;;;29368:44;29396:1;29400:2;29404:7;29368:19;:44::i;:::-;28989:431;;:::o;8771:324::-;8831:4;9086:1;9064:7;:19;;;:23;9057:30;;8771:324;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:::-;12573:3;12594:67;12658:2;12653:3;12594:67;:::i;:::-;12587:74;;12670:93;12759:3;12670:93;:::i;:::-;12788:2;12783:3;12779:12;12772:19;;12431:366;;;:::o;12803:::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:::-;13317:3;13338:67;13402:2;13397:3;13338:67;:::i;:::-;13331:74;;13414:93;13503:3;13414:93;:::i;:::-;13532:2;13527:3;13523:12;13516:19;;13175:366;;;:::o;13547:::-;13689:3;13710:67;13774:2;13769:3;13710:67;:::i;:::-;13703:74;;13786:93;13875:3;13786:93;:::i;:::-;13904:2;13899:3;13895:12;13888:19;;13547:366;;;:::o;13919:::-;14061:3;14082:67;14146:2;14141:3;14082:67;:::i;:::-;14075:74;;14158:93;14247:3;14158:93;:::i;:::-;14276:2;14271:3;14267:12;14260:19;;13919:366;;;:::o;14291:::-;14433:3;14454:67;14518:2;14513:3;14454:67;:::i;:::-;14447:74;;14530:93;14619:3;14530:93;:::i;:::-;14648:2;14643:3;14639:12;14632:19;;14291:366;;;:::o;14663:::-;14805:3;14826:67;14890:2;14885:3;14826:67;:::i;:::-;14819:74;;14902:93;14991:3;14902:93;:::i;:::-;15020:2;15015:3;15011:12;15004:19;;14663:366;;;:::o;15035:::-;15177:3;15198:67;15262:2;15257:3;15198:67;:::i;:::-;15191:74;;15274:93;15363:3;15274:93;:::i;:::-;15392:2;15387:3;15383:12;15376:19;;15035:366;;;:::o;15407:::-;15549:3;15570:67;15634:2;15629:3;15570:67;:::i;:::-;15563:74;;15646:93;15735:3;15646:93;:::i;:::-;15764:2;15759:3;15755:12;15748:19;;15407:366;;;:::o;15779:118::-;15866:24;15884:5;15866:24;:::i;:::-;15861:3;15854:37;15779:118;;:::o;15903:435::-;16083:3;16105:95;16196:3;16187:6;16105:95;:::i;:::-;16098:102;;16217:95;16308:3;16299:6;16217:95;:::i;:::-;16210:102;;16329:3;16322:10;;15903:435;;;;;:::o;16344:222::-;16437:4;16475:2;16464:9;16460:18;16452:26;;16488:71;16556:1;16545:9;16541:17;16532:6;16488:71;:::i;:::-;16344:222;;;;:::o;16572:640::-;16767:4;16805:3;16794:9;16790:19;16782:27;;16819:71;16887:1;16876:9;16872:17;16863:6;16819:71;:::i;:::-;16900:72;16968:2;16957:9;16953:18;16944:6;16900:72;:::i;:::-;16982;17050:2;17039:9;17035:18;17026:6;16982:72;:::i;:::-;17101:9;17095:4;17091:20;17086:2;17075:9;17071:18;17064:48;17129:76;17200:4;17191:6;17129:76;:::i;:::-;17121:84;;16572:640;;;;;;;:::o;17218:210::-;17305:4;17343:2;17332:9;17328:18;17320:26;;17356:65;17418:1;17407:9;17403:17;17394:6;17356:65;:::i;:::-;17218:210;;;;:::o;17434:313::-;17547:4;17585:2;17574:9;17570:18;17562:26;;17634:9;17628:4;17624:20;17620:1;17609:9;17605:17;17598:47;17662:78;17735:4;17726:6;17662:78;:::i;:::-;17654:86;;17434:313;;;;:::o;17753:419::-;17919:4;17957:2;17946:9;17942:18;17934:26;;18006:9;18000:4;17996:20;17992:1;17981:9;17977:17;17970:47;18034:131;18160:4;18034:131;:::i;:::-;18026:139;;17753:419;;;:::o;18178:::-;18344:4;18382:2;18371:9;18367:18;18359:26;;18431:9;18425:4;18421:20;18417:1;18406:9;18402:17;18395:47;18459:131;18585:4;18459:131;:::i;:::-;18451:139;;18178:419;;;:::o;18603:::-;18769:4;18807:2;18796:9;18792:18;18784:26;;18856:9;18850:4;18846:20;18842:1;18831:9;18827:17;18820:47;18884:131;19010:4;18884:131;:::i;:::-;18876:139;;18603:419;;;:::o;19028:::-;19194:4;19232:2;19221:9;19217:18;19209:26;;19281:9;19275:4;19271:20;19267:1;19256:9;19252:17;19245:47;19309:131;19435:4;19309:131;:::i;:::-;19301:139;;19028:419;;;:::o;19453:::-;19619:4;19657:2;19646:9;19642:18;19634:26;;19706:9;19700:4;19696:20;19692:1;19681:9;19677:17;19670:47;19734:131;19860:4;19734:131;:::i;:::-;19726:139;;19453:419;;;:::o;19878:::-;20044:4;20082:2;20071:9;20067:18;20059:26;;20131:9;20125:4;20121:20;20117:1;20106:9;20102:17;20095:47;20159:131;20285:4;20159:131;:::i;:::-;20151:139;;19878:419;;;:::o;20303:::-;20469:4;20507:2;20496:9;20492:18;20484:26;;20556:9;20550:4;20546:20;20542:1;20531:9;20527:17;20520:47;20584:131;20710:4;20584:131;:::i;:::-;20576:139;;20303:419;;;:::o;20728:::-;20894:4;20932:2;20921:9;20917:18;20909:26;;20981:9;20975:4;20971:20;20967:1;20956:9;20952:17;20945:47;21009:131;21135:4;21009:131;:::i;:::-;21001:139;;20728:419;;;:::o;21153:::-;21319:4;21357:2;21346:9;21342:18;21334:26;;21406:9;21400:4;21396:20;21392:1;21381:9;21377:17;21370:47;21434:131;21560:4;21434:131;:::i;:::-;21426:139;;21153:419;;;:::o;21578:::-;21744:4;21782:2;21771:9;21767:18;21759:26;;21831:9;21825:4;21821:20;21817:1;21806:9;21802:17;21795:47;21859:131;21985:4;21859:131;:::i;:::-;21851:139;;21578:419;;;:::o;22003:::-;22169:4;22207:2;22196:9;22192:18;22184:26;;22256:9;22250:4;22246:20;22242:1;22231:9;22227:17;22220:47;22284:131;22410:4;22284:131;:::i;:::-;22276:139;;22003:419;;;:::o;22428:::-;22594:4;22632:2;22621:9;22617:18;22609:26;;22681:9;22675:4;22671:20;22667:1;22656:9;22652:17;22645:47;22709:131;22835:4;22709:131;:::i;:::-;22701:139;;22428:419;;;:::o;22853:::-;23019:4;23057:2;23046:9;23042:18;23034:26;;23106:9;23100:4;23096:20;23092:1;23081:9;23077:17;23070:47;23134:131;23260:4;23134:131;:::i;:::-;23126:139;;22853:419;;;:::o;23278:::-;23444:4;23482:2;23471:9;23467:18;23459:26;;23531:9;23525:4;23521:20;23517:1;23506:9;23502:17;23495:47;23559:131;23685:4;23559:131;:::i;:::-;23551:139;;23278:419;;;:::o;23703:::-;23869:4;23907:2;23896:9;23892:18;23884:26;;23956:9;23950:4;23946:20;23942:1;23931:9;23927:17;23920:47;23984:131;24110:4;23984:131;:::i;:::-;23976:139;;23703:419;;;:::o;24128:222::-;24221:4;24259:2;24248:9;24244:18;24236:26;;24272:71;24340:1;24329:9;24325:17;24316:6;24272:71;:::i;:::-;24128:222;;;;:::o;24356:129::-;24390:6;24417:20;;:::i;:::-;24407:30;;24446:33;24474:4;24466:6;24446:33;:::i;:::-;24356:129;;;:::o;24491:75::-;24524:6;24557:2;24551:9;24541:19;;24491:75;:::o;24572:311::-;24649:4;24739:18;24731:6;24728:30;24725:56;;;24761:18;;:::i;:::-;24725:56;24811:4;24803:6;24799:17;24791:25;;24871:4;24865;24861:15;24853:23;;24572:311;;;:::o;24889:307::-;24950:4;25040:18;25032:6;25029:30;25026:56;;;25062:18;;:::i;:::-;25026:56;25100:29;25122:6;25100:29;:::i;:::-;25092:37;;25184:4;25178;25174:15;25166:23;;24889:307;;;:::o;25202:308::-;25264:4;25354:18;25346:6;25343:30;25340:56;;;25376:18;;:::i;:::-;25340:56;25414:29;25436:6;25414:29;:::i;:::-;25406:37;;25498:4;25492;25488:15;25480:23;;25202:308;;;:::o;25516:98::-;25567:6;25601:5;25595:12;25585:22;;25516:98;;;:::o;25620:99::-;25672:6;25706:5;25700:12;25690:22;;25620:99;;;:::o;25725:168::-;25808:11;25842:6;25837:3;25830:19;25882:4;25877:3;25873:14;25858:29;;25725:168;;;;:::o;25899:169::-;25983:11;26017:6;26012:3;26005:19;26057:4;26052:3;26048:14;26033:29;;25899:169;;;;:::o;26074:148::-;26176:11;26213:3;26198:18;;26074:148;;;;:::o;26228:305::-;26268:3;26287:20;26305:1;26287:20;:::i;:::-;26282:25;;26321:20;26339:1;26321:20;:::i;:::-;26316:25;;26475:1;26407:66;26403:74;26400:1;26397:81;26394:107;;;26481:18;;:::i;:::-;26394:107;26525:1;26522;26518:9;26511:16;;26228:305;;;;:::o;26539:185::-;26579:1;26596:20;26614:1;26596:20;:::i;:::-;26591:25;;26630:20;26648:1;26630:20;:::i;:::-;26625:25;;26669:1;26659:35;;26674:18;;:::i;:::-;26659:35;26716:1;26713;26709:9;26704:14;;26539:185;;;;:::o;26730:191::-;26770:4;26790:20;26808:1;26790:20;:::i;:::-;26785:25;;26824:20;26842:1;26824:20;:::i;:::-;26819:25;;26863:1;26860;26857:8;26854:34;;;26868:18;;:::i;:::-;26854:34;26913:1;26910;26906:9;26898:17;;26730:191;;;;:::o;26927:96::-;26964:7;26993:24;27011:5;26993:24;:::i;:::-;26982:35;;26927:96;;;:::o;27029:90::-;27063:7;27106:5;27099:13;27092:21;27081:32;;27029:90;;;:::o;27125:149::-;27161:7;27201:66;27194:5;27190:78;27179:89;;27125:149;;;:::o;27280:126::-;27317:7;27357:42;27350:5;27346:54;27335:65;;27280:126;;;:::o;27412:77::-;27449:7;27478:5;27467:16;;27412:77;;;:::o;27495:154::-;27579:6;27574:3;27569;27556:30;27641:1;27632:6;27627:3;27623:16;27616:27;27495:154;;;:::o;27655:307::-;27723:1;27733:113;27747:6;27744:1;27741:13;27733:113;;;27832:1;27827:3;27823:11;27817:18;27813:1;27808:3;27804:11;27797:39;27769:2;27766:1;27762:10;27757:15;;27733:113;;;27864:6;27861:1;27858:13;27855:101;;;27944:1;27935:6;27930:3;27926:16;27919:27;27855:101;27704:258;27655:307;;;:::o;27968:320::-;28012:6;28049:1;28043:4;28039:12;28029:22;;28096:1;28090:4;28086:12;28117:18;28107:81;;28173:4;28165:6;28161:17;28151:27;;28107:81;28235:2;28227:6;28224:14;28204:18;28201:38;28198:84;;;28254:18;;:::i;:::-;28198:84;28019:269;27968:320;;;:::o;28294:281::-;28377:27;28399:4;28377:27;:::i;:::-;28369:6;28365:40;28507:6;28495:10;28492:22;28471:18;28459:10;28456:34;28453:62;28450:88;;;28518:18;;:::i;:::-;28450:88;28558:10;28554:2;28547:22;28337:238;28294:281;;:::o;28581:233::-;28620:3;28643:24;28661:5;28643:24;:::i;:::-;28634:33;;28689:66;28682:5;28679:77;28676:103;;;28759:18;;:::i;:::-;28676:103;28806:1;28799:5;28795:13;28788:20;;28581:233;;;:::o;28820:176::-;28852:1;28869:20;28887:1;28869:20;:::i;:::-;28864:25;;28903:20;28921:1;28903:20;:::i;:::-;28898:25;;28942:1;28932:35;;28947:18;;:::i;:::-;28932:35;28988:1;28985;28981:9;28976:14;;28820:176;;;;:::o;29002:180::-;29050:77;29047:1;29040:88;29147:4;29144:1;29137:15;29171:4;29168:1;29161:15;29188:180;29236:77;29233:1;29226:88;29333:4;29330:1;29323:15;29357:4;29354:1;29347:15;29374:180;29422:77;29419:1;29412:88;29519:4;29516:1;29509:15;29543:4;29540:1;29533:15;29560:180;29608:77;29605:1;29598:88;29705:4;29702:1;29695:15;29729:4;29726:1;29719:15;29746:180;29794:77;29791:1;29784:88;29891:4;29888:1;29881:15;29915:4;29912:1;29905:15;29932:117;30041:1;30038;30031:12;30055:117;30164:1;30161;30154:12;30178:117;30287:1;30284;30277:12;30301:117;30410:1;30407;30400:12;30424:117;30533:1;30530;30523:12;30547:102;30588:6;30639:2;30635:7;30630:2;30623:5;30619:14;30615:28;30605:38;;30547:102;;;:::o;30655:237::-;30795:34;30791:1;30783:6;30779:14;30772:58;30864:20;30859:2;30851:6;30847:15;30840:45;30655:237;:::o;30898:225::-;31038:34;31034:1;31026:6;31022:14;31015:58;31107:8;31102:2;31094:6;31090:15;31083:33;30898:225;:::o;31129:224::-;31269:34;31265:1;31257:6;31253:14;31246:58;31338:7;31333:2;31325:6;31321:15;31314:32;31129:224;:::o;31359:178::-;31499:30;31495:1;31487:6;31483:14;31476:54;31359:178;:::o;31543:223::-;31683:34;31679:1;31671:6;31667:14;31660:58;31752:6;31747:2;31739:6;31735:15;31728:31;31543:223;:::o;31772:175::-;31912:27;31908:1;31900:6;31896:14;31889:51;31772:175;:::o;31953:231::-;32093:34;32089:1;32081:6;32077:14;32070:58;32162:14;32157:2;32149:6;32145:15;32138:39;31953:231;:::o;32190:243::-;32330:34;32326:1;32318:6;32314:14;32307:58;32399:26;32394:2;32386:6;32382:15;32375:51;32190:243;:::o;32439:229::-;32579:34;32575:1;32567:6;32563:14;32556:58;32648:12;32643:2;32635:6;32631:15;32624:37;32439:229;:::o;32674:228::-;32814:34;32810:1;32802:6;32798:14;32791:58;32883:11;32878:2;32870:6;32866:15;32859:36;32674:228;:::o;32908:182::-;33048:34;33044:1;33036:6;33032:14;33025:58;32908:182;:::o;33096:231::-;33236:34;33232:1;33224:6;33220:14;33213:58;33305:14;33300:2;33292:6;33288:15;33281:39;33096:231;:::o;33333:182::-;33473:34;33469:1;33461:6;33457:14;33450:58;33333:182;:::o;33521:220::-;33661:34;33657:1;33649:6;33645:14;33638:58;33730:3;33725:2;33717:6;33713:15;33706:28;33521:220;:::o;33747:236::-;33887:34;33883:1;33875:6;33871:14;33864:58;33956:19;33951:2;33943:6;33939:15;33932:44;33747:236;:::o;33989:122::-;34062:24;34080:5;34062:24;:::i;:::-;34055:5;34052:35;34042:63;;34101:1;34098;34091:12;34042:63;33989:122;:::o;34117:116::-;34187:21;34202:5;34187:21;:::i;:::-;34180:5;34177:32;34167:60;;34223:1;34220;34213:12;34167:60;34117:116;:::o;34239:120::-;34311:23;34328:5;34311:23;:::i;:::-;34304:5;34301:34;34291:62;;34349:1;34346;34339:12;34291:62;34239:120;:::o;34365:122::-;34438:24;34456:5;34438:24;:::i;:::-;34431:5;34428:35;34418:63;;34477:1;34474;34467:12;34418:63;34365:122;:::o

Swarm Source

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