ETH Price: $3,238.92 (+1.37%)
 

Overview

Max Total Supply

30 KWAMNFT

Holders

24

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 KWAMNFT
0xd7cdc5a854c23e2e35dbfb143f314552f1ce6f42
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:
KaiWaiAkibaMeetup1stNFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-01
*/

// SPDX-License-Identifier: MIT AND GPL-3.0
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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

pragma solidity ^0.8.0;

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;


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

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

pragma solidity ^0.8.0;

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


pragma solidity >=0.7.0 <0.9.0;


contract KaiWaiAkibaMeetup1stNFT is Context, ERC721Enumerable {

    using Strings for uint256;

    uint256 constant public MAX_SUPPLY = 30;
    uint256 constant public MAX_SUPPLY_DAY = 15;
    uint256 constant public MAX_SUPPLY_NIGHT = 15;
    uint256 public countAtDay = 0;
    uint256 public startTokenIdAtDay = 0;
    uint256 public countAtNight = 0;
    uint256 public startTokenIdAtNight = 15;

    constructor(
        string memory name,
        string memory symbol
    ) ERC721(name, symbol) {}

    function mintAtDay(address to) public virtual {
        require(totalSupply() + 1 <= MAX_SUPPLY, "Exceeds max supply");
        require(countAtDay + 1 <= MAX_SUPPLY_DAY, "Exceeds max supply day");
        uint256 tokenIdAtDay = startTokenIdAtDay + countAtDay;
        _mint(to, tokenIdAtDay);
        countAtDay++;
    }

    function mintAtNight(address to) public virtual {
        require(totalSupply() + 1 <= MAX_SUPPLY, "Exceeds max supply");
        require(countAtNight + 1 <= MAX_SUPPLY, "Exceeds max supply night");
        uint256 tokenIdAtNight = startTokenIdAtNight + countAtNight;
        _mint(to, tokenIdAtNight);
        countAtNight++;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        return string(abi.encodePacked("https://cielo.mypinata.cloud/ipfs/QmZuck1Y5UWkuPhWcswF9YcPTLVn5uf9oNu9aiEXHCPo2t/", tokenId.toString(), ".json"));
    }

    function getCountAtDay() public view returns (uint256) {
        return countAtDay;
    }
    function getCountAtNight() public view returns (uint256) {
        return countAtNight;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_DAY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY_NIGHT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countAtDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"countAtNight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCountAtDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCountAtNight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintAtDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mintAtNight","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"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":[],"name":"startTokenIdAtDay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTokenIdAtNight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600a556000600b556000600c55600f600d553480156200002557600080fd5b50604051620035a4380380620035a483398181016040528101906200004b9190620001b7565b818181600090805190602001906200006592919062000089565b5080600190805190602001906200007e92919062000089565b5050505050620003c0565b8280546200009790620002d1565b90600052602060002090601f016020900481019282620000bb576000855562000107565b82601f10620000d657805160ff191683800117855562000107565b8280016001018555821562000107579182015b8281111562000106578251825591602001919060010190620000e9565b5b5090506200011691906200011a565b5090565b5b80821115620001355760008160009055506001016200011b565b5090565b6000620001506200014a8462000265565b6200023c565b9050828152602081018484840111156200016f576200016e620003a0565b5b6200017c8482856200029b565b509392505050565b600082601f8301126200019c576200019b6200039b565b5b8151620001ae84826020860162000139565b91505092915050565b60008060408385031215620001d157620001d0620003aa565b5b600083015167ffffffffffffffff811115620001f257620001f1620003a5565b5b620002008582860162000184565b925050602083015167ffffffffffffffff811115620002245762000223620003a5565b5b620002328582860162000184565b9150509250929050565b6000620002486200025b565b905062000256828262000307565b919050565b6000604051905090565b600067ffffffffffffffff8211156200028357620002826200036c565b5b6200028e82620003af565b9050602081019050919050565b60005b83811015620002bb5780820151818401526020810190506200029e565b83811115620002cb576000848401525b50505050565b60006002820490506001821680620002ea57607f821691505b602082108114156200030157620003006200033d565b5b50919050565b6200031282620003af565b810181811067ffffffffffffffff821117156200033457620003336200036c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6131d480620003d06000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80635c7bbf5e116100f9578063a4238fe711610097578063c87b56dd11610071578063c87b56dd146104c0578063e3796f70146104f0578063e985e9c51461050c578063fa2c341f1461053c576101a9565b8063a4238fe714610468578063a6f57f6b14610486578063b88d4fde146104a4576101a9565b806370a08231116100d357806370a08231146103e05780638bd001e11461041057806395d89b411461042e578063a22cb4651461044c576101a9565b80635c7bbf5e146103765780636352211e14610392578063703dc7c7146103c2576101a9565b806318160ddd1161016657806332cb6b0c1161014057806332cb6b0c146102ee578063376e0e311461030c57806342842e0e1461032a5780634f6ccce714610346576101a9565b806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806310770b3814610248578063146cecb514610266575b600080fd5b6101c860048036038101906101c391906121df565b61055a565b6040516101d59190612640565b60405180910390f35b6101e66105d4565b6040516101f3919061265b565b60405180910390f35b61021660048036038101906102119190612239565b610666565b60405161022391906125d9565b60405180910390f35b6102466004803603810190610241919061219f565b6106ac565b005b6102506107c4565b60405161025d919061287d565b60405180910390f35b61026e6107ca565b60405161027b919061287d565b60405180910390f35b61028c6107d0565b604051610299919061287d565b60405180910390f35b6102bc60048036038101906102b79190612089565b6107dd565b005b6102d860048036038101906102d3919061219f565b61083d565b6040516102e5919061287d565b60405180910390f35b6102f66108e2565b604051610303919061287d565b60405180910390f35b6103146108e7565b604051610321919061287d565b60405180910390f35b610344600480360381019061033f9190612089565b6108f1565b005b610360600480360381019061035b9190612239565b610911565b60405161036d919061287d565b60405180910390f35b610390600480360381019061038b919061201c565b610982565b005b6103ac60048036038101906103a79190612239565b610a65565b6040516103b991906125d9565b60405180910390f35b6103ca610b17565b6040516103d7919061287d565b60405180910390f35b6103fa60048036038101906103f5919061201c565b610b1d565b604051610407919061287d565b60405180910390f35b610418610bd5565b604051610425919061287d565b60405180910390f35b610436610bda565b604051610443919061265b565b60405180910390f35b6104666004803603810190610461919061215f565b610c6c565b005b610470610c82565b60405161047d919061287d565b60405180910390f35b61048e610c88565b60405161049b919061287d565b60405180910390f35b6104be60048036038101906104b991906120dc565b610c92565b005b6104da60048036038101906104d59190612239565b610cf4565b6040516104e7919061265b565b60405180910390f35b61050a6004803603810190610505919061201c565b610d25565b005b61052660048036038101906105219190612049565b610e08565b6040516105339190612640565b60405180910390f35b610544610e9c565b604051610551919061287d565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105cd57506105cc82610ea1565b5b9050919050565b6060600080546105e390612aa2565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90612aa2565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600061067182610f83565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106b782610a65565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f9061281d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610747610fce565b73ffffffffffffffffffffffffffffffffffffffff161480610776575061077581610770610fce565b610e08565b5b6107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac9061277d565b60405180910390fd5b6107bf8383610fd6565b505050565b600c5481565b600d5481565b6000600880549050905090565b6107ee6107e8610fce565b8261108f565b61082d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108249061285d565b60405180910390fd5b610838838383611124565b505050565b600061084883610b1d565b8210610889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108809061267d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601e81565b6000600a54905090565b61090c83838360405180602001604052806000815250610c92565b505050565b600061091b6107d0565b821061095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109539061283d565b60405180910390fd5b600882815481106109705761096f612c3b565b5b90600052602060002001549050919050565b601e600161098e6107d0565b6109989190612931565b11156109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d09061275d565b60405180910390fd5b601e6001600c546109ea9190612931565b1115610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a22906127dd565b60405180910390fd5b6000600c54600d54610a3d9190612931565b9050610a49828261138b565b600c6000815480929190610a5c90612b05565b91905055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906127fd565b60405180910390fd5b80915050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b859061273d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f81565b606060018054610be990612aa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590612aa2565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b610c7e610c77610fce565b8383611565565b5050565b600b5481565b6000600c54905090565b610ca3610c9d610fce565b8361108f565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd99061285d565b60405180910390fd5b610cee848484846116d2565b50505050565b6060610cff8261172e565b604051602001610d0f91906125ac565b6040516020818303038152906040529050919050565b601e6001610d316107d0565b610d3b9190612931565b1115610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d739061275d565b60405180910390fd5b600f6001600a54610d8d9190612931565b1115610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906127bd565b60405180910390fd5b6000600a54600b54610de09190612931565b9050610dec828261138b565b600a6000815480929190610dff90612b05565b91905055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7c5750610f7b8261188f565b5b9050919050565b610f8c816118f9565b610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906127fd565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661104983610a65565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061109b83610a65565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806110dd57506110dc8185610e08565b5b8061111b57508373ffffffffffffffffffffffffffffffffffffffff1661110384610666565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661114482610a65565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611191906126bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611201906126fd565b60405180910390fd5b611215838383611965565b611220600082610fd6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461127091906129b8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c79190612931565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611386838383611a79565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f29061279d565b60405180910390fd5b611404816118f9565b15611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906126dd565b60405180910390fd5b61145060008383611965565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a09190612931565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461156160008383611a79565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061271d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c59190612640565b60405180910390a3505050565b6116dd848484611124565b6116e984848484611a7e565b611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f9061269d565b60405180910390fd5b50505050565b60606000821415611776576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061188a565b600082905060005b600082146117a857808061179190612b05565b915050600a826117a19190612987565b915061177e565b60008167ffffffffffffffff8111156117c4576117c3612c6a565b5b6040519080825280601f01601f1916602001820160405280156117f65781602001600182028036833780820191505090505b5090505b600085146118835760018261180f91906129b8565b9150600a8561181e9190612b4e565b603061182a9190612931565b60f81b8183815181106118405761183f612c3b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561187c9190612987565b94506117fa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611970838383611c15565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119b3576119ae81611c1a565b6119f2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119f1576119f08382611c63565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3557611a3081611dd0565b611a74565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a7357611a728282611ea1565b5b5b505050565b505050565b6000611a9f8473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611c08578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ac8610fce565b8786866040518563ffffffff1660e01b8152600401611aea94939291906125f4565b602060405180830381600087803b158015611b0457600080fd5b505af1925050508015611b3557506040513d601f19601f82011682018060405250810190611b32919061220c565b60015b611bb8573d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b50600081511415611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba79061269d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c0d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611c7084610b1d565b611c7a91906129b8565b9050600060076000848152602001908152602001600020549050818114611d5f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611de491906129b8565b9050600060096000848152602001908152602001600020549050600060088381548110611e1457611e13612c3b565b5b906000526020600020015490508060088381548110611e3657611e35612c3b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611e8557611e84612c0c565b5b6001900381819060005260206000200160009055905550505050565b6000611eac83610b1d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611f56611f51846128bd565b612898565b905082815260208101848484011115611f7257611f71612c9e565b5b611f7d848285612a60565b509392505050565b600081359050611f9481613142565b92915050565b600081359050611fa981613159565b92915050565b600081359050611fbe81613170565b92915050565b600081519050611fd381613170565b92915050565b600082601f830112611fee57611fed612c99565b5b8135611ffe848260208601611f43565b91505092915050565b60008135905061201681613187565b92915050565b60006020828403121561203257612031612ca8565b5b600061204084828501611f85565b91505092915050565b600080604083850312156120605761205f612ca8565b5b600061206e85828601611f85565b925050602061207f85828601611f85565b9150509250929050565b6000806000606084860312156120a2576120a1612ca8565b5b60006120b086828701611f85565b93505060206120c186828701611f85565b92505060406120d286828701612007565b9150509250925092565b600080600080608085870312156120f6576120f5612ca8565b5b600061210487828801611f85565b945050602061211587828801611f85565b935050604061212687828801612007565b925050606085013567ffffffffffffffff81111561214757612146612ca3565b5b61215387828801611fd9565b91505092959194509250565b6000806040838503121561217657612175612ca8565b5b600061218485828601611f85565b925050602061219585828601611f9a565b9150509250929050565b600080604083850312156121b6576121b5612ca8565b5b60006121c485828601611f85565b92505060206121d585828601612007565b9150509250929050565b6000602082840312156121f5576121f4612ca8565b5b600061220384828501611faf565b91505092915050565b60006020828403121561222257612221612ca8565b5b600061223084828501611fc4565b91505092915050565b60006020828403121561224f5761224e612ca8565b5b600061225d84828501612007565b91505092915050565b61226f816129ec565b82525050565b61227e816129fe565b82525050565b600061228f826128ee565b6122998185612904565b93506122a9818560208601612a6f565b6122b281612cad565b840191505092915050565b60006122c8826128f9565b6122d28185612915565b93506122e2818560208601612a6f565b6122eb81612cad565b840191505092915050565b6000612301826128f9565b61230b8185612926565b935061231b818560208601612a6f565b80840191505092915050565b6000612334605183612926565b915061233f82612cbe565b605182019050919050565b6000612357602b83612915565b915061236282612d33565b604082019050919050565b600061237a603283612915565b915061238582612d82565b604082019050919050565b600061239d602583612915565b91506123a882612dd1565b604082019050919050565b60006123c0601c83612915565b91506123cb82612e20565b602082019050919050565b60006123e3602483612915565b91506123ee82612e49565b604082019050919050565b6000612406601983612915565b915061241182612e98565b602082019050919050565b6000612429602983612915565b915061243482612ec1565b604082019050919050565b600061244c601283612915565b915061245782612f10565b602082019050919050565b600061246f603e83612915565b915061247a82612f39565b604082019050919050565b6000612492602083612915565b915061249d82612f88565b602082019050919050565b60006124b5601683612915565b91506124c082612fb1565b602082019050919050565b60006124d8600583612926565b91506124e382612fda565b600582019050919050565b60006124fb601883612915565b915061250682613003565b602082019050919050565b600061251e601883612915565b91506125298261302c565b602082019050919050565b6000612541602183612915565b915061254c82613055565b604082019050919050565b6000612564602c83612915565b915061256f826130a4565b604082019050919050565b6000612587602e83612915565b9150612592826130f3565b604082019050919050565b6125a681612a56565b82525050565b60006125b782612327565b91506125c382846122f6565b91506125ce826124cb565b915081905092915050565b60006020820190506125ee6000830184612266565b92915050565b60006080820190506126096000830187612266565b6126166020830186612266565b612623604083018561259d565b81810360608301526126358184612284565b905095945050505050565b60006020820190506126556000830184612275565b92915050565b6000602082019050818103600083015261267581846122bd565b905092915050565b600060208201905081810360008301526126968161234a565b9050919050565b600060208201905081810360008301526126b68161236d565b9050919050565b600060208201905081810360008301526126d681612390565b9050919050565b600060208201905081810360008301526126f6816123b3565b9050919050565b60006020820190508181036000830152612716816123d6565b9050919050565b60006020820190508181036000830152612736816123f9565b9050919050565b600060208201905081810360008301526127568161241c565b9050919050565b600060208201905081810360008301526127768161243f565b9050919050565b6000602082019050818103600083015261279681612462565b9050919050565b600060208201905081810360008301526127b681612485565b9050919050565b600060208201905081810360008301526127d6816124a8565b9050919050565b600060208201905081810360008301526127f6816124ee565b9050919050565b6000602082019050818103600083015261281681612511565b9050919050565b6000602082019050818103600083015261283681612534565b9050919050565b6000602082019050818103600083015261285681612557565b9050919050565b600060208201905081810360008301526128768161257a565b9050919050565b6000602082019050612892600083018461259d565b92915050565b60006128a26128b3565b90506128ae8282612ad4565b919050565b6000604051905090565b600067ffffffffffffffff8211156128d8576128d7612c6a565b5b6128e182612cad565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061293c82612a56565b915061294783612a56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561297c5761297b612b7f565b5b828201905092915050565b600061299282612a56565b915061299d83612a56565b9250826129ad576129ac612bae565b5b828204905092915050565b60006129c382612a56565b91506129ce83612a56565b9250828210156129e1576129e0612b7f565b5b828203905092915050565b60006129f782612a36565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612a8d578082015181840152602081019050612a72565b83811115612a9c576000848401525b50505050565b60006002820490506001821680612aba57607f821691505b60208210811415612ace57612acd612bdd565b5b50919050565b612add82612cad565b810181811067ffffffffffffffff82111715612afc57612afb612c6a565b5b80604052505050565b6000612b1082612a56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b4357612b42612b7f565b5b600182019050919050565b6000612b5982612a56565b9150612b6483612a56565b925082612b7457612b73612bae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f68747470733a2f2f6369656c6f2e6d7970696e6174612e636c6f75642f69706660008201527f732f516d5a75636b31593555576b755068576373774639596350544c566e357560208201527f66396f4e7539616945584843506f32742f000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45786365656473206d617820737570706c792064617900000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c79206e696768740000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61314b816129ec565b811461315657600080fd5b50565b613162816129fe565b811461316d57600080fd5b50565b61317981612a0a565b811461318457600080fd5b50565b61319081612a56565b811461319b57600080fd5b5056fea2646970667358221220cda5fe8f705e7ad3a22fa3c94cc942586013f6527b3232f5fb830063b8e0b78f64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000174b6169576169416b6962614d65657475703173744e465400000000000000000000000000000000000000000000000000000000000000000000000000000000074b57414d4e465400000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80635c7bbf5e116100f9578063a4238fe711610097578063c87b56dd11610071578063c87b56dd146104c0578063e3796f70146104f0578063e985e9c51461050c578063fa2c341f1461053c576101a9565b8063a4238fe714610468578063a6f57f6b14610486578063b88d4fde146104a4576101a9565b806370a08231116100d357806370a08231146103e05780638bd001e11461041057806395d89b411461042e578063a22cb4651461044c576101a9565b80635c7bbf5e146103765780636352211e14610392578063703dc7c7146103c2576101a9565b806318160ddd1161016657806332cb6b0c1161014057806332cb6b0c146102ee578063376e0e311461030c57806342842e0e1461032a5780634f6ccce714610346576101a9565b806318160ddd1461028457806323b872dd146102a25780632f745c59146102be576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063081812fc146101fc578063095ea7b31461022c57806310770b3814610248578063146cecb514610266575b600080fd5b6101c860048036038101906101c391906121df565b61055a565b6040516101d59190612640565b60405180910390f35b6101e66105d4565b6040516101f3919061265b565b60405180910390f35b61021660048036038101906102119190612239565b610666565b60405161022391906125d9565b60405180910390f35b6102466004803603810190610241919061219f565b6106ac565b005b6102506107c4565b60405161025d919061287d565b60405180910390f35b61026e6107ca565b60405161027b919061287d565b60405180910390f35b61028c6107d0565b604051610299919061287d565b60405180910390f35b6102bc60048036038101906102b79190612089565b6107dd565b005b6102d860048036038101906102d3919061219f565b61083d565b6040516102e5919061287d565b60405180910390f35b6102f66108e2565b604051610303919061287d565b60405180910390f35b6103146108e7565b604051610321919061287d565b60405180910390f35b610344600480360381019061033f9190612089565b6108f1565b005b610360600480360381019061035b9190612239565b610911565b60405161036d919061287d565b60405180910390f35b610390600480360381019061038b919061201c565b610982565b005b6103ac60048036038101906103a79190612239565b610a65565b6040516103b991906125d9565b60405180910390f35b6103ca610b17565b6040516103d7919061287d565b60405180910390f35b6103fa60048036038101906103f5919061201c565b610b1d565b604051610407919061287d565b60405180910390f35b610418610bd5565b604051610425919061287d565b60405180910390f35b610436610bda565b604051610443919061265b565b60405180910390f35b6104666004803603810190610461919061215f565b610c6c565b005b610470610c82565b60405161047d919061287d565b60405180910390f35b61048e610c88565b60405161049b919061287d565b60405180910390f35b6104be60048036038101906104b991906120dc565b610c92565b005b6104da60048036038101906104d59190612239565b610cf4565b6040516104e7919061265b565b60405180910390f35b61050a6004803603810190610505919061201c565b610d25565b005b61052660048036038101906105219190612049565b610e08565b6040516105339190612640565b60405180910390f35b610544610e9c565b604051610551919061287d565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105cd57506105cc82610ea1565b5b9050919050565b6060600080546105e390612aa2565b80601f016020809104026020016040519081016040528092919081815260200182805461060f90612aa2565b801561065c5780601f106106315761010080835404028352916020019161065c565b820191906000526020600020905b81548152906001019060200180831161063f57829003601f168201915b5050505050905090565b600061067182610f83565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106b782610a65565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071f9061281d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610747610fce565b73ffffffffffffffffffffffffffffffffffffffff161480610776575061077581610770610fce565b610e08565b5b6107b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ac9061277d565b60405180910390fd5b6107bf8383610fd6565b505050565b600c5481565b600d5481565b6000600880549050905090565b6107ee6107e8610fce565b8261108f565b61082d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108249061285d565b60405180910390fd5b610838838383611124565b505050565b600061084883610b1d565b8210610889576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108809061267d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601e81565b6000600a54905090565b61090c83838360405180602001604052806000815250610c92565b505050565b600061091b6107d0565b821061095c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109539061283d565b60405180910390fd5b600882815481106109705761096f612c3b565b5b90600052602060002001549050919050565b601e600161098e6107d0565b6109989190612931565b11156109d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d09061275d565b60405180910390fd5b601e6001600c546109ea9190612931565b1115610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a22906127dd565b60405180910390fd5b6000600c54600d54610a3d9190612931565b9050610a49828261138b565b600c6000815480929190610a5c90612b05565b91905055505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b05906127fd565b60405180910390fd5b80915050919050565b600a5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b859061273d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600f81565b606060018054610be990612aa2565b80601f0160208091040260200160405190810160405280929190818152602001828054610c1590612aa2565b8015610c625780601f10610c3757610100808354040283529160200191610c62565b820191906000526020600020905b815481529060010190602001808311610c4557829003601f168201915b5050505050905090565b610c7e610c77610fce565b8383611565565b5050565b600b5481565b6000600c54905090565b610ca3610c9d610fce565b8361108f565b610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd99061285d565b60405180910390fd5b610cee848484846116d2565b50505050565b6060610cff8261172e565b604051602001610d0f91906125ac565b6040516020818303038152906040529050919050565b601e6001610d316107d0565b610d3b9190612931565b1115610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d739061275d565b60405180910390fd5b600f6001600a54610d8d9190612931565b1115610dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc5906127bd565b60405180910390fd5b6000600a54600b54610de09190612931565b9050610dec828261138b565b600a6000815480929190610dff90612b05565b91905055505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f81565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610f6c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7c5750610f7b8261188f565b5b9050919050565b610f8c816118f9565b610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906127fd565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661104983610a65565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061109b83610a65565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806110dd57506110dc8185610e08565b5b8061111b57508373ffffffffffffffffffffffffffffffffffffffff1661110384610666565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661114482610a65565b73ffffffffffffffffffffffffffffffffffffffff161461119a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611191906126bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561120a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611201906126fd565b60405180910390fd5b611215838383611965565b611220600082610fd6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461127091906129b8565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112c79190612931565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611386838383611a79565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f29061279d565b60405180910390fd5b611404816118f9565b15611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b906126dd565b60405180910390fd5b61145060008383611965565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114a09190612931565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461156160008383611a79565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb9061271d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c59190612640565b60405180910390a3505050565b6116dd848484611124565b6116e984848484611a7e565b611728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171f9061269d565b60405180910390fd5b50505050565b60606000821415611776576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061188a565b600082905060005b600082146117a857808061179190612b05565b915050600a826117a19190612987565b915061177e565b60008167ffffffffffffffff8111156117c4576117c3612c6a565b5b6040519080825280601f01601f1916602001820160405280156117f65781602001600182028036833780820191505090505b5090505b600085146118835760018261180f91906129b8565b9150600a8561181e9190612b4e565b603061182a9190612931565b60f81b8183815181106118405761183f612c3b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561187c9190612987565b94506117fa565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b611970838383611c15565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119b3576119ae81611c1a565b6119f2565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119f1576119f08382611c63565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a3557611a3081611dd0565b611a74565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611a7357611a728282611ea1565b5b5b505050565b505050565b6000611a9f8473ffffffffffffffffffffffffffffffffffffffff16611f20565b15611c08578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611ac8610fce565b8786866040518563ffffffff1660e01b8152600401611aea94939291906125f4565b602060405180830381600087803b158015611b0457600080fd5b505af1925050508015611b3557506040513d601f19601f82011682018060405250810190611b32919061220c565b60015b611bb8573d8060008114611b65576040519150601f19603f3d011682016040523d82523d6000602084013e611b6a565b606091505b50600081511415611bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba79061269d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611c0d565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611c7084610b1d565b611c7a91906129b8565b9050600060076000848152602001908152602001600020549050818114611d5f576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611de491906129b8565b9050600060096000848152602001908152602001600020549050600060088381548110611e1457611e13612c3b565b5b906000526020600020015490508060088381548110611e3657611e35612c3b565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611e8557611e84612c0c565b5b6001900381819060005260206000200160009055905550505050565b6000611eac83610b1d565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000611f56611f51846128bd565b612898565b905082815260208101848484011115611f7257611f71612c9e565b5b611f7d848285612a60565b509392505050565b600081359050611f9481613142565b92915050565b600081359050611fa981613159565b92915050565b600081359050611fbe81613170565b92915050565b600081519050611fd381613170565b92915050565b600082601f830112611fee57611fed612c99565b5b8135611ffe848260208601611f43565b91505092915050565b60008135905061201681613187565b92915050565b60006020828403121561203257612031612ca8565b5b600061204084828501611f85565b91505092915050565b600080604083850312156120605761205f612ca8565b5b600061206e85828601611f85565b925050602061207f85828601611f85565b9150509250929050565b6000806000606084860312156120a2576120a1612ca8565b5b60006120b086828701611f85565b93505060206120c186828701611f85565b92505060406120d286828701612007565b9150509250925092565b600080600080608085870312156120f6576120f5612ca8565b5b600061210487828801611f85565b945050602061211587828801611f85565b935050604061212687828801612007565b925050606085013567ffffffffffffffff81111561214757612146612ca3565b5b61215387828801611fd9565b91505092959194509250565b6000806040838503121561217657612175612ca8565b5b600061218485828601611f85565b925050602061219585828601611f9a565b9150509250929050565b600080604083850312156121b6576121b5612ca8565b5b60006121c485828601611f85565b92505060206121d585828601612007565b9150509250929050565b6000602082840312156121f5576121f4612ca8565b5b600061220384828501611faf565b91505092915050565b60006020828403121561222257612221612ca8565b5b600061223084828501611fc4565b91505092915050565b60006020828403121561224f5761224e612ca8565b5b600061225d84828501612007565b91505092915050565b61226f816129ec565b82525050565b61227e816129fe565b82525050565b600061228f826128ee565b6122998185612904565b93506122a9818560208601612a6f565b6122b281612cad565b840191505092915050565b60006122c8826128f9565b6122d28185612915565b93506122e2818560208601612a6f565b6122eb81612cad565b840191505092915050565b6000612301826128f9565b61230b8185612926565b935061231b818560208601612a6f565b80840191505092915050565b6000612334605183612926565b915061233f82612cbe565b605182019050919050565b6000612357602b83612915565b915061236282612d33565b604082019050919050565b600061237a603283612915565b915061238582612d82565b604082019050919050565b600061239d602583612915565b91506123a882612dd1565b604082019050919050565b60006123c0601c83612915565b91506123cb82612e20565b602082019050919050565b60006123e3602483612915565b91506123ee82612e49565b604082019050919050565b6000612406601983612915565b915061241182612e98565b602082019050919050565b6000612429602983612915565b915061243482612ec1565b604082019050919050565b600061244c601283612915565b915061245782612f10565b602082019050919050565b600061246f603e83612915565b915061247a82612f39565b604082019050919050565b6000612492602083612915565b915061249d82612f88565b602082019050919050565b60006124b5601683612915565b91506124c082612fb1565b602082019050919050565b60006124d8600583612926565b91506124e382612fda565b600582019050919050565b60006124fb601883612915565b915061250682613003565b602082019050919050565b600061251e601883612915565b91506125298261302c565b602082019050919050565b6000612541602183612915565b915061254c82613055565b604082019050919050565b6000612564602c83612915565b915061256f826130a4565b604082019050919050565b6000612587602e83612915565b9150612592826130f3565b604082019050919050565b6125a681612a56565b82525050565b60006125b782612327565b91506125c382846122f6565b91506125ce826124cb565b915081905092915050565b60006020820190506125ee6000830184612266565b92915050565b60006080820190506126096000830187612266565b6126166020830186612266565b612623604083018561259d565b81810360608301526126358184612284565b905095945050505050565b60006020820190506126556000830184612275565b92915050565b6000602082019050818103600083015261267581846122bd565b905092915050565b600060208201905081810360008301526126968161234a565b9050919050565b600060208201905081810360008301526126b68161236d565b9050919050565b600060208201905081810360008301526126d681612390565b9050919050565b600060208201905081810360008301526126f6816123b3565b9050919050565b60006020820190508181036000830152612716816123d6565b9050919050565b60006020820190508181036000830152612736816123f9565b9050919050565b600060208201905081810360008301526127568161241c565b9050919050565b600060208201905081810360008301526127768161243f565b9050919050565b6000602082019050818103600083015261279681612462565b9050919050565b600060208201905081810360008301526127b681612485565b9050919050565b600060208201905081810360008301526127d6816124a8565b9050919050565b600060208201905081810360008301526127f6816124ee565b9050919050565b6000602082019050818103600083015261281681612511565b9050919050565b6000602082019050818103600083015261283681612534565b9050919050565b6000602082019050818103600083015261285681612557565b9050919050565b600060208201905081810360008301526128768161257a565b9050919050565b6000602082019050612892600083018461259d565b92915050565b60006128a26128b3565b90506128ae8282612ad4565b919050565b6000604051905090565b600067ffffffffffffffff8211156128d8576128d7612c6a565b5b6128e182612cad565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061293c82612a56565b915061294783612a56565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561297c5761297b612b7f565b5b828201905092915050565b600061299282612a56565b915061299d83612a56565b9250826129ad576129ac612bae565b5b828204905092915050565b60006129c382612a56565b91506129ce83612a56565b9250828210156129e1576129e0612b7f565b5b828203905092915050565b60006129f782612a36565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612a8d578082015181840152602081019050612a72565b83811115612a9c576000848401525b50505050565b60006002820490506001821680612aba57607f821691505b60208210811415612ace57612acd612bdd565b5b50919050565b612add82612cad565b810181811067ffffffffffffffff82111715612afc57612afb612c6a565b5b80604052505050565b6000612b1082612a56565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612b4357612b42612b7f565b5b600182019050919050565b6000612b5982612a56565b9150612b6483612a56565b925082612b7457612b73612bae565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f68747470733a2f2f6369656c6f2e6d7970696e6174612e636c6f75642f69706660008201527f732f516d5a75636b31593555576b755068576373774639596350544c566e357560208201527f66396f4e7539616945584843506f32742f000000000000000000000000000000604082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45786365656473206d617820737570706c792064617900000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f45786365656473206d617820737570706c79206e696768740000000000000000600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b61314b816129ec565b811461315657600080fd5b50565b613162816129fe565b811461316d57600080fd5b50565b61317981612a0a565b811461318457600080fd5b50565b61319081612a56565b811461319b57600080fd5b5056fea2646970667358221220cda5fe8f705e7ad3a22fa3c94cc942586013f6527b3232f5fb830063b8e0b78f64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000174b6169576169416b6962614d65657475703173744e465400000000000000000000000000000000000000000000000000000000000000000000000000000000074b57414d4e465400000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): KaiWaiAkibaMeetup1stNFT
Arg [1] : symbol (string): KWAMNFT

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000017
Arg [3] : 4b6169576169416b6962614d65657475703173744e4654000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [5] : 4b57414d4e465400000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

42774:1663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36587:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22410:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23923:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23440:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43106:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43144:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37227:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24623:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36895:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42879:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44242:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25030:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37417:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43636:338;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22121:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43027:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21852:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42925:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22579:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24166:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43063:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44339:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25286:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43982:252;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43302:326;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24392:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42975:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36587:224;36689:4;36728:35;36713:50;;;:11;:50;;;;:90;;;;36767:36;36791:11;36767:23;:36::i;:::-;36713:90;36706:97;;36587:224;;;:::o;22410:100::-;22464:13;22497:5;22490:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22410:100;:::o;23923:171::-;23999:7;24019:23;24034:7;24019:14;:23::i;:::-;24062:15;:24;24078:7;24062:24;;;;;;;;;;;;;;;;;;;;;24055:31;;23923:171;;;:::o;23440:417::-;23521:13;23537:23;23552:7;23537:14;:23::i;:::-;23521:39;;23585:5;23579:11;;:2;:11;;;;23571:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23679:5;23663:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23688:37;23705:5;23712:12;:10;:12::i;:::-;23688:16;:37::i;:::-;23663:62;23641:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;23828:21;23837:2;23841:7;23828:8;:21::i;:::-;23510:347;23440:417;;:::o;43106:31::-;;;;:::o;43144:39::-;;;;:::o;37227:113::-;37288:7;37315:10;:17;;;;37308:24;;37227:113;:::o;24623:336::-;24818:41;24837:12;:10;:12::i;:::-;24851:7;24818:18;:41::i;:::-;24810:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;24923:28;24933:4;24939:2;24943:7;24923:9;:28::i;:::-;24623:336;;;:::o;36895:256::-;36992:7;37028:23;37045:5;37028:16;:23::i;:::-;37020:5;:31;37012:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37117:12;:19;37130:5;37117:19;;;;;;;;;;;;;;;:26;37137:5;37117:26;;;;;;;;;;;;37110:33;;36895:256;;;;:::o;42879:39::-;42916:2;42879:39;:::o;44242:91::-;44288:7;44315:10;;44308:17;;44242:91;:::o;25030:185::-;25168:39;25185:4;25191:2;25195:7;25168:39;;;;;;;;;;;;:16;:39::i;:::-;25030:185;;;:::o;37417:233::-;37492:7;37528:30;:28;:30::i;:::-;37520:5;:38;37512:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37625:10;37636:5;37625:17;;;;;;;;:::i;:::-;;;;;;;;;;37618:24;;37417:233;;;:::o;43636:338::-;42916:2;43719:1;43703:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;43695:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42916:2;43791:1;43776:12;;:16;;;;:::i;:::-;:30;;43768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43846:22;43893:12;;43871:19;;:34;;;;:::i;:::-;43846:59;;43916:25;43922:2;43926:14;43916:5;:25::i;:::-;43952:12;;:14;;;;;;;;;:::i;:::-;;;;;;43684:290;43636:338;:::o;22121:222::-;22193:7;22213:13;22229:7;:16;22237:7;22229:16;;;;;;;;;;;;;;;;;;;;;22213:32;;22281:1;22264:19;;:5;:19;;;;22256:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22330:5;22323:12;;;22121:222;;;:::o;43027:29::-;;;;:::o;21852:207::-;21924:7;21969:1;21952:19;;:5;:19;;;;21944:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22035:9;:16;22045:5;22035:16;;;;;;;;;;;;;;;;22028:23;;21852:207;;;:::o;42925:43::-;42966:2;42925:43;:::o;22579:104::-;22635:13;22668:7;22661:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22579:104;:::o;24166:155::-;24261:52;24280:12;:10;:12::i;:::-;24294:8;24304;24261:18;:52::i;:::-;24166:155;;:::o;43063:36::-;;;;:::o;44339:95::-;44387:7;44414:12;;44407:19;;44339:95;:::o;25286:323::-;25460:41;25479:12;:10;:12::i;:::-;25493:7;25460:18;:41::i;:::-;25452:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;25563:38;25577:4;25583:2;25587:7;25596:4;25563:13;:38::i;:::-;25286:323;;;;:::o;43982:252::-;44055:13;44197:18;:7;:16;:18::i;:::-;44095:130;;;;;;;;:::i;:::-;;;;;;;;;;;;;44081:145;;43982:252;;;:::o;43302:326::-;42916:2;43383:1;43367:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:31;;43359:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42966:2;43453:1;43440:10;;:14;;;;:::i;:::-;:32;;43432:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43510:20;43553:10;;43533:17;;:30;;;;:::i;:::-;43510:53;;43574:23;43580:2;43584:12;43574:5;:23::i;:::-;43608:10;;:12;;;;;;;;;:::i;:::-;;;;;;43348:280;43302:326;:::o;24392:164::-;24489:4;24513:18;:25;24532:5;24513:25;;;;;;;;;;;;;;;:35;24539:8;24513:35;;;;;;;;;;;;;;;;;;;;;;;;;24506:42;;24392:164;;;;:::o;42975:45::-;43018:2;42975:45;:::o;21483:305::-;21585:4;21637:25;21622:40;;;:11;:40;;;;:105;;;;21694:33;21679:48;;;:11;:48;;;;21622:105;:158;;;;21744:36;21768:11;21744:23;:36::i;:::-;21622:158;21602:178;;21483:305;;;:::o;31898:135::-;31980:16;31988:7;31980;:16::i;:::-;31972:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31898:135;:::o;668:98::-;721:7;748:10;741:17;;668:98;:::o;31177:174::-;31279:2;31252:15;:24;31268:7;31252:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31335:7;31331:2;31297:46;;31306:23;31321:7;31306:14;:23::i;:::-;31297:46;;;;;;;;;;;;31177:174;;:::o;27410:264::-;27503:4;27520:13;27536:23;27551:7;27536:14;:23::i;:::-;27520:39;;27589:5;27578:16;;:7;:16;;;:52;;;;27598:32;27615:5;27622:7;27598:16;:32::i;:::-;27578:52;:87;;;;27658:7;27634:31;;:20;27646:7;27634:11;:20::i;:::-;:31;;;27578:87;27570:96;;;27410:264;;;;:::o;30433:625::-;30592:4;30565:31;;:23;30580:7;30565:14;:23::i;:::-;:31;;;30557:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30671:1;30657:16;;:2;:16;;;;30649:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30727:39;30748:4;30754:2;30758:7;30727:20;:39::i;:::-;30831:29;30848:1;30852:7;30831:8;:29::i;:::-;30892:1;30873:9;:15;30883:4;30873:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30921:1;30904:9;:13;30914:2;30904:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30952:2;30933:7;:16;30941:7;30933:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30991:7;30987:2;30972:27;;30981:4;30972:27;;;;;;;;;;;;31012:38;31032:4;31038:2;31042:7;31012:19;:38::i;:::-;30433:625;;;:::o;29008:439::-;29102:1;29088:16;;:2;:16;;;;29080:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29161:16;29169:7;29161;:16::i;:::-;29160:17;29152:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29223:45;29252:1;29256:2;29260:7;29223:20;:45::i;:::-;29298:1;29281:9;:13;29291:2;29281:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29329:2;29310:7;:16;29318:7;29310:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29374:7;29370:2;29349:33;;29366:1;29349:33;;;;;;;;;;;;29395:44;29423:1;29427:2;29431:7;29395:19;:44::i;:::-;29008:439;;:::o;31494:315::-;31649:8;31640:17;;:5;:17;;;;31632:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31736:8;31698:18;:25;31717:5;31698:25;;;;;;;;;;;;;;;:35;31724:8;31698:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31782:8;31760:41;;31775:5;31760:41;;;31792:8;31760:41;;;;;;:::i;:::-;;;;;;;;31494:315;;;:::o;26490:313::-;26646:28;26656:4;26662:2;26666:7;26646:9;:28::i;:::-;26693:47;26716:4;26722:2;26726:7;26735:4;26693:22;:47::i;:::-;26685:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26490:313;;;;:::o;2241:723::-;2297:13;2527:1;2518:5;:10;2514:53;;;2545:10;;;;;;;;;;;;;;;;;;;;;2514:53;2577:12;2592:5;2577:20;;2608:14;2633:78;2648:1;2640:4;:9;2633:78;;2666:8;;;;;:::i;:::-;;;;2697:2;2689:10;;;;;:::i;:::-;;;2633:78;;;2721:19;2753:6;2743:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2721:39;;2771:154;2787:1;2778:5;:10;2771:154;;2815:1;2805:11;;;;;:::i;:::-;;;2882:2;2874:5;:10;;;;:::i;:::-;2861:2;:24;;;;:::i;:::-;2848:39;;2831:6;2838;2831:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2911:2;2902:11;;;;;:::i;:::-;;;2771:154;;;2949:6;2935:21;;;;;2241:723;;;;:::o;14448:157::-;14533:4;14572:25;14557:40;;;:11;:40;;;;14550:47;;14448:157;;;:::o;27116:127::-;27181:4;27233:1;27205:30;;:7;:16;27213:7;27205:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27198:37;;27116:127;;;:::o;38263:589::-;38407:45;38434:4;38440:2;38444:7;38407:26;:45::i;:::-;38485:1;38469:18;;:4;:18;;;38465:187;;;38504:40;38536:7;38504:31;:40::i;:::-;38465:187;;;38574:2;38566:10;;:4;:10;;;38562:90;;38593:47;38626:4;38632:7;38593:32;:47::i;:::-;38562:90;38465:187;38680:1;38666:16;;:2;:16;;;38662:183;;;38699:45;38736:7;38699:36;:45::i;:::-;38662:183;;;38772:4;38766:10;;:2;:10;;;38762:83;;38793:40;38821:2;38825:7;38793:27;:40::i;:::-;38762:83;38662:183;38263:589;;;:::o;34533:125::-;;;;:::o;32597:853::-;32751:4;32772:15;:2;:13;;;:15::i;:::-;32768:675;;;32824:2;32808:36;;;32845:12;:10;:12::i;:::-;32859:4;32865:7;32874:4;32808:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32804:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33066:1;33049:6;:13;:18;33045:328;;;33092:60;;;;;;;;;;:::i;:::-;;;;;;;;33045:328;33323:6;33317:13;33308:6;33304:2;33300:15;33293:38;32804:584;32940:41;;;32930:51;;;:6;:51;;;;32923:58;;;;;32768:675;33427:4;33420:11;;32597:853;;;;;;;:::o;34022:126::-;;;;:::o;39575:164::-;39679:10;:17;;;;39652:15;:24;39668:7;39652:24;;;;;;;;;;;:44;;;;39707:10;39723:7;39707:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39575:164;:::o;40366:988::-;40632:22;40682:1;40657:22;40674:4;40657:16;:22::i;:::-;:26;;;;:::i;:::-;40632:51;;40694:18;40715:17;:26;40733:7;40715:26;;;;;;;;;;;;40694:47;;40862:14;40848:10;:28;40844:328;;40893:19;40915:12;:18;40928:4;40915:18;;;;;;;;;;;;;;;:34;40934:14;40915:34;;;;;;;;;;;;40893:56;;40999:11;40966:12;:18;40979:4;40966:18;;;;;;;;;;;;;;;:30;40985:10;40966:30;;;;;;;;;;;:44;;;;41116:10;41083:17;:30;41101:11;41083:30;;;;;;;;;;;:43;;;;40878:294;40844:328;41268:17;:26;41286:7;41268:26;;;;;;;;;;;41261:33;;;41312:12;:18;41325:4;41312:18;;;;;;;;;;;;;;;:34;41331:14;41312:34;;;;;;;;;;;41305:41;;;40447:907;;40366:988;;:::o;41649:1079::-;41902:22;41947:1;41927:10;:17;;;;:21;;;;:::i;:::-;41902:46;;41959:18;41980:15;:24;41996:7;41980:24;;;;;;;;;;;;41959:45;;42331:19;42353:10;42364:14;42353:26;;;;;;;;:::i;:::-;;;;;;;;;;42331:48;;42417:11;42392:10;42403;42392:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;42528:10;42497:15;:28;42513:11;42497:28;;;;;;;;;;;:41;;;;42669:15;:24;42685:7;42669:24;;;;;;;;;;;42662:31;;;42704:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41720:1008;;;41649:1079;:::o;39153:221::-;39238:14;39255:20;39272:2;39255:16;:20::i;:::-;39238:37;;39313:7;39286:12;:16;39299:2;39286:16;;;;;;;;;;;;;;;:24;39303:6;39286:24;;;;;;;;;;;:34;;;;39360:6;39331:17;:26;39349:7;39331:26;;;;;;;;;;;:35;;;;39227:147;39153:221;;:::o;5485:326::-;5545:4;5802:1;5780:7;:19;;;:23;5773:30;;5485:326;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1354:139::-;1400:5;1438:6;1425:20;1416:29;;1454:33;1481:5;1454:33;:::i;:::-;1354:139;;;;:::o;1499:329::-;1558:6;1607:2;1595:9;1586:7;1582:23;1578:32;1575:119;;;1613:79;;:::i;:::-;1575:119;1733:1;1758:53;1803:7;1794:6;1783:9;1779:22;1758:53;:::i;:::-;1748:63;;1704:117;1499:329;;;;:::o;1834:474::-;1902:6;1910;1959:2;1947:9;1938:7;1934:23;1930:32;1927:119;;;1965:79;;:::i;:::-;1927:119;2085:1;2110:53;2155:7;2146:6;2135:9;2131:22;2110:53;:::i;:::-;2100:63;;2056:117;2212:2;2238:53;2283:7;2274:6;2263:9;2259:22;2238:53;:::i;:::-;2228:63;;2183:118;1834:474;;;;;:::o;2314:619::-;2391:6;2399;2407;2456:2;2444:9;2435:7;2431:23;2427:32;2424:119;;;2462:79;;:::i;:::-;2424:119;2582:1;2607:53;2652:7;2643:6;2632:9;2628:22;2607:53;:::i;:::-;2597:63;;2553:117;2709:2;2735:53;2780:7;2771:6;2760:9;2756:22;2735:53;:::i;:::-;2725:63;;2680:118;2837:2;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2808:118;2314:619;;;;;:::o;2939:943::-;3034:6;3042;3050;3058;3107:3;3095:9;3086:7;3082:23;3078:33;3075:120;;;3114:79;;:::i;:::-;3075:120;3234:1;3259:53;3304:7;3295:6;3284:9;3280:22;3259:53;:::i;:::-;3249:63;;3205:117;3361:2;3387:53;3432:7;3423:6;3412:9;3408:22;3387:53;:::i;:::-;3377:63;;3332:118;3489:2;3515:53;3560:7;3551:6;3540:9;3536:22;3515:53;:::i;:::-;3505:63;;3460:118;3645:2;3634:9;3630:18;3617:32;3676:18;3668:6;3665:30;3662:117;;;3698:79;;:::i;:::-;3662:117;3803:62;3857:7;3848:6;3837:9;3833:22;3803:62;:::i;:::-;3793:72;;3588:287;2939:943;;;;;;;:::o;3888:468::-;3953:6;3961;4010:2;3998:9;3989:7;3985:23;3981:32;3978:119;;;4016:79;;:::i;:::-;3978:119;4136:1;4161:53;4206:7;4197:6;4186:9;4182:22;4161:53;:::i;:::-;4151:63;;4107:117;4263:2;4289:50;4331:7;4322:6;4311:9;4307:22;4289:50;:::i;:::-;4279:60;;4234:115;3888:468;;;;;:::o;4362:474::-;4430:6;4438;4487:2;4475:9;4466:7;4462:23;4458:32;4455:119;;;4493:79;;:::i;:::-;4455:119;4613:1;4638:53;4683:7;4674:6;4663:9;4659:22;4638:53;:::i;:::-;4628:63;;4584:117;4740:2;4766:53;4811:7;4802:6;4791:9;4787:22;4766:53;:::i;:::-;4756:63;;4711:118;4362:474;;;;;:::o;4842:327::-;4900:6;4949:2;4937:9;4928:7;4924:23;4920:32;4917:119;;;4955:79;;:::i;:::-;4917:119;5075:1;5100:52;5144:7;5135:6;5124:9;5120:22;5100:52;:::i;:::-;5090:62;;5046:116;4842:327;;;;:::o;5175:349::-;5244:6;5293:2;5281:9;5272:7;5268:23;5264:32;5261:119;;;5299:79;;:::i;:::-;5261:119;5419:1;5444:63;5499:7;5490:6;5479:9;5475:22;5444:63;:::i;:::-;5434:73;;5390:127;5175:349;;;;:::o;5530:329::-;5589:6;5638:2;5626:9;5617:7;5613:23;5609:32;5606:119;;;5644:79;;:::i;:::-;5606:119;5764:1;5789:53;5834:7;5825:6;5814:9;5810:22;5789:53;:::i;:::-;5779:63;;5735:117;5530:329;;;;:::o;5865:118::-;5952:24;5970:5;5952:24;:::i;:::-;5947:3;5940:37;5865:118;;:::o;5989:109::-;6070:21;6085:5;6070:21;:::i;:::-;6065:3;6058:34;5989:109;;:::o;6104:360::-;6190:3;6218:38;6250:5;6218:38;:::i;:::-;6272:70;6335:6;6330:3;6272:70;:::i;:::-;6265:77;;6351:52;6396:6;6391:3;6384:4;6377:5;6373:16;6351:52;:::i;:::-;6428:29;6450:6;6428:29;:::i;:::-;6423:3;6419:39;6412:46;;6194:270;6104:360;;;;:::o;6470:364::-;6558:3;6586:39;6619:5;6586:39;:::i;:::-;6641:71;6705:6;6700:3;6641:71;:::i;:::-;6634:78;;6721:52;6766:6;6761:3;6754:4;6747:5;6743:16;6721:52;:::i;:::-;6798:29;6820:6;6798:29;:::i;:::-;6793:3;6789:39;6782:46;;6562:272;6470:364;;;;:::o;6840:377::-;6946:3;6974:39;7007:5;6974:39;:::i;:::-;7029:89;7111:6;7106:3;7029:89;:::i;:::-;7022:96;;7127:52;7172:6;7167:3;7160:4;7153:5;7149:16;7127:52;:::i;:::-;7204:6;7199:3;7195:16;7188:23;;6950:267;6840:377;;;;:::o;7223:402::-;7383:3;7404:85;7486:2;7481:3;7404:85;:::i;:::-;7397:92;;7498:93;7587:3;7498:93;:::i;:::-;7616:2;7611:3;7607:12;7600:19;;7223:402;;;:::o;7631:366::-;7773:3;7794:67;7858:2;7853:3;7794:67;:::i;:::-;7787:74;;7870:93;7959:3;7870:93;:::i;:::-;7988:2;7983:3;7979:12;7972:19;;7631:366;;;:::o;8003:::-;8145:3;8166:67;8230:2;8225:3;8166:67;:::i;:::-;8159:74;;8242:93;8331:3;8242:93;:::i;:::-;8360:2;8355:3;8351:12;8344:19;;8003:366;;;:::o;8375:::-;8517:3;8538:67;8602:2;8597:3;8538:67;:::i;:::-;8531:74;;8614:93;8703:3;8614:93;:::i;:::-;8732:2;8727:3;8723:12;8716:19;;8375:366;;;:::o;8747:::-;8889:3;8910:67;8974:2;8969:3;8910:67;:::i;:::-;8903:74;;8986:93;9075:3;8986:93;:::i;:::-;9104:2;9099:3;9095:12;9088:19;;8747:366;;;:::o;9119:::-;9261:3;9282:67;9346:2;9341:3;9282:67;:::i;:::-;9275:74;;9358:93;9447:3;9358:93;:::i;:::-;9476:2;9471:3;9467:12;9460:19;;9119:366;;;:::o;9491:::-;9633:3;9654:67;9718:2;9713:3;9654:67;:::i;:::-;9647:74;;9730:93;9819:3;9730:93;:::i;:::-;9848:2;9843:3;9839:12;9832:19;;9491:366;;;:::o;9863:::-;10005:3;10026:67;10090:2;10085:3;10026:67;:::i;:::-;10019:74;;10102:93;10191:3;10102:93;:::i;:::-;10220:2;10215:3;10211:12;10204:19;;9863:366;;;:::o;10235:::-;10377:3;10398:67;10462:2;10457:3;10398:67;:::i;:::-;10391:74;;10474:93;10563:3;10474:93;:::i;:::-;10592:2;10587:3;10583:12;10576:19;;10235:366;;;:::o;10607:::-;10749:3;10770:67;10834:2;10829:3;10770:67;:::i;:::-;10763:74;;10846:93;10935:3;10846:93;:::i;:::-;10964:2;10959:3;10955:12;10948:19;;10607:366;;;:::o;10979:::-;11121:3;11142:67;11206:2;11201:3;11142:67;:::i;:::-;11135:74;;11218:93;11307:3;11218:93;:::i;:::-;11336:2;11331:3;11327:12;11320:19;;10979:366;;;:::o;11351:::-;11493:3;11514:67;11578:2;11573:3;11514:67;:::i;:::-;11507:74;;11590:93;11679:3;11590:93;:::i;:::-;11708:2;11703:3;11699:12;11692:19;;11351:366;;;:::o;11723:400::-;11883:3;11904:84;11986:1;11981:3;11904:84;:::i;:::-;11897:91;;11997:93;12086:3;11997:93;:::i;:::-;12115:1;12110:3;12106:11;12099:18;;11723:400;;;:::o;12129:366::-;12271:3;12292:67;12356:2;12351:3;12292:67;:::i;:::-;12285:74;;12368:93;12457:3;12368:93;:::i;:::-;12486:2;12481:3;12477:12;12470:19;;12129:366;;;:::o;12501:::-;12643:3;12664:67;12728:2;12723:3;12664:67;:::i;:::-;12657:74;;12740:93;12829:3;12740:93;:::i;:::-;12858:2;12853:3;12849:12;12842:19;;12501:366;;;:::o;12873:::-;13015:3;13036:67;13100:2;13095:3;13036:67;:::i;:::-;13029:74;;13112:93;13201:3;13112:93;:::i;:::-;13230:2;13225:3;13221:12;13214:19;;12873:366;;;:::o;13245:::-;13387:3;13408:67;13472:2;13467:3;13408:67;:::i;:::-;13401:74;;13484:93;13573:3;13484:93;:::i;:::-;13602:2;13597:3;13593:12;13586:19;;13245:366;;;:::o;13617:::-;13759:3;13780:67;13844:2;13839:3;13780:67;:::i;:::-;13773:74;;13856:93;13945:3;13856:93;:::i;:::-;13974:2;13969:3;13965:12;13958:19;;13617:366;;;:::o;13989:118::-;14076:24;14094:5;14076:24;:::i;:::-;14071:3;14064:37;13989:118;;:::o;14113:807::-;14447:3;14469:148;14613:3;14469:148;:::i;:::-;14462:155;;14634:95;14725:3;14716:6;14634:95;:::i;:::-;14627:102;;14746:148;14890:3;14746:148;:::i;:::-;14739:155;;14911:3;14904:10;;14113:807;;;;:::o;14926:222::-;15019:4;15057:2;15046:9;15042:18;15034:26;;15070:71;15138:1;15127:9;15123:17;15114:6;15070:71;:::i;:::-;14926:222;;;;:::o;15154:640::-;15349:4;15387:3;15376:9;15372:19;15364:27;;15401:71;15469:1;15458:9;15454:17;15445:6;15401:71;:::i;:::-;15482:72;15550:2;15539:9;15535:18;15526:6;15482:72;:::i;:::-;15564;15632:2;15621:9;15617:18;15608:6;15564:72;:::i;:::-;15683:9;15677:4;15673:20;15668:2;15657:9;15653:18;15646:48;15711:76;15782:4;15773:6;15711:76;:::i;:::-;15703:84;;15154:640;;;;;;;:::o;15800:210::-;15887:4;15925:2;15914:9;15910:18;15902:26;;15938:65;16000:1;15989:9;15985:17;15976:6;15938:65;:::i;:::-;15800:210;;;;:::o;16016:313::-;16129:4;16167:2;16156:9;16152:18;16144:26;;16216:9;16210:4;16206:20;16202:1;16191:9;16187:17;16180:47;16244:78;16317:4;16308:6;16244:78;:::i;:::-;16236:86;;16016:313;;;;:::o;16335:419::-;16501:4;16539:2;16528:9;16524:18;16516:26;;16588:9;16582:4;16578:20;16574:1;16563:9;16559:17;16552:47;16616:131;16742:4;16616:131;:::i;:::-;16608:139;;16335:419;;;:::o;16760:::-;16926:4;16964:2;16953:9;16949:18;16941:26;;17013:9;17007:4;17003:20;16999:1;16988:9;16984:17;16977:47;17041:131;17167:4;17041:131;:::i;:::-;17033:139;;16760:419;;;:::o;17185:::-;17351:4;17389:2;17378:9;17374:18;17366:26;;17438:9;17432:4;17428:20;17424:1;17413:9;17409:17;17402:47;17466:131;17592:4;17466:131;:::i;:::-;17458:139;;17185:419;;;:::o;17610:::-;17776:4;17814:2;17803:9;17799:18;17791:26;;17863:9;17857:4;17853:20;17849:1;17838:9;17834:17;17827:47;17891:131;18017:4;17891:131;:::i;:::-;17883:139;;17610:419;;;:::o;18035:::-;18201:4;18239:2;18228:9;18224:18;18216:26;;18288:9;18282:4;18278:20;18274:1;18263:9;18259:17;18252:47;18316:131;18442:4;18316:131;:::i;:::-;18308:139;;18035:419;;;:::o;18460:::-;18626:4;18664:2;18653:9;18649:18;18641:26;;18713:9;18707:4;18703:20;18699:1;18688:9;18684:17;18677:47;18741:131;18867:4;18741:131;:::i;:::-;18733:139;;18460:419;;;:::o;18885:::-;19051:4;19089:2;19078:9;19074:18;19066:26;;19138:9;19132:4;19128:20;19124:1;19113:9;19109:17;19102:47;19166:131;19292:4;19166:131;:::i;:::-;19158:139;;18885:419;;;:::o;19310:::-;19476:4;19514:2;19503:9;19499:18;19491:26;;19563:9;19557:4;19553:20;19549:1;19538:9;19534:17;19527:47;19591:131;19717:4;19591:131;:::i;:::-;19583:139;;19310:419;;;:::o;19735:::-;19901:4;19939:2;19928:9;19924:18;19916:26;;19988:9;19982:4;19978:20;19974:1;19963:9;19959:17;19952:47;20016:131;20142:4;20016:131;:::i;:::-;20008:139;;19735:419;;;:::o;20160:::-;20326:4;20364:2;20353:9;20349:18;20341:26;;20413:9;20407:4;20403:20;20399:1;20388:9;20384:17;20377:47;20441:131;20567:4;20441:131;:::i;:::-;20433:139;;20160:419;;;:::o;20585:::-;20751:4;20789:2;20778:9;20774:18;20766:26;;20838:9;20832:4;20828:20;20824:1;20813:9;20809:17;20802:47;20866:131;20992:4;20866:131;:::i;:::-;20858:139;;20585:419;;;:::o;21010:::-;21176:4;21214:2;21203:9;21199:18;21191:26;;21263:9;21257:4;21253:20;21249:1;21238:9;21234:17;21227:47;21291:131;21417:4;21291:131;:::i;:::-;21283:139;;21010:419;;;:::o;21435:::-;21601:4;21639:2;21628:9;21624:18;21616:26;;21688:9;21682:4;21678:20;21674:1;21663:9;21659:17;21652:47;21716:131;21842:4;21716:131;:::i;:::-;21708:139;;21435:419;;;:::o;21860:::-;22026:4;22064:2;22053:9;22049:18;22041:26;;22113:9;22107:4;22103:20;22099:1;22088:9;22084:17;22077:47;22141:131;22267:4;22141:131;:::i;:::-;22133:139;;21860:419;;;:::o;22285:::-;22451:4;22489:2;22478:9;22474:18;22466:26;;22538:9;22532:4;22528:20;22524:1;22513:9;22509:17;22502:47;22566:131;22692:4;22566:131;:::i;:::-;22558:139;;22285:419;;;:::o;22710:::-;22876:4;22914:2;22903:9;22899:18;22891:26;;22963:9;22957:4;22953:20;22949:1;22938:9;22934:17;22927:47;22991:131;23117:4;22991:131;:::i;:::-;22983:139;;22710:419;;;:::o;23135:222::-;23228:4;23266:2;23255:9;23251:18;23243:26;;23279:71;23347:1;23336:9;23332:17;23323:6;23279:71;:::i;:::-;23135:222;;;;:::o;23363:129::-;23397:6;23424:20;;:::i;:::-;23414:30;;23453:33;23481:4;23473:6;23453:33;:::i;:::-;23363:129;;;:::o;23498:75::-;23531:6;23564:2;23558:9;23548:19;;23498:75;:::o;23579:307::-;23640:4;23730:18;23722:6;23719:30;23716:56;;;23752:18;;:::i;:::-;23716:56;23790:29;23812:6;23790:29;:::i;:::-;23782:37;;23874:4;23868;23864:15;23856:23;;23579:307;;;:::o;23892:98::-;23943:6;23977:5;23971:12;23961:22;;23892:98;;;:::o;23996:99::-;24048:6;24082:5;24076:12;24066:22;;23996:99;;;:::o;24101:168::-;24184:11;24218:6;24213:3;24206:19;24258:4;24253:3;24249:14;24234:29;;24101:168;;;;:::o;24275:169::-;24359:11;24393:6;24388:3;24381:19;24433:4;24428:3;24424:14;24409:29;;24275:169;;;;:::o;24450:148::-;24552:11;24589:3;24574:18;;24450:148;;;;:::o;24604:305::-;24644:3;24663:20;24681:1;24663:20;:::i;:::-;24658:25;;24697:20;24715:1;24697:20;:::i;:::-;24692:25;;24851:1;24783:66;24779:74;24776:1;24773:81;24770:107;;;24857:18;;:::i;:::-;24770:107;24901:1;24898;24894:9;24887:16;;24604:305;;;;:::o;24915:185::-;24955:1;24972:20;24990:1;24972:20;:::i;:::-;24967:25;;25006:20;25024:1;25006:20;:::i;:::-;25001:25;;25045:1;25035:35;;25050:18;;:::i;:::-;25035:35;25092:1;25089;25085:9;25080:14;;24915:185;;;;:::o;25106:191::-;25146:4;25166:20;25184:1;25166:20;:::i;:::-;25161:25;;25200:20;25218:1;25200:20;:::i;:::-;25195:25;;25239:1;25236;25233:8;25230:34;;;25244:18;;:::i;:::-;25230:34;25289:1;25286;25282:9;25274:17;;25106:191;;;;:::o;25303:96::-;25340:7;25369:24;25387:5;25369:24;:::i;:::-;25358:35;;25303:96;;;:::o;25405:90::-;25439:7;25482:5;25475:13;25468:21;25457:32;;25405:90;;;:::o;25501:149::-;25537:7;25577:66;25570:5;25566:78;25555:89;;25501:149;;;:::o;25656:126::-;25693:7;25733:42;25726:5;25722:54;25711:65;;25656:126;;;:::o;25788:77::-;25825:7;25854:5;25843:16;;25788:77;;;:::o;25871:154::-;25955:6;25950:3;25945;25932:30;26017:1;26008:6;26003:3;25999:16;25992:27;25871:154;;;:::o;26031:307::-;26099:1;26109:113;26123:6;26120:1;26117:13;26109:113;;;26208:1;26203:3;26199:11;26193:18;26189:1;26184:3;26180:11;26173:39;26145:2;26142:1;26138:10;26133:15;;26109:113;;;26240:6;26237:1;26234:13;26231:101;;;26320:1;26311:6;26306:3;26302:16;26295:27;26231:101;26080:258;26031:307;;;:::o;26344:320::-;26388:6;26425:1;26419:4;26415:12;26405:22;;26472:1;26466:4;26462:12;26493:18;26483:81;;26549:4;26541:6;26537:17;26527:27;;26483:81;26611:2;26603:6;26600:14;26580:18;26577:38;26574:84;;;26630:18;;:::i;:::-;26574:84;26395:269;26344:320;;;:::o;26670:281::-;26753:27;26775:4;26753:27;:::i;:::-;26745:6;26741:40;26883:6;26871:10;26868:22;26847:18;26835:10;26832:34;26829:62;26826:88;;;26894:18;;:::i;:::-;26826:88;26934:10;26930:2;26923:22;26713:238;26670:281;;:::o;26957:233::-;26996:3;27019:24;27037:5;27019:24;:::i;:::-;27010:33;;27065:66;27058:5;27055:77;27052:103;;;27135:18;;:::i;:::-;27052:103;27182:1;27175:5;27171:13;27164:20;;26957:233;;;:::o;27196:176::-;27228:1;27245:20;27263:1;27245:20;:::i;:::-;27240:25;;27279:20;27297:1;27279:20;:::i;:::-;27274:25;;27318:1;27308:35;;27323:18;;:::i;:::-;27308:35;27364:1;27361;27357:9;27352:14;;27196:176;;;;:::o;27378:180::-;27426:77;27423:1;27416:88;27523:4;27520:1;27513:15;27547:4;27544:1;27537:15;27564:180;27612:77;27609:1;27602:88;27709:4;27706:1;27699:15;27733:4;27730:1;27723:15;27750:180;27798:77;27795:1;27788:88;27895:4;27892:1;27885:15;27919:4;27916:1;27909:15;27936:180;27984:77;27981:1;27974:88;28081:4;28078:1;28071:15;28105:4;28102:1;28095:15;28122:180;28170:77;28167:1;28160:88;28267:4;28264:1;28257:15;28291:4;28288:1;28281:15;28308:180;28356:77;28353:1;28346:88;28453:4;28450:1;28443:15;28477:4;28474:1;28467:15;28494:117;28603:1;28600;28593:12;28617:117;28726:1;28723;28716:12;28740:117;28849:1;28846;28839:12;28863:117;28972:1;28969;28962:12;28986:102;29027:6;29078:2;29074:7;29069:2;29062:5;29058:14;29054:28;29044:38;;28986:102;;;:::o;29094:317::-;29234:34;29230:1;29222:6;29218:14;29211:58;29307:34;29302:2;29294:6;29290:15;29283:59;29380:19;29375:2;29367:6;29363:15;29356:44;29094:317;:::o;29421:242::-;29565:34;29561:1;29553:6;29549:14;29542:58;29638:13;29633:2;29625:6;29621:15;29614:38;29421:242;:::o;29673:249::-;29817:34;29813:1;29805:6;29801:14;29794:58;29890:20;29885:2;29877:6;29873:15;29866:45;29673:249;:::o;29932:236::-;30076:34;30072:1;30064:6;30060:14;30053:58;30149:7;30144:2;30136:6;30132:15;30125:32;29932:236;:::o;30178:186::-;30322:30;30318:1;30310:6;30306:14;30299:54;30178:186;:::o;30374:235::-;30518:34;30514:1;30506:6;30502:14;30495:58;30591:6;30586:2;30578:6;30574:15;30567:31;30374:235;:::o;30619:183::-;30763:27;30759:1;30751:6;30747:14;30740:51;30619:183;:::o;30812:240::-;30956:34;30952:1;30944:6;30940:14;30933:58;31029:11;31024:2;31016:6;31012:15;31005:36;30812:240;:::o;31062:176::-;31206:20;31202:1;31194:6;31190:14;31183:44;31062:176;:::o;31248:261::-;31392:34;31388:1;31380:6;31376:14;31369:58;31465:32;31460:2;31452:6;31448:15;31441:57;31248:261;:::o;31519:190::-;31663:34;31659:1;31651:6;31647:14;31640:58;31519:190;:::o;31719:180::-;31863:24;31859:1;31851:6;31847:14;31840:48;31719:180;:::o;31909:163::-;32053:7;32049:1;32041:6;32037:14;32030:31;31909:163;:::o;32082:182::-;32226:26;32222:1;32214:6;32210:14;32203:50;32082:182;:::o;32274:::-;32418:26;32414:1;32406:6;32402:14;32395:50;32274:182;:::o;32466:232::-;32610:34;32606:1;32598:6;32594:14;32587:58;32683:3;32678:2;32670:6;32666:15;32659:28;32466:232;:::o;32708:243::-;32852:34;32848:1;32840:6;32836:14;32829:58;32925:14;32920:2;32912:6;32908:15;32901:39;32708:243;:::o;32961:245::-;33105:34;33101:1;33093:6;33089:14;33082:58;33178:16;33173:2;33165:6;33161:15;33154:41;32961:245;:::o;33216:130::-;33293:24;33311:5;33293:24;:::i;:::-;33286:5;33283:35;33273:63;;33332:1;33329;33322:12;33273:63;33216:130;:::o;33356:124::-;33430:21;33445:5;33430:21;:::i;:::-;33423:5;33420:32;33410:60;;33466:1;33463;33456:12;33410:60;33356:124;:::o;33490:128::-;33566:23;33583:5;33566:23;:::i;:::-;33559:5;33556:34;33546:62;;33604:1;33601;33594:12;33546:62;33490:128;:::o;33628:130::-;33705:24;33723:5;33705:24;:::i;:::-;33698:5;33695:35;33685:63;;33744:1;33741;33734:12;33685:63;33628:130;:::o

Swarm Source

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