ETH Price: $3,403.55 (+2.04%)

V2 Punks (V2PUNK)
 

Overview

TokenID

7686

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
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:
V2Punks

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-17
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Strings.sol



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

// File: contracts/V2Punks.sol


// Creator: Shadowy Coder

pragma solidity ^0.8.0;










/**
888     888  .d8888b.  
888     888 d88P  Y88b 
888     888        888 
Y88b   d88P      .d88P 
 Y88b d88P   .od888P"  
  Y88o88P   d88P"      
   Y888P    888"       
    Y8P     888888888                                       
**/

contract V2Punks is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable, Ownable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex = 0;

    // mint price
    uint256 public _price = 10000000000000000;

    // Token name
    string private _name;

    address private _owner = msg.sender;

    // Token symbol
    string private _symbol;

    // Base URI
    string private _baseURIextended;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _baseURIextended = 'ipfs://QmUSivCzYphi5i2h7RGriY5bdrBVb9nLtG5y2t37BRPXL9/';
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view override returns (uint256) {
        require(index < totalSupply(), 'ERC721A: global index out of bounds');
        return index;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first.
     * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), 'ERC721A: owner index out of bounds');
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx = 0;
        address currOwnershipAddr = address(0);
        for (uint256 i = 0; i < numMintedSoFar; i++) {
            TokenOwnership memory ownership = _ownerships[i];
            if (ownership.addr != address(0)) {
                currOwnershipAddr = ownership.addr;
            }
            if (currOwnershipAddr == owner) {
                if (tokenIdsIdx == index) {
                    return i;
                }
                tokenIdsIdx++;
            }
        }
        revert('ERC721A: unable to get token of owner by index');
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), 'ERC721A: number minted query for the zero address');
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), 'ERC721A: owner query for nonexistent token');

        for (uint256 curr = tokenId; ; curr--) {
            TokenOwnership memory ownership = _ownerships[curr];
            if (ownership.addr != address(0)) {
                return ownership;
            }
        }

        revert('ERC721A: unable to determine the owner of token');
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

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

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

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

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

    /**
     * @dev Set the baseURI
     */
    function setBaseURI(string memory baseURI_) external onlyOwner() {
        _baseURIextended = baseURI_;
    }

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

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

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            'ERC721A: transfer to non ERC721Receiver implementer'
        );
    }

    function setPrice(uint256 newPrice) external {
        require(msg.sender == _owner);
        _price = newPrice;
    }

    /**
     * @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`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function reserveBulk(address[] memory to) external  {
        require(msg.sender == _owner);
        for (uint i = 0; i < to.length;i++) {
            _safeMint(to[i], 1);
        }
    }

    function reserve(address to, uint256 quantity) external  {
        require(msg.sender == _owner);
        require(currentIndex + quantity <= 10000);
        _safeMint(to, quantity);
    }

    function mint(address to, uint256 quantity) external payable {
        require(quantity <= 30 && quantity > 0);
        require(_price * quantity == msg.value);
        require(currentIndex + quantity <= 10000);
        payable(_owner).transfer(msg.value);
        _safeMint(to, quantity);
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), 'ERC721A: mint to the zero address');
        // We know if the first token in the batch doesn't exist, the other ones don't as well, because of serial ordering.
        require(!_exists(startTokenId), 'ERC721A: token already minted');
        require(quantity > 0, 'ERC721A: quantity must be greater than 0');

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        _addressData[to].balance += uint128(quantity);
        _addressData[to].numberMinted += uint128(quantity);

        _ownerships[startTokenId].addr = to;
        _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

        uint256 updatedIndex = startTokenId;

        for (uint256 i = 0; i < quantity; i++) {
            emit Transfer(address(0), to, updatedIndex);
            if (safe) {
                require(
                    _checkOnERC721Received(address(0), to, updatedIndex, _data),
                    'ERC721A: transfer to non ERC721Receiver implementer'
                );
            }
            updatedIndex++;
        }

        currentIndex = updatedIndex;
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved');

        require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner');
        require(to != address(0), 'ERC721A: transfer to the zero address');

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
        }

        _ownerships[tokenId].addr = to;
        _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

        // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
        // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
        uint256 nextTokenId = tokenId + 1;
        if (_ownerships[nextTokenId].addr == address(0)) {
            if (_exists(nextTokenId)) {
                _ownerships[nextTokenId].addr = prevOwnership.addr;
                _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous ownefr 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(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert('ERC721A: transfer to non ERC721Receiver implementer');
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * 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`.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_price","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"}],"name":"reserveBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600155662386f26fc1000060025533600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006257600080fd5b50604051620042ce380380620042ce83398181016040528101906200008891906200030e565b620000a86200009c6200011460201b60201c565b6200011c60201b60201c565b8160039080519060200190620000c0929190620001e0565b508060059080519060200190620000d9929190620001e0565b506040518060600160405280603681526020016200429860369139600690805190602001906200010b929190620001e0565b50505062000517565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001ee9062000428565b90600052602060002090601f0160209004810192826200021257600085556200025e565b82601f106200022d57805160ff19168380011785556200025e565b828001600101855582156200025e579182015b828111156200025d57825182559160200191906001019062000240565b5b5090506200026d919062000271565b5090565b5b808211156200028c57600081600090555060010162000272565b5090565b6000620002a7620002a184620003bc565b62000393565b905082815260208101848484011115620002c657620002c5620004f7565b5b620002d3848285620003f2565b509392505050565b600082601f830112620002f357620002f2620004f2565b5b81516200030584826020860162000290565b91505092915050565b6000806040838503121562000328576200032762000501565b5b600083015167ffffffffffffffff811115620003495762000348620004fc565b5b6200035785828601620002db565b925050602083015167ffffffffffffffff8111156200037b576200037a620004fc565b5b6200038985828601620002db565b9150509250929050565b60006200039f620003b2565b9050620003ad82826200045e565b919050565b6000604051905090565b600067ffffffffffffffff821115620003da57620003d9620004c3565b5b620003e58262000506565b9050602081019050919050565b60005b8381101562000412578082015181840152602081019050620003f5565b8381111562000422576000848401525b50505050565b600060028204905060018216806200044157607f821691505b6020821081141562000458576200045762000494565b5b50919050565b620004698262000506565b810181811067ffffffffffffffff821117156200048b576200048a620004c3565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b613d7180620005276000396000f3fe6080604052600436106101665760003560e01c80636352211e116100d157806395d89b411161008a578063c87b56dd11610064578063c87b56dd1461052b578063cc47a40b14610568578063e985e9c514610591578063f2fde38b146105ce57610166565b806395d89b41146104ae578063a22cb465146104d9578063b88d4fde1461050257610166565b80636352211e146103a057806370a08231146103dd578063715018a61461041a5780637ba5b5fb146104315780638da5cb5b1461045a57806391b7f5ed1461048557610166565b806323b872dd1161012357806323b872dd1461028f5780632f745c59146102b857806340c10f19146102f557806342842e0e146103115780634f6ccce71461033a57806355f804b31461037757610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806318160ddd14610239578063235b6ea114610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d9190612a62565b6105f7565b60405161019f9190612f54565b60405180910390f35b3480156101b457600080fd5b506101bd610741565b6040516101ca9190612f6f565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612b05565b6107d3565b6040516102079190612eed565b60405180910390f35b34801561021c57600080fd5b50610237600480360381019061023291906129d9565b610858565b005b34801561024557600080fd5b5061024e610971565b60405161025b91906131f1565b60405180910390f35b34801561027057600080fd5b5061027961097b565b60405161028691906131f1565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906128c3565b610981565b005b3480156102c457600080fd5b506102df60048036038101906102da91906129d9565b610991565b6040516102ec91906131f1565b60405180910390f35b61030f600480360381019061030a91906129d9565b610b8f565b005b34801561031d57600080fd5b50610338600480360381019061033391906128c3565b610c55565b005b34801561034657600080fd5b50610361600480360381019061035c9190612b05565b610c75565b60405161036e91906131f1565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190612abc565b610cc8565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190612b05565b610d5e565b6040516103d49190612eed565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612856565b610d74565b60405161041191906131f1565b60405180910390f35b34801561042657600080fd5b5061042f610e5d565b005b34801561043d57600080fd5b5061045860048036038101906104539190612a19565b610ee5565b005b34801561046657600080fd5b5061046f610f87565b60405161047c9190612eed565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190612b05565b610fb0565b005b3480156104ba57600080fd5b506104c3611014565b6040516104d09190612f6f565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612999565b6110a6565b005b34801561050e57600080fd5b5061052960048036038101906105249190612916565b611227565b005b34801561053757600080fd5b50610552600480360381019061054d9190612b05565b611283565b60405161055f9190612f6f565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a91906129d9565b61132a565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612883565b6113ae565b6040516105c59190612f54565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190612856565b611442565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073a57506107398261153a565b5b9050919050565b60606003805461075090613559565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90613559565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107de826115a4565b61081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906131d1565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086382610d5e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb90613111565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f36115b2565b73ffffffffffffffffffffffffffffffffffffffff16148061092257506109218161091c6115b2565b6113ae565b5b610961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095890613031565b60405180910390fd5b61096c8383836115ba565b505050565b6000600154905090565b60025481565b61098c83838361166c565b505050565b600061099c83610d74565b82106109dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d490612f91565b60405180910390fd5b60006109e7610971565b905060008060005b83811015610b4d576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ae157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b395786841415610b2a578195505050505050610b89565b8380610b35906135bc565b9450505b508080610b45906135bc565b9150506109ef565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b80906131b1565b60405180910390fd5b92915050565b601e8111158015610ba05750600081115b610ba957600080fd5b3481600254610bb891906133cf565b14610bc257600080fd5b61271081600154610bd39190613348565b1115610bde57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610c46573d6000803e3d6000fd5b50610c518282611bb5565b5050565b610c7083838360405180602001604052806000815250611227565b505050565b6000610c7f610971565b8210610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790612ff1565b60405180910390fd5b819050919050565b610cd06115b2565b73ffffffffffffffffffffffffffffffffffffffff16610cee610f87565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90613091565b60405180910390fd5b8060069080519060200190610d5a929190612592565b5050565b6000610d6982611bd3565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90613051565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e656115b2565b73ffffffffffffffffffffffffffffffffffffffff16610e83610f87565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613091565b60405180910390fd5b610ee36000611d2e565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3f57600080fd5b60005b8151811015610f8357610f70828281518110610f6157610f606136c3565b5b60200260200101516001611bb5565b8080610f7b906135bc565b915050610f42565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100a57600080fd5b8060028190555050565b60606005805461102390613559565b80601f016020809104026020016040519081016040528092919081815260200182805461104f90613559565b801561109c5780601f106110715761010080835404028352916020019161109c565b820191906000526020600020905b81548152906001019060200180831161107f57829003601f168201915b5050505050905090565b6110ae6115b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561111c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611113906130d1565b60405180910390fd5b80600a60006111296115b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111d66115b2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161121b9190612f54565b60405180910390a35050565b61123284848461166c565b61123e84848484611df2565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613131565b60405180910390fd5b50505050565b606061128e826115a4565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906130b1565b60405180910390fd5b60006112d7611f89565b905060008151116112f75760405180602001604052806000815250611322565b806113018461201b565b604051602001611312929190612ebe565b6040516020818303038152906040525b915050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138457600080fd5b612710816001546113959190613348565b11156113a057600080fd5b6113aa8282611bb5565b5050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61144a6115b2565b73ffffffffffffffffffffffffffffffffffffffff16611468610f87565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590612fb1565b60405180910390fd5b61153781611d2e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061167782611bd3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661169e6115b2565b73ffffffffffffffffffffffffffffffffffffffff1614806116fa57506116c36115b2565b73ffffffffffffffffffffffffffffffffffffffff166116e2846107d3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611716575061171582600001516117106115b2565b6113ae565b5b905080611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906130f1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613011565b60405180910390fd5b611847858585600161217c565b61185760008484600001516115ba565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836007600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184611a2e9190613348565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b4557611aa4816115a4565b15611b445782600001516007600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516007600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bad8686866001612182565b505050505050565b611bcf828260405180602001604052806000815250612188565b5050565b611bdb612618565b611be4826115a4565b611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90612fd1565b60405180910390fd5b60008290505b6000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d15578092505050611d29565b508080611d219061352f565b915050611c29565b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e138473ffffffffffffffffffffffffffffffffffffffff1661219a565b15611f7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3c6115b2565b8786866040518563ffffffff1660e01b8152600401611e5e9493929190612f08565b602060405180830381600087803b158015611e7857600080fd5b505af1925050508015611ea957506040513d601f19601f82011682018060405250810190611ea69190612a8f565b60015b611f2c573d8060008114611ed9576040519150601f19603f3d011682016040523d82523d6000602084013e611ede565b606091505b50600081511415611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b90613131565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f81565b600190505b949350505050565b606060068054611f9890613559565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc490613559565b80156120115780601f10611fe657610100808354040283529160200191612011565b820191906000526020600020905b815481529060010190602001808311611ff457829003601f168201915b5050505050905090565b60606000821415612063576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612177565b600082905060005b6000821461209557808061207e906135bc565b915050600a8261208e919061339e565b915061206b565b60008167ffffffffffffffff8111156120b1576120b06136f2565b5b6040519080825280601f01601f1916602001820160405280156120e35781602001600182028036833780820191505090505b5090505b60008514612170576001826120fc9190613429565b9150600a8561210b9190613605565b60306121179190613348565b60f81b81838151811061212d5761212c6136c3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612169919061339e565b94506120e7565b8093505050505b919050565b50505050565b50505050565b61219583838360016121ad565b505050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613171565b60405180910390fd5b61222d816115a4565b1561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613151565b60405180910390fd5b600084116122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790613191565b60405180910390fd5b6122bd600086838761217c565b83600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661232a9190613302565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff166123cd9190613302565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846007600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561257557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612554576125146000888488611df2565b612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90613131565b60405180910390fd5b5b818061255f906135bc565b925050808061256d906135bc565b91505061249d565b508060018190555061258a6000878488612182565b505050505050565b82805461259e90613559565b90600052602060002090601f0160209004810192826125c05760008555612607565b82601f106125d957805160ff1916838001178555612607565b82800160010185558215612607579182015b828111156126065782518255916020019190600101906125eb565b5b5090506126149190612652565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561266b576000816000905550600101612653565b5090565b600061268261267d84613231565b61320c565b905080838252602082019050828560208602820111156126a5576126a4613726565b5b60005b858110156126d557816126bb8882612763565b8452602084019350602083019250506001810190506126a8565b5050509392505050565b60006126f26126ed8461325d565b61320c565b90508281526020810184848401111561270e5761270d61372b565b5b6127198482856134ed565b509392505050565b600061273461272f8461328e565b61320c565b9050828152602081018484840111156127505761274f61372b565b5b61275b8482856134ed565b509392505050565b60008135905061277281613cdf565b92915050565b600082601f83011261278d5761278c613721565b5b813561279d84826020860161266f565b91505092915050565b6000813590506127b581613cf6565b92915050565b6000813590506127ca81613d0d565b92915050565b6000815190506127df81613d0d565b92915050565b600082601f8301126127fa576127f9613721565b5b813561280a8482602086016126df565b91505092915050565b600082601f83011261282857612827613721565b5b8135612838848260208601612721565b91505092915050565b60008135905061285081613d24565b92915050565b60006020828403121561286c5761286b613735565b5b600061287a84828501612763565b91505092915050565b6000806040838503121561289a57612899613735565b5b60006128a885828601612763565b92505060206128b985828601612763565b9150509250929050565b6000806000606084860312156128dc576128db613735565b5b60006128ea86828701612763565b93505060206128fb86828701612763565b925050604061290c86828701612841565b9150509250925092565b600080600080608085870312156129305761292f613735565b5b600061293e87828801612763565b945050602061294f87828801612763565b935050604061296087828801612841565b925050606085013567ffffffffffffffff81111561298157612980613730565b5b61298d878288016127e5565b91505092959194509250565b600080604083850312156129b0576129af613735565b5b60006129be85828601612763565b92505060206129cf858286016127a6565b9150509250929050565b600080604083850312156129f0576129ef613735565b5b60006129fe85828601612763565b9250506020612a0f85828601612841565b9150509250929050565b600060208284031215612a2f57612a2e613735565b5b600082013567ffffffffffffffff811115612a4d57612a4c613730565b5b612a5984828501612778565b91505092915050565b600060208284031215612a7857612a77613735565b5b6000612a86848285016127bb565b91505092915050565b600060208284031215612aa557612aa4613735565b5b6000612ab3848285016127d0565b91505092915050565b600060208284031215612ad257612ad1613735565b5b600082013567ffffffffffffffff811115612af057612aef613730565b5b612afc84828501612813565b91505092915050565b600060208284031215612b1b57612b1a613735565b5b6000612b2984828501612841565b91505092915050565b612b3b8161345d565b82525050565b612b4a8161346f565b82525050565b6000612b5b826132bf565b612b6581856132d5565b9350612b758185602086016134fc565b612b7e8161373a565b840191505092915050565b6000612b94826132ca565b612b9e81856132e6565b9350612bae8185602086016134fc565b612bb78161373a565b840191505092915050565b6000612bcd826132ca565b612bd781856132f7565b9350612be78185602086016134fc565b80840191505092915050565b6000612c006022836132e6565b9150612c0b8261374b565b604082019050919050565b6000612c236026836132e6565b9150612c2e8261379a565b604082019050919050565b6000612c46602a836132e6565b9150612c51826137e9565b604082019050919050565b6000612c696023836132e6565b9150612c7482613838565b604082019050919050565b6000612c8c6025836132e6565b9150612c9782613887565b604082019050919050565b6000612caf6039836132e6565b9150612cba826138d6565b604082019050919050565b6000612cd2602b836132e6565b9150612cdd82613925565b604082019050919050565b6000612cf56026836132e6565b9150612d0082613974565b604082019050919050565b6000612d186005836132f7565b9150612d23826139c3565b600582019050919050565b6000612d3b6020836132e6565b9150612d46826139ec565b602082019050919050565b6000612d5e602f836132e6565b9150612d6982613a15565b604082019050919050565b6000612d81601a836132e6565b9150612d8c82613a64565b602082019050919050565b6000612da46032836132e6565b9150612daf82613a8d565b604082019050919050565b6000612dc76022836132e6565b9150612dd282613adc565b604082019050919050565b6000612dea6033836132e6565b9150612df582613b2b565b604082019050919050565b6000612e0d601d836132e6565b9150612e1882613b7a565b602082019050919050565b6000612e306021836132e6565b9150612e3b82613ba3565b604082019050919050565b6000612e536028836132e6565b9150612e5e82613bf2565b604082019050919050565b6000612e76602e836132e6565b9150612e8182613c41565b604082019050919050565b6000612e99602d836132e6565b9150612ea482613c90565b604082019050919050565b612eb8816134e3565b82525050565b6000612eca8285612bc2565b9150612ed68284612bc2565b9150612ee182612d0b565b91508190509392505050565b6000602082019050612f026000830184612b32565b92915050565b6000608082019050612f1d6000830187612b32565b612f2a6020830186612b32565b612f376040830185612eaf565b8181036060830152612f498184612b50565b905095945050505050565b6000602082019050612f696000830184612b41565b92915050565b60006020820190508181036000830152612f898184612b89565b905092915050565b60006020820190508181036000830152612faa81612bf3565b9050919050565b60006020820190508181036000830152612fca81612c16565b9050919050565b60006020820190508181036000830152612fea81612c39565b9050919050565b6000602082019050818103600083015261300a81612c5c565b9050919050565b6000602082019050818103600083015261302a81612c7f565b9050919050565b6000602082019050818103600083015261304a81612ca2565b9050919050565b6000602082019050818103600083015261306a81612cc5565b9050919050565b6000602082019050818103600083015261308a81612ce8565b9050919050565b600060208201905081810360008301526130aa81612d2e565b9050919050565b600060208201905081810360008301526130ca81612d51565b9050919050565b600060208201905081810360008301526130ea81612d74565b9050919050565b6000602082019050818103600083015261310a81612d97565b9050919050565b6000602082019050818103600083015261312a81612dba565b9050919050565b6000602082019050818103600083015261314a81612ddd565b9050919050565b6000602082019050818103600083015261316a81612e00565b9050919050565b6000602082019050818103600083015261318a81612e23565b9050919050565b600060208201905081810360008301526131aa81612e46565b9050919050565b600060208201905081810360008301526131ca81612e69565b9050919050565b600060208201905081810360008301526131ea81612e8c565b9050919050565b60006020820190506132066000830184612eaf565b92915050565b6000613216613227565b9050613222828261358b565b919050565b6000604051905090565b600067ffffffffffffffff82111561324c5761324b6136f2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613278576132776136f2565b5b6132818261373a565b9050602081019050919050565b600067ffffffffffffffff8211156132a9576132a86136f2565b5b6132b28261373a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061330d826134a7565b9150613318836134a7565b9250826fffffffffffffffffffffffffffffffff0382111561333d5761333c613636565b5b828201905092915050565b6000613353826134e3565b915061335e836134e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561339357613392613636565b5b828201905092915050565b60006133a9826134e3565b91506133b4836134e3565b9250826133c4576133c3613665565b5b828204905092915050565b60006133da826134e3565b91506133e5836134e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561341e5761341d613636565b5b828202905092915050565b6000613434826134e3565b915061343f836134e3565b92508282101561345257613451613636565b5b828203905092915050565b6000613468826134c3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561351a5780820151818401526020810190506134ff565b83811115613529576000848401525b50505050565b600061353a826134e3565b9150600082141561354e5761354d613636565b5b600182039050919050565b6000600282049050600182168061357157607f821691505b6020821081141561358557613584613694565b5b50919050565b6135948261373a565b810181811067ffffffffffffffff821117156135b3576135b26136f2565b5b80604052505050565b60006135c7826134e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135fa576135f9613636565b5b600182019050919050565b6000613610826134e3565b915061361b836134e3565b92508261362b5761362a613665565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b613ce88161345d565b8114613cf357600080fd5b50565b613cff8161346f565b8114613d0a57600080fd5b50565b613d168161347b565b8114613d2157600080fd5b50565b613d2d816134e3565b8114613d3857600080fd5b5056fea2646970667358221220b84925f0bd4fe92634234c7f8725e80e54303b9553b3e19e87d6ac7115f722ce64736f6c63430008070033697066733a2f2f516d55536976437a597068693569326837524772695935626472425662396e4c7447357932743337425250584c392f00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000856322050756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006563250554e4b0000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106101665760003560e01c80636352211e116100d157806395d89b411161008a578063c87b56dd11610064578063c87b56dd1461052b578063cc47a40b14610568578063e985e9c514610591578063f2fde38b146105ce57610166565b806395d89b41146104ae578063a22cb465146104d9578063b88d4fde1461050257610166565b80636352211e146103a057806370a08231146103dd578063715018a61461041a5780637ba5b5fb146104315780638da5cb5b1461045a57806391b7f5ed1461048557610166565b806323b872dd1161012357806323b872dd1461028f5780632f745c59146102b857806340c10f19146102f557806342842e0e146103115780634f6ccce71461033a57806355f804b31461037757610166565b806301ffc9a71461016b57806306fdde03146101a8578063081812fc146101d3578063095ea7b31461021057806318160ddd14610239578063235b6ea114610264575b600080fd5b34801561017757600080fd5b50610192600480360381019061018d9190612a62565b6105f7565b60405161019f9190612f54565b60405180910390f35b3480156101b457600080fd5b506101bd610741565b6040516101ca9190612f6f565b60405180910390f35b3480156101df57600080fd5b506101fa60048036038101906101f59190612b05565b6107d3565b6040516102079190612eed565b60405180910390f35b34801561021c57600080fd5b50610237600480360381019061023291906129d9565b610858565b005b34801561024557600080fd5b5061024e610971565b60405161025b91906131f1565b60405180910390f35b34801561027057600080fd5b5061027961097b565b60405161028691906131f1565b60405180910390f35b34801561029b57600080fd5b506102b660048036038101906102b191906128c3565b610981565b005b3480156102c457600080fd5b506102df60048036038101906102da91906129d9565b610991565b6040516102ec91906131f1565b60405180910390f35b61030f600480360381019061030a91906129d9565b610b8f565b005b34801561031d57600080fd5b50610338600480360381019061033391906128c3565b610c55565b005b34801561034657600080fd5b50610361600480360381019061035c9190612b05565b610c75565b60405161036e91906131f1565b60405180910390f35b34801561038357600080fd5b5061039e60048036038101906103999190612abc565b610cc8565b005b3480156103ac57600080fd5b506103c760048036038101906103c29190612b05565b610d5e565b6040516103d49190612eed565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190612856565b610d74565b60405161041191906131f1565b60405180910390f35b34801561042657600080fd5b5061042f610e5d565b005b34801561043d57600080fd5b5061045860048036038101906104539190612a19565b610ee5565b005b34801561046657600080fd5b5061046f610f87565b60405161047c9190612eed565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190612b05565b610fb0565b005b3480156104ba57600080fd5b506104c3611014565b6040516104d09190612f6f565b60405180910390f35b3480156104e557600080fd5b5061050060048036038101906104fb9190612999565b6110a6565b005b34801561050e57600080fd5b5061052960048036038101906105249190612916565b611227565b005b34801561053757600080fd5b50610552600480360381019061054d9190612b05565b611283565b60405161055f9190612f6f565b60405180910390f35b34801561057457600080fd5b5061058f600480360381019061058a91906129d9565b61132a565b005b34801561059d57600080fd5b506105b860048036038101906105b39190612883565b6113ae565b6040516105c59190612f54565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f09190612856565b611442565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061072a57507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061073a57506107398261153a565b5b9050919050565b60606003805461075090613559565b80601f016020809104026020016040519081016040528092919081815260200182805461077c90613559565b80156107c95780601f1061079e576101008083540402835291602001916107c9565b820191906000526020600020905b8154815290600101906020018083116107ac57829003601f168201915b5050505050905090565b60006107de826115a4565b61081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906131d1565b60405180910390fd5b6009600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061086382610d5e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108cb90613111565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108f36115b2565b73ffffffffffffffffffffffffffffffffffffffff16148061092257506109218161091c6115b2565b6113ae565b5b610961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095890613031565b60405180910390fd5b61096c8383836115ba565b505050565b6000600154905090565b60025481565b61098c83838361166c565b505050565b600061099c83610d74565b82106109dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d490612f91565b60405180910390fd5b60006109e7610971565b905060008060005b83811015610b4d576000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610ae157806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b395786841415610b2a578195505050505050610b89565b8380610b35906135bc565b9450505b508080610b45906135bc565b9150506109ef565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b80906131b1565b60405180910390fd5b92915050565b601e8111158015610ba05750600081115b610ba957600080fd5b3481600254610bb891906133cf565b14610bc257600080fd5b61271081600154610bd39190613348565b1115610bde57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610c46573d6000803e3d6000fd5b50610c518282611bb5565b5050565b610c7083838360405180602001604052806000815250611227565b505050565b6000610c7f610971565b8210610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790612ff1565b60405180910390fd5b819050919050565b610cd06115b2565b73ffffffffffffffffffffffffffffffffffffffff16610cee610f87565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90613091565b60405180910390fd5b8060069080519060200190610d5a929190612592565b5050565b6000610d6982611bd3565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610de5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ddc90613051565b60405180910390fd5b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b610e656115b2565b73ffffffffffffffffffffffffffffffffffffffff16610e83610f87565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613091565b60405180910390fd5b610ee36000611d2e565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f3f57600080fd5b60005b8151811015610f8357610f70828281518110610f6157610f606136c3565b5b60200260200101516001611bb5565b8080610f7b906135bc565b915050610f42565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461100a57600080fd5b8060028190555050565b60606005805461102390613559565b80601f016020809104026020016040519081016040528092919081815260200182805461104f90613559565b801561109c5780601f106110715761010080835404028352916020019161109c565b820191906000526020600020905b81548152906001019060200180831161107f57829003601f168201915b5050505050905090565b6110ae6115b2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561111c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611113906130d1565b60405180910390fd5b80600a60006111296115b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166111d66115b2565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161121b9190612f54565b60405180910390a35050565b61123284848461166c565b61123e84848484611df2565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490613131565b60405180910390fd5b50505050565b606061128e826115a4565b6112cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c4906130b1565b60405180910390fd5b60006112d7611f89565b905060008151116112f75760405180602001604052806000815250611322565b806113018461201b565b604051602001611312929190612ebe565b6040516020818303038152906040525b915050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461138457600080fd5b612710816001546113959190613348565b11156113a057600080fd5b6113aa8282611bb5565b5050565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61144a6115b2565b73ffffffffffffffffffffffffffffffffffffffff16611468610f87565b73ffffffffffffffffffffffffffffffffffffffff16146114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590613091565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590612fb1565b60405180910390fd5b61153781611d2e565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600060015482109050919050565b600033905090565b826009600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600061167782611bd3565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661169e6115b2565b73ffffffffffffffffffffffffffffffffffffffff1614806116fa57506116c36115b2565b73ffffffffffffffffffffffffffffffffffffffff166116e2846107d3565b73ffffffffffffffffffffffffffffffffffffffff16145b80611716575061171582600001516117106115b2565b6113ae565b5b905080611758576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174f906130f1565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff16146117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190613071565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561183a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183190613011565b60405180910390fd5b611847858585600161217c565b61185760008484600001516115ba565b6001600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836007600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184611a2e9190613348565b9050600073ffffffffffffffffffffffffffffffffffffffff166007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b4557611aa4816115a4565b15611b445782600001516007600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516007600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611bad8686866001612182565b505050505050565b611bcf828260405180602001604052806000815250612188565b5050565b611bdb612618565b611be4826115a4565b611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90612fd1565b60405180910390fd5b60008290505b6000600760008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d15578092505050611d29565b508080611d219061352f565b915050611c29565b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611e138473ffffffffffffffffffffffffffffffffffffffff1661219a565b15611f7c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611e3c6115b2565b8786866040518563ffffffff1660e01b8152600401611e5e9493929190612f08565b602060405180830381600087803b158015611e7857600080fd5b505af1925050508015611ea957506040513d601f19601f82011682018060405250810190611ea69190612a8f565b60015b611f2c573d8060008114611ed9576040519150601f19603f3d011682016040523d82523d6000602084013e611ede565b606091505b50600081511415611f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1b90613131565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f81565b600190505b949350505050565b606060068054611f9890613559565b80601f0160208091040260200160405190810160405280929190818152602001828054611fc490613559565b80156120115780601f10611fe657610100808354040283529160200191612011565b820191906000526020600020905b815481529060010190602001808311611ff457829003601f168201915b5050505050905090565b60606000821415612063576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612177565b600082905060005b6000821461209557808061207e906135bc565b915050600a8261208e919061339e565b915061206b565b60008167ffffffffffffffff8111156120b1576120b06136f2565b5b6040519080825280601f01601f1916602001820160405280156120e35781602001600182028036833780820191505090505b5090505b60008514612170576001826120fc9190613429565b9150600a8561210b9190613605565b60306121179190613348565b60f81b81838151811061212d5761212c6136c3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612169919061339e565b94506120e7565b8093505050505b919050565b50505050565b50505050565b61219583838360016121ad565b505050565b600080823b905060008111915050919050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612224576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221b90613171565b60405180910390fd5b61222d816115a4565b1561226d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226490613151565b60405180910390fd5b600084116122b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a790613191565b60405180910390fd5b6122bd600086838761217c565b83600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff1661232a9190613302565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff166123cd9190613302565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846007600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426007600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561257557818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315612554576125146000888488611df2565b612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90613131565b60405180910390fd5b5b818061255f906135bc565b925050808061256d906135bc565b91505061249d565b508060018190555061258a6000878488612182565b505050505050565b82805461259e90613559565b90600052602060002090601f0160209004810192826125c05760008555612607565b82601f106125d957805160ff1916838001178555612607565b82800160010185558215612607579182015b828111156126065782518255916020019190600101906125eb565b5b5090506126149190612652565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561266b576000816000905550600101612653565b5090565b600061268261267d84613231565b61320c565b905080838252602082019050828560208602820111156126a5576126a4613726565b5b60005b858110156126d557816126bb8882612763565b8452602084019350602083019250506001810190506126a8565b5050509392505050565b60006126f26126ed8461325d565b61320c565b90508281526020810184848401111561270e5761270d61372b565b5b6127198482856134ed565b509392505050565b600061273461272f8461328e565b61320c565b9050828152602081018484840111156127505761274f61372b565b5b61275b8482856134ed565b509392505050565b60008135905061277281613cdf565b92915050565b600082601f83011261278d5761278c613721565b5b813561279d84826020860161266f565b91505092915050565b6000813590506127b581613cf6565b92915050565b6000813590506127ca81613d0d565b92915050565b6000815190506127df81613d0d565b92915050565b600082601f8301126127fa576127f9613721565b5b813561280a8482602086016126df565b91505092915050565b600082601f83011261282857612827613721565b5b8135612838848260208601612721565b91505092915050565b60008135905061285081613d24565b92915050565b60006020828403121561286c5761286b613735565b5b600061287a84828501612763565b91505092915050565b6000806040838503121561289a57612899613735565b5b60006128a885828601612763565b92505060206128b985828601612763565b9150509250929050565b6000806000606084860312156128dc576128db613735565b5b60006128ea86828701612763565b93505060206128fb86828701612763565b925050604061290c86828701612841565b9150509250925092565b600080600080608085870312156129305761292f613735565b5b600061293e87828801612763565b945050602061294f87828801612763565b935050604061296087828801612841565b925050606085013567ffffffffffffffff81111561298157612980613730565b5b61298d878288016127e5565b91505092959194509250565b600080604083850312156129b0576129af613735565b5b60006129be85828601612763565b92505060206129cf858286016127a6565b9150509250929050565b600080604083850312156129f0576129ef613735565b5b60006129fe85828601612763565b9250506020612a0f85828601612841565b9150509250929050565b600060208284031215612a2f57612a2e613735565b5b600082013567ffffffffffffffff811115612a4d57612a4c613730565b5b612a5984828501612778565b91505092915050565b600060208284031215612a7857612a77613735565b5b6000612a86848285016127bb565b91505092915050565b600060208284031215612aa557612aa4613735565b5b6000612ab3848285016127d0565b91505092915050565b600060208284031215612ad257612ad1613735565b5b600082013567ffffffffffffffff811115612af057612aef613730565b5b612afc84828501612813565b91505092915050565b600060208284031215612b1b57612b1a613735565b5b6000612b2984828501612841565b91505092915050565b612b3b8161345d565b82525050565b612b4a8161346f565b82525050565b6000612b5b826132bf565b612b6581856132d5565b9350612b758185602086016134fc565b612b7e8161373a565b840191505092915050565b6000612b94826132ca565b612b9e81856132e6565b9350612bae8185602086016134fc565b612bb78161373a565b840191505092915050565b6000612bcd826132ca565b612bd781856132f7565b9350612be78185602086016134fc565b80840191505092915050565b6000612c006022836132e6565b9150612c0b8261374b565b604082019050919050565b6000612c236026836132e6565b9150612c2e8261379a565b604082019050919050565b6000612c46602a836132e6565b9150612c51826137e9565b604082019050919050565b6000612c696023836132e6565b9150612c7482613838565b604082019050919050565b6000612c8c6025836132e6565b9150612c9782613887565b604082019050919050565b6000612caf6039836132e6565b9150612cba826138d6565b604082019050919050565b6000612cd2602b836132e6565b9150612cdd82613925565b604082019050919050565b6000612cf56026836132e6565b9150612d0082613974565b604082019050919050565b6000612d186005836132f7565b9150612d23826139c3565b600582019050919050565b6000612d3b6020836132e6565b9150612d46826139ec565b602082019050919050565b6000612d5e602f836132e6565b9150612d6982613a15565b604082019050919050565b6000612d81601a836132e6565b9150612d8c82613a64565b602082019050919050565b6000612da46032836132e6565b9150612daf82613a8d565b604082019050919050565b6000612dc76022836132e6565b9150612dd282613adc565b604082019050919050565b6000612dea6033836132e6565b9150612df582613b2b565b604082019050919050565b6000612e0d601d836132e6565b9150612e1882613b7a565b602082019050919050565b6000612e306021836132e6565b9150612e3b82613ba3565b604082019050919050565b6000612e536028836132e6565b9150612e5e82613bf2565b604082019050919050565b6000612e76602e836132e6565b9150612e8182613c41565b604082019050919050565b6000612e99602d836132e6565b9150612ea482613c90565b604082019050919050565b612eb8816134e3565b82525050565b6000612eca8285612bc2565b9150612ed68284612bc2565b9150612ee182612d0b565b91508190509392505050565b6000602082019050612f026000830184612b32565b92915050565b6000608082019050612f1d6000830187612b32565b612f2a6020830186612b32565b612f376040830185612eaf565b8181036060830152612f498184612b50565b905095945050505050565b6000602082019050612f696000830184612b41565b92915050565b60006020820190508181036000830152612f898184612b89565b905092915050565b60006020820190508181036000830152612faa81612bf3565b9050919050565b60006020820190508181036000830152612fca81612c16565b9050919050565b60006020820190508181036000830152612fea81612c39565b9050919050565b6000602082019050818103600083015261300a81612c5c565b9050919050565b6000602082019050818103600083015261302a81612c7f565b9050919050565b6000602082019050818103600083015261304a81612ca2565b9050919050565b6000602082019050818103600083015261306a81612cc5565b9050919050565b6000602082019050818103600083015261308a81612ce8565b9050919050565b600060208201905081810360008301526130aa81612d2e565b9050919050565b600060208201905081810360008301526130ca81612d51565b9050919050565b600060208201905081810360008301526130ea81612d74565b9050919050565b6000602082019050818103600083015261310a81612d97565b9050919050565b6000602082019050818103600083015261312a81612dba565b9050919050565b6000602082019050818103600083015261314a81612ddd565b9050919050565b6000602082019050818103600083015261316a81612e00565b9050919050565b6000602082019050818103600083015261318a81612e23565b9050919050565b600060208201905081810360008301526131aa81612e46565b9050919050565b600060208201905081810360008301526131ca81612e69565b9050919050565b600060208201905081810360008301526131ea81612e8c565b9050919050565b60006020820190506132066000830184612eaf565b92915050565b6000613216613227565b9050613222828261358b565b919050565b6000604051905090565b600067ffffffffffffffff82111561324c5761324b6136f2565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613278576132776136f2565b5b6132818261373a565b9050602081019050919050565b600067ffffffffffffffff8211156132a9576132a86136f2565b5b6132b28261373a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061330d826134a7565b9150613318836134a7565b9250826fffffffffffffffffffffffffffffffff0382111561333d5761333c613636565b5b828201905092915050565b6000613353826134e3565b915061335e836134e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561339357613392613636565b5b828201905092915050565b60006133a9826134e3565b91506133b4836134e3565b9250826133c4576133c3613665565b5b828204905092915050565b60006133da826134e3565b91506133e5836134e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561341e5761341d613636565b5b828202905092915050565b6000613434826134e3565b915061343f836134e3565b92508282101561345257613451613636565b5b828203905092915050565b6000613468826134c3565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561351a5780820151818401526020810190506134ff565b83811115613529576000848401525b50505050565b600061353a826134e3565b9150600082141561354e5761354d613636565b5b600182039050919050565b6000600282049050600182168061357157607f821691505b6020821081141561358557613584613694565b5b50919050565b6135948261373a565b810181811067ffffffffffffffff821117156135b3576135b26136f2565b5b80604052505050565b60006135c7826134e3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135fa576135f9613636565b5b600182019050919050565b6000613610826134e3565b915061361b836134e3565b92508261362b5761362a613665565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a20746f6b656e20616c7265616479206d696e746564000000600082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b613ce88161345d565b8114613cf357600080fd5b50565b613cff8161346f565b8114613d0a57600080fd5b50565b613d168161347b565b8114613d2157600080fd5b50565b613d2d816134e3565b8114613d3857600080fd5b5056fea2646970667358221220b84925f0bd4fe92634234c7f8725e80e54303b9553b3e19e87d6ac7115f722ce64736f6c63430008070033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000856322050756e6b730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006563250554e4b0000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name_ (string): V2 Punks
Arg [1] : symbol_ (string): V2PUNK

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [3] : 56322050756e6b73000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 563250554e4b0000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

22974:16889:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26054:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27875:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29625:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29146:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24495:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23383:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30501:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25159:823;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32239:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30734:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24672:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28617:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27684:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26490:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12688:94;;;;;;;;;;;;;:::i;:::-;;31840:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12037:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31345:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28044:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29911:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30982:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28219:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32040:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30270:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12937:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26054:372;26156:4;26208:25;26193:40;;;:11;:40;;;;:105;;;;26265:33;26250:48;;;:11;:48;;;;26193:105;:172;;;;26330:35;26315:50;;;:11;:50;;;;26193:172;:225;;;;26382:36;26406:11;26382:23;:36::i;:::-;26193:225;26173:245;;26054:372;;;:::o;27875:100::-;27929:13;27962:5;27955:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27875:100;:::o;29625:214::-;29693:7;29721:16;29729:7;29721;:16::i;:::-;29713:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29807:15;:24;29823:7;29807:24;;;;;;;;;;;;;;;;;;;;;29800:31;;29625:214;;;:::o;29146:413::-;29219:13;29235:24;29251:7;29235:15;:24::i;:::-;29219:40;;29284:5;29278:11;;:2;:11;;;;29270:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29379:5;29363:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;29388:37;29405:5;29412:12;:10;:12::i;:::-;29388:16;:37::i;:::-;29363:62;29341:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29523:28;29532:2;29536:7;29545:5;29523:8;:28::i;:::-;29208:351;29146:413;;:::o;24495:100::-;24548:7;24575:12;;24568:19;;24495:100;:::o;23383:41::-;;;;:::o;30501:162::-;30627:28;30637:4;30643:2;30647:7;30627:9;:28::i;:::-;30501:162;;;:::o;25159:823::-;25248:7;25284:16;25294:5;25284:9;:16::i;:::-;25276:5;:24;25268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25350:22;25375:13;:11;:13::i;:::-;25350:38;;25399:19;25433:25;25487:9;25482:426;25506:14;25502:1;:18;25482:426;;;25542:31;25576:11;:14;25588:1;25576:14;;;;;;;;;;;25542:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25635:1;25609:28;;:9;:14;;;:28;;;25605:103;;25678:9;:14;;;25658:34;;25605:103;25747:5;25726:26;;:17;:26;;;25722:175;;;25792:5;25777:11;:20;25773:77;;;25829:1;25822:8;;;;;;;;;25773:77;25868:13;;;;;:::i;:::-;;;;25722:175;25527:381;25522:3;;;;;:::i;:::-;;;;25482:426;;;;25918:56;;;;;;;;;;:::i;:::-;;;;;;;;25159:823;;;;;:::o;32239:301::-;32331:2;32319:8;:14;;:30;;;;;32348:1;32337:8;:12;32319:30;32311:39;;;;;;32390:9;32378:8;32369:6;;:17;;;;:::i;:::-;:30;32361:39;;;;;;32446:5;32434:8;32419:12;;:23;;;;:::i;:::-;:32;;32411:41;;;;;;32471:6;;;;;;;;;;;32463:24;;:35;32488:9;32463:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32509:23;32519:2;32523:8;32509:9;:23::i;:::-;32239:301;;:::o;30734:177::-;30864:39;30881:4;30887:2;30891:7;30864:39;;;;;;;;;;;;:16;:39::i;:::-;30734:177;;;:::o;24672:187::-;24739:7;24775:13;:11;:13::i;:::-;24767:5;:21;24759:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24846:5;24839:12;;24672:187;;;:::o;28617:111::-;12268:12;:10;:12::i;:::-;12257:23;;:7;:5;:7::i;:::-;:23;;;12249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28712:8:::1;28693:16;:27;;;;;;;;;;;;:::i;:::-;;28617:111:::0;:::o;27684:124::-;27748:7;27775:20;27787:7;27775:11;:20::i;:::-;:25;;;27768:32;;27684:124;;;:::o;26490:221::-;26554:7;26599:1;26582:19;;:5;:19;;;;26574:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26675:12;:19;26688:5;26675:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26667:36;;26660:43;;26490:221;;;:::o;12688:94::-;12268:12;:10;:12::i;:::-;12257:23;;:7;:5;:7::i;:::-;:23;;;12249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12753:21:::1;12771:1;12753:9;:21::i;:::-;12688:94::o:0;31840:192::-;31925:6;;;;;;;;;;;31911:20;;:10;:20;;;31903:29;;;;;;31948:6;31943:82;31964:2;:9;31960:1;:13;31943:82;;;31994:19;32004:2;32007:1;32004:5;;;;;;;;:::i;:::-;;;;;;;;32011:1;31994:9;:19::i;:::-;31974:3;;;;;:::i;:::-;;;;31943:82;;;;31840:192;:::o;12037:87::-;12083:7;12110:6;;;;;;;;;;;12103:13;;12037:87;:::o;31345:121::-;31423:6;;;;;;;;;;;31409:20;;:10;:20;;;31401:29;;;;;;31450:8;31441:6;:17;;;;31345:121;:::o;28044:104::-;28100:13;28133:7;28126:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28044:104;:::o;29911:288::-;30018:12;:10;:12::i;:::-;30006:24;;:8;:24;;;;29998:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30119:8;30074:18;:32;30093:12;:10;:12::i;:::-;30074:32;;;;;;;;;;;;;;;:42;30107:8;30074:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;30172:8;30143:48;;30158:12;:10;:12::i;:::-;30143:48;;;30182:8;30143:48;;;;;;:::i;:::-;;;;;;;;29911:288;;:::o;30982:355::-;31141:28;31151:4;31157:2;31161:7;31141:9;:28::i;:::-;31202:48;31225:4;31231:2;31235:7;31244:5;31202:22;:48::i;:::-;31180:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;30982:355;;;;:::o;28219:343::-;28292:13;28326:16;28334:7;28326;:16::i;:::-;28318:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28407:21;28431:10;:8;:10::i;:::-;28407:34;;28483:1;28465:7;28459:21;:25;:95;;;;;;;;;;;;;;;;;28511:7;28520:18;:7;:16;:18::i;:::-;28494:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;28459:95;28452:102;;;28219:343;;;:::o;32040:191::-;32130:6;;;;;;;;;;;32116:20;;:10;:20;;;32108:29;;;;;;32183:5;32171:8;32156:12;;:23;;;;:::i;:::-;:32;;32148:41;;;;;;32200:23;32210:2;32214:8;32200:9;:23::i;:::-;32040:191;;:::o;30270:164::-;30367:4;30391:18;:25;30410:5;30391:25;;;;;;;;;;;;;;;:35;30417:8;30391:35;;;;;;;;;;;;;;;;;;;;;;;;;30384:42;;30270:164;;;;:::o;12937:192::-;12268:12;:10;:12::i;:::-;12257:23;;:7;:5;:7::i;:::-;:23;;;12249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13046:1:::1;13026:22;;:8;:22;;;;13018:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;13102:19;13112:8;13102:9;:19::i;:::-;12937:192:::0;:::o;15926:157::-;16011:4;16050:25;16035:40;;;:11;:40;;;;16028:47;;15926:157;;;:::o;31721:111::-;31778:4;31812:12;;31802:7;:22;31795:29;;31721:111;;;:::o;10825:98::-;10878:7;10905:10;10898:17;;10825:98;:::o;37077:196::-;37219:2;37192:15;:24;37208:7;37192:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37257:7;37253:2;37237:28;;37246:5;37237:28;;;;;;;;;;;;37077:196;;;:::o;35092:1867::-;35207:35;35245:20;35257:7;35245:11;:20::i;:::-;35207:58;;35278:22;35320:13;:18;;;35304:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;35379:12;:10;:12::i;:::-;35355:36;;:20;35367:7;35355:11;:20::i;:::-;:36;;;35304:87;:154;;;;35408:50;35425:13;:18;;;35445:12;:10;:12::i;:::-;35408:16;:50::i;:::-;35304:154;35278:181;;35480:17;35472:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;35595:4;35573:26;;:13;:18;;;:26;;;35565:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;35675:1;35661:16;;:2;:16;;;;35653:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;35732:43;35754:4;35760:2;35764:7;35773:1;35732:21;:43::i;:::-;35840:49;35857:1;35861:7;35870:13;:18;;;35840:8;:49::i;:::-;36124:1;36094:12;:18;36107:4;36094:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36168:1;36140:12;:16;36153:2;36140:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36221:2;36193:11;:20;36205:7;36193:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;36279:15;36234:11;:20;36246:7;36234:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;36535:19;36567:1;36557:7;:11;;;;:::i;:::-;36535:33;;36624:1;36583:43;;:11;:24;36595:11;36583:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;36579:275;;;36647:20;36655:11;36647:7;:20::i;:::-;36643:200;;;36720:13;:18;;;36688:11;:24;36700:11;36688:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;36799:13;:28;;;36757:11;:24;36769:11;36757:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;36643:200;36579:275;36890:7;36886:2;36871:27;;36880:4;36871:27;;;;;;;;;;;;36909:42;36930:4;36936:2;36940:7;36949:1;36909:20;:42::i;:::-;35196:1763;;;35092:1867;;;:::o;32548:104::-;32617:27;32627:2;32631:8;32617:27;;;;;;;;;;;;:9;:27::i;:::-;32548:104;;:::o;27150:472::-;27211:21;;:::i;:::-;27253:16;27261:7;27253;:16::i;:::-;27245:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27334:12;27349:7;27334:22;;27329:216;27383:31;27417:11;:17;27429:4;27417:17;;;;;;;;;;;27383:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27479:1;27453:28;;:9;:14;;;:28;;;27449:85;;27509:9;27502:16;;;;;;27449:85;27368:177;27360:6;;;;;:::i;:::-;;;;27329:216;;27150:472;;;;:::o;13137:173::-;13193:16;13212:6;;;;;;;;;;;13193:25;;13238:8;13229:6;;:17;;;;;;;;;;;;;;;;;;13293:8;13262:40;;13283:8;13262:40;;;;;;;;;;;;13182:128;13137:173;:::o;37839:804::-;37994:4;38015:15;:2;:13;;;:15::i;:::-;38011:625;;;38067:2;38051:36;;;38088:12;:10;:12::i;:::-;38102:4;38108:7;38117:5;38051:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38047:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38314:1;38297:6;:13;:18;38293:273;;;38340:61;;;;;;;;;;:::i;:::-;;;;;;;;38293:273;38516:6;38510:13;38501:6;38497:2;38493:15;38486:38;38047:534;38184:45;;;38174:55;;;:6;:55;;;;38167:62;;;;;38011:625;38620:4;38613:11;;37839:804;;;;;;;:::o;28976:108::-;29027:13;29060:16;29053:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28976:108;:::o;344:723::-;400:13;630:1;621:5;:10;617:53;;;648:10;;;;;;;;;;;;;;;;;;;;;617:53;680:12;695:5;680:20;;711:14;736:78;751:1;743:4;:9;736:78;;769:8;;;;;:::i;:::-;;;;800:2;792:10;;;;;:::i;:::-;;;736:78;;;824:19;856:6;846:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;824:39;;874:154;890:1;881:5;:10;874:154;;918:1;908:11;;;;;:::i;:::-;;;985:2;977:5;:10;;;;:::i;:::-;964:2;:24;;;;:::i;:::-;951:39;;934:6;941;934:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1014:2;1005:11;;;;;:::i;:::-;;;874:154;;;1052:6;1038:21;;;;;344:723;;;;:::o;39131:159::-;;;;;:::o;39702:158::-;;;;;:::o;33015:163::-;33138:32;33144:2;33148:8;33158:5;33165:4;33138:5;:32::i;:::-;33015:163;;;:::o;2869:387::-;2929:4;3137:12;3204:7;3192:20;3184:28;;3247:1;3240:4;:8;3233:15;;;2869:387;;;:::o;33437:1401::-;33576:20;33599:12;;33576:35;;33644:1;33630:16;;:2;:16;;;;33622:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33829:21;33837:12;33829:7;:21::i;:::-;33828:22;33820:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33914:1;33903:8;:12;33895:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33973:61;34003:1;34007:2;34011:12;34025:8;33973:21;:61::i;:::-;34083:8;34047:12;:16;34060:2;34047:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34144:8;34103:12;:16;34116:2;34103:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;34199:2;34166:11;:25;34178:12;34166:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;34262:15;34212:11;:25;34224:12;34212:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;34291:20;34314:12;34291:35;;34344:9;34339:381;34363:8;34359:1;:12;34339:381;;;34423:12;34419:2;34398:38;;34415:1;34398:38;;;;;;;;;;;;34455:4;34451:229;;;34510:59;34541:1;34545:2;34549:12;34563:5;34510:22;:59::i;:::-;34480:184;;;;;;;;;;;;:::i;:::-;;;;;;;;;34451:229;34694:14;;;;;:::i;:::-;;;;34373:3;;;;;:::i;:::-;;;;34339:381;;;;34747:12;34732;:27;;;;34770:60;34799:1;34803:2;34807:12;34821:8;34770:20;:60::i;:::-;33565:1273;;33437:1401;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:118::-;8928:24;8946:5;8928:24;:::i;:::-;8923:3;8916:37;8841:118;;:::o;8965:109::-;9046:21;9061:5;9046:21;:::i;:::-;9041:3;9034:34;8965:109;;:::o;9080:360::-;9166:3;9194:38;9226:5;9194:38;:::i;:::-;9248:70;9311:6;9306:3;9248:70;:::i;:::-;9241:77;;9327:52;9372:6;9367:3;9360:4;9353:5;9349:16;9327:52;:::i;:::-;9404:29;9426:6;9404:29;:::i;:::-;9399:3;9395:39;9388:46;;9170:270;9080:360;;;;:::o;9446:364::-;9534:3;9562:39;9595:5;9562:39;:::i;:::-;9617:71;9681:6;9676:3;9617:71;:::i;:::-;9610:78;;9697:52;9742:6;9737:3;9730:4;9723:5;9719:16;9697:52;:::i;:::-;9774:29;9796:6;9774:29;:::i;:::-;9769:3;9765:39;9758:46;;9538:272;9446:364;;;;:::o;9816:377::-;9922:3;9950:39;9983:5;9950:39;:::i;:::-;10005:89;10087:6;10082:3;10005:89;:::i;:::-;9998:96;;10103:52;10148:6;10143:3;10136:4;10129:5;10125:16;10103:52;:::i;:::-;10180:6;10175:3;10171:16;10164:23;;9926:267;9816:377;;;;:::o;10199:366::-;10341:3;10362:67;10426:2;10421:3;10362:67;:::i;:::-;10355:74;;10438:93;10527:3;10438:93;:::i;:::-;10556:2;10551:3;10547:12;10540:19;;10199:366;;;:::o;10571:::-;10713:3;10734:67;10798:2;10793:3;10734:67;:::i;:::-;10727:74;;10810:93;10899:3;10810:93;:::i;:::-;10928:2;10923:3;10919:12;10912:19;;10571:366;;;:::o;10943:::-;11085:3;11106:67;11170:2;11165:3;11106:67;:::i;:::-;11099:74;;11182:93;11271:3;11182:93;:::i;:::-;11300:2;11295:3;11291:12;11284:19;;10943:366;;;:::o;11315:::-;11457:3;11478:67;11542:2;11537:3;11478:67;:::i;:::-;11471:74;;11554:93;11643:3;11554:93;:::i;:::-;11672:2;11667:3;11663:12;11656:19;;11315:366;;;:::o;11687:::-;11829:3;11850:67;11914:2;11909:3;11850:67;:::i;:::-;11843:74;;11926:93;12015:3;11926:93;:::i;:::-;12044:2;12039:3;12035:12;12028:19;;11687:366;;;:::o;12059:::-;12201:3;12222:67;12286:2;12281:3;12222:67;:::i;:::-;12215:74;;12298:93;12387:3;12298:93;:::i;:::-;12416:2;12411:3;12407:12;12400:19;;12059:366;;;:::o;12431:::-;12573:3;12594:67;12658:2;12653:3;12594:67;:::i;:::-;12587:74;;12670:93;12759:3;12670:93;:::i;:::-;12788:2;12783:3;12779:12;12772:19;;12431:366;;;:::o;12803:::-;12945:3;12966:67;13030:2;13025:3;12966:67;:::i;:::-;12959:74;;13042:93;13131:3;13042:93;:::i;:::-;13160:2;13155:3;13151:12;13144:19;;12803:366;;;:::o;13175:400::-;13335:3;13356:84;13438:1;13433:3;13356:84;:::i;:::-;13349:91;;13449:93;13538:3;13449:93;:::i;:::-;13567:1;13562:3;13558:11;13551:18;;13175:400;;;:::o;13581:366::-;13723:3;13744:67;13808:2;13803:3;13744:67;:::i;:::-;13737:74;;13820:93;13909:3;13820:93;:::i;:::-;13938:2;13933:3;13929:12;13922:19;;13581:366;;;:::o;13953:::-;14095:3;14116:67;14180:2;14175:3;14116:67;:::i;:::-;14109:74;;14192:93;14281:3;14192:93;:::i;:::-;14310:2;14305:3;14301:12;14294:19;;13953:366;;;:::o;14325:::-;14467:3;14488:67;14552:2;14547:3;14488:67;:::i;:::-;14481:74;;14564:93;14653:3;14564:93;:::i;:::-;14682:2;14677:3;14673:12;14666:19;;14325:366;;;:::o;14697:::-;14839:3;14860:67;14924:2;14919:3;14860:67;:::i;:::-;14853:74;;14936:93;15025:3;14936:93;:::i;:::-;15054:2;15049:3;15045:12;15038:19;;14697:366;;;:::o;15069:::-;15211:3;15232:67;15296:2;15291:3;15232:67;:::i;:::-;15225:74;;15308:93;15397:3;15308:93;:::i;:::-;15426:2;15421:3;15417:12;15410:19;;15069:366;;;:::o;15441:::-;15583:3;15604:67;15668:2;15663:3;15604:67;:::i;:::-;15597:74;;15680:93;15769:3;15680:93;:::i;:::-;15798:2;15793:3;15789:12;15782:19;;15441:366;;;:::o;15813:::-;15955:3;15976:67;16040:2;16035:3;15976:67;:::i;:::-;15969:74;;16052:93;16141:3;16052:93;:::i;:::-;16170:2;16165:3;16161:12;16154:19;;15813:366;;;:::o;16185:::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:::-;16699:3;16720:67;16784:2;16779:3;16720:67;:::i;:::-;16713:74;;16796:93;16885:3;16796:93;:::i;:::-;16914:2;16909:3;16905:12;16898:19;;16557:366;;;:::o;16929:::-;17071:3;17092:67;17156:2;17151:3;17092:67;:::i;:::-;17085:74;;17168:93;17257:3;17168:93;:::i;:::-;17286:2;17281:3;17277:12;17270:19;;16929:366;;;:::o;17673:::-;17815:3;17836:67;17900:2;17895:3;17836:67;:::i;:::-;17829:74;;17912:93;18001:3;17912:93;:::i;:::-;18030:2;18025:3;18021:12;18014:19;;17673:366;;;:::o;18045:118::-;18132:24;18150:5;18132:24;:::i;:::-;18127:3;18120:37;18045:118;;:::o;18169:701::-;18450:3;18472:95;18563:3;18554:6;18472:95;:::i;:::-;18465:102;;18584:95;18675:3;18666:6;18584:95;:::i;:::-;18577:102;;18696:148;18840:3;18696:148;:::i;:::-;18689:155;;18861:3;18854:10;;18169:701;;;;;:::o;18876:222::-;18969:4;19007:2;18996:9;18992:18;18984:26;;19020:71;19088:1;19077:9;19073:17;19064:6;19020:71;:::i;:::-;18876:222;;;;:::o;19104:640::-;19299:4;19337:3;19326:9;19322:19;19314:27;;19351:71;19419:1;19408:9;19404:17;19395:6;19351:71;:::i;:::-;19432:72;19500:2;19489:9;19485:18;19476:6;19432:72;:::i;:::-;19514;19582:2;19571:9;19567:18;19558:6;19514:72;:::i;:::-;19633:9;19627:4;19623:20;19618:2;19607:9;19603:18;19596:48;19661:76;19732:4;19723:6;19661:76;:::i;:::-;19653:84;;19104:640;;;;;;;:::o;19750:210::-;19837:4;19875:2;19864:9;19860:18;19852:26;;19888:65;19950:1;19939:9;19935:17;19926:6;19888:65;:::i;:::-;19750:210;;;;:::o;19966:313::-;20079:4;20117:2;20106:9;20102:18;20094:26;;20166:9;20160:4;20156:20;20152:1;20141:9;20137:17;20130:47;20194:78;20267:4;20258:6;20194:78;:::i;:::-;20186:86;;19966:313;;;;:::o;20285:419::-;20451:4;20489:2;20478:9;20474:18;20466:26;;20538:9;20532:4;20528:20;20524:1;20513:9;20509:17;20502:47;20566:131;20692:4;20566:131;:::i;:::-;20558:139;;20285:419;;;:::o;20710:::-;20876:4;20914:2;20903:9;20899:18;20891:26;;20963:9;20957:4;20953:20;20949:1;20938:9;20934:17;20927:47;20991:131;21117:4;20991:131;:::i;:::-;20983:139;;20710:419;;;:::o;21135:::-;21301:4;21339:2;21328:9;21324:18;21316:26;;21388:9;21382:4;21378:20;21374:1;21363:9;21359:17;21352:47;21416:131;21542:4;21416:131;:::i;:::-;21408:139;;21135:419;;;:::o;21560:::-;21726:4;21764:2;21753:9;21749:18;21741:26;;21813:9;21807:4;21803:20;21799:1;21788:9;21784:17;21777:47;21841:131;21967:4;21841:131;:::i;:::-;21833:139;;21560:419;;;:::o;21985:::-;22151:4;22189:2;22178:9;22174:18;22166:26;;22238:9;22232:4;22228:20;22224:1;22213:9;22209:17;22202:47;22266:131;22392:4;22266:131;:::i;:::-;22258:139;;21985:419;;;:::o;22410:::-;22576:4;22614:2;22603:9;22599:18;22591:26;;22663:9;22657:4;22653:20;22649:1;22638:9;22634:17;22627:47;22691:131;22817:4;22691:131;:::i;:::-;22683:139;;22410:419;;;:::o;22835:::-;23001:4;23039:2;23028:9;23024:18;23016:26;;23088:9;23082:4;23078:20;23074:1;23063:9;23059:17;23052:47;23116:131;23242:4;23116:131;:::i;:::-;23108:139;;22835:419;;;:::o;23260:::-;23426:4;23464:2;23453:9;23449:18;23441:26;;23513:9;23507:4;23503:20;23499:1;23488:9;23484:17;23477:47;23541:131;23667:4;23541:131;:::i;:::-;23533:139;;23260:419;;;:::o;23685:::-;23851:4;23889:2;23878:9;23874:18;23866:26;;23938:9;23932:4;23928:20;23924:1;23913:9;23909:17;23902:47;23966:131;24092:4;23966:131;:::i;:::-;23958:139;;23685:419;;;:::o;24110:::-;24276:4;24314:2;24303:9;24299:18;24291:26;;24363:9;24357:4;24353:20;24349:1;24338:9;24334:17;24327:47;24391:131;24517:4;24391:131;:::i;:::-;24383:139;;24110:419;;;:::o;24535:::-;24701:4;24739:2;24728:9;24724:18;24716:26;;24788:9;24782:4;24778:20;24774:1;24763:9;24759:17;24752:47;24816:131;24942:4;24816:131;:::i;:::-;24808:139;;24535:419;;;:::o;24960:::-;25126:4;25164:2;25153:9;25149:18;25141:26;;25213:9;25207:4;25203:20;25199:1;25188:9;25184:17;25177:47;25241:131;25367:4;25241:131;:::i;:::-;25233:139;;24960:419;;;:::o;25385:::-;25551:4;25589:2;25578:9;25574:18;25566:26;;25638:9;25632:4;25628:20;25624:1;25613:9;25609:17;25602:47;25666:131;25792:4;25666:131;:::i;:::-;25658:139;;25385:419;;;:::o;25810:::-;25976:4;26014:2;26003:9;25999:18;25991:26;;26063:9;26057:4;26053:20;26049:1;26038:9;26034:17;26027:47;26091:131;26217:4;26091:131;:::i;:::-;26083:139;;25810:419;;;:::o;26235:::-;26401:4;26439:2;26428:9;26424:18;26416:26;;26488:9;26482:4;26478:20;26474:1;26463:9;26459:17;26452:47;26516:131;26642:4;26516:131;:::i;:::-;26508:139;;26235:419;;;:::o;26660:::-;26826:4;26864:2;26853:9;26849:18;26841:26;;26913:9;26907:4;26903:20;26899:1;26888:9;26884:17;26877:47;26941:131;27067:4;26941:131;:::i;:::-;26933:139;;26660:419;;;:::o;27085:::-;27251:4;27289:2;27278:9;27274:18;27266:26;;27338:9;27332:4;27328:20;27324:1;27313:9;27309:17;27302:47;27366:131;27492:4;27366:131;:::i;:::-;27358:139;;27085:419;;;:::o;27510:::-;27676:4;27714:2;27703:9;27699:18;27691:26;;27763:9;27757:4;27753:20;27749:1;27738:9;27734:17;27727:47;27791:131;27917:4;27791:131;:::i;:::-;27783:139;;27510:419;;;:::o;28360:::-;28526:4;28564:2;28553:9;28549:18;28541:26;;28613:9;28607:4;28603:20;28599:1;28588:9;28584:17;28577:47;28641:131;28767:4;28641:131;:::i;:::-;28633:139;;28360:419;;;:::o;28785:222::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28929:71;28997:1;28986:9;28982:17;28973:6;28929:71;:::i;:::-;28785:222;;;;:::o;29013:129::-;29047:6;29074:20;;:::i;:::-;29064:30;;29103:33;29131:4;29123:6;29103:33;:::i;:::-;29013:129;;;:::o;29148:75::-;29181:6;29214:2;29208:9;29198:19;;29148:75;:::o;29229:311::-;29306:4;29396:18;29388:6;29385:30;29382:56;;;29418:18;;:::i;:::-;29382:56;29468:4;29460:6;29456:17;29448:25;;29528:4;29522;29518:15;29510:23;;29229:311;;;:::o;29546:307::-;29607:4;29697:18;29689:6;29686:30;29683:56;;;29719:18;;:::i;:::-;29683:56;29757:29;29779:6;29757:29;:::i;:::-;29749:37;;29841:4;29835;29831:15;29823:23;;29546:307;;;:::o;29859:308::-;29921:4;30011:18;30003:6;30000:30;29997:56;;;30033:18;;:::i;:::-;29997:56;30071:29;30093:6;30071:29;:::i;:::-;30063:37;;30155:4;30149;30145:15;30137:23;;29859:308;;;:::o;30173:98::-;30224:6;30258:5;30252:12;30242:22;;30173:98;;;:::o;30277:99::-;30329:6;30363:5;30357:12;30347:22;;30277:99;;;:::o;30382:168::-;30465:11;30499:6;30494:3;30487:19;30539:4;30534:3;30530:14;30515:29;;30382:168;;;;:::o;30556:169::-;30640:11;30674:6;30669:3;30662:19;30714:4;30709:3;30705:14;30690:29;;30556:169;;;;:::o;30731:148::-;30833:11;30870:3;30855:18;;30731:148;;;;:::o;30885:273::-;30925:3;30944:20;30962:1;30944:20;:::i;:::-;30939:25;;30978:20;30996:1;30978:20;:::i;:::-;30973:25;;31100:1;31064:34;31060:42;31057:1;31054:49;31051:75;;;31106:18;;:::i;:::-;31051:75;31150:1;31147;31143:9;31136:16;;30885:273;;;;:::o;31164:305::-;31204:3;31223:20;31241:1;31223:20;:::i;:::-;31218:25;;31257:20;31275:1;31257:20;:::i;:::-;31252:25;;31411:1;31343:66;31339:74;31336:1;31333:81;31330:107;;;31417:18;;:::i;:::-;31330:107;31461:1;31458;31454:9;31447:16;;31164:305;;;;:::o;31475:185::-;31515:1;31532:20;31550:1;31532:20;:::i;:::-;31527:25;;31566:20;31584:1;31566:20;:::i;:::-;31561:25;;31605:1;31595:35;;31610:18;;:::i;:::-;31595:35;31652:1;31649;31645:9;31640:14;;31475:185;;;;:::o;31666:348::-;31706:7;31729:20;31747:1;31729:20;:::i;:::-;31724:25;;31763:20;31781:1;31763:20;:::i;:::-;31758:25;;31951:1;31883:66;31879:74;31876:1;31873:81;31868:1;31861:9;31854:17;31850:105;31847:131;;;31958:18;;:::i;:::-;31847:131;32006:1;32003;31999:9;31988:20;;31666:348;;;;:::o;32020:191::-;32060:4;32080:20;32098:1;32080:20;:::i;:::-;32075:25;;32114:20;32132:1;32114:20;:::i;:::-;32109:25;;32153:1;32150;32147:8;32144:34;;;32158:18;;:::i;:::-;32144:34;32203:1;32200;32196:9;32188:17;;32020:191;;;;:::o;32217:96::-;32254:7;32283:24;32301:5;32283:24;:::i;:::-;32272:35;;32217:96;;;:::o;32319:90::-;32353:7;32396:5;32389:13;32382:21;32371:32;;32319:90;;;:::o;32415:149::-;32451:7;32491:66;32484:5;32480:78;32469:89;;32415:149;;;:::o;32570:118::-;32607:7;32647:34;32640:5;32636:46;32625:57;;32570:118;;;:::o;32694:126::-;32731:7;32771:42;32764:5;32760:54;32749:65;;32694:126;;;:::o;32826:77::-;32863:7;32892:5;32881:16;;32826:77;;;:::o;32909:154::-;32993:6;32988:3;32983;32970:30;33055:1;33046:6;33041:3;33037:16;33030:27;32909:154;;;:::o;33069:307::-;33137:1;33147:113;33161:6;33158:1;33155:13;33147:113;;;33246:1;33241:3;33237:11;33231:18;33227:1;33222:3;33218:11;33211:39;33183:2;33180:1;33176:10;33171:15;;33147:113;;;33278:6;33275:1;33272:13;33269:101;;;33358:1;33349:6;33344:3;33340:16;33333:27;33269:101;33118:258;33069:307;;;:::o;33382:171::-;33421:3;33444:24;33462:5;33444:24;:::i;:::-;33435:33;;33490:4;33483:5;33480:15;33477:41;;;33498:18;;:::i;:::-;33477:41;33545:1;33538:5;33534:13;33527:20;;33382:171;;;:::o;33559:320::-;33603:6;33640:1;33634:4;33630:12;33620:22;;33687:1;33681:4;33677:12;33708:18;33698:81;;33764:4;33756:6;33752:17;33742:27;;33698:81;33826:2;33818:6;33815:14;33795:18;33792:38;33789:84;;;33845:18;;:::i;:::-;33789:84;33610:269;33559:320;;;:::o;33885:281::-;33968:27;33990:4;33968:27;:::i;:::-;33960:6;33956:40;34098:6;34086:10;34083:22;34062:18;34050:10;34047:34;34044:62;34041:88;;;34109:18;;:::i;:::-;34041:88;34149:10;34145:2;34138:22;33928:238;33885:281;;:::o;34172:233::-;34211:3;34234:24;34252:5;34234:24;:::i;:::-;34225:33;;34280:66;34273:5;34270:77;34267:103;;;34350:18;;:::i;:::-;34267:103;34397:1;34390:5;34386:13;34379:20;;34172:233;;;:::o;34411:176::-;34443:1;34460:20;34478:1;34460:20;:::i;:::-;34455:25;;34494:20;34512:1;34494:20;:::i;:::-;34489:25;;34533:1;34523:35;;34538:18;;:::i;:::-;34523:35;34579:1;34576;34572:9;34567:14;;34411:176;;;;:::o;34593:180::-;34641:77;34638:1;34631:88;34738:4;34735:1;34728:15;34762:4;34759:1;34752:15;34779:180;34827:77;34824:1;34817:88;34924:4;34921:1;34914:15;34948:4;34945:1;34938:15;34965:180;35013:77;35010:1;35003:88;35110:4;35107:1;35100:15;35134:4;35131:1;35124:15;35151:180;35199:77;35196:1;35189:88;35296:4;35293:1;35286:15;35320:4;35317:1;35310:15;35337:180;35385:77;35382:1;35375:88;35482:4;35479:1;35472:15;35506:4;35503:1;35496:15;35523:117;35632:1;35629;35622:12;35646:117;35755:1;35752;35745:12;35769:117;35878:1;35875;35868:12;35892:117;36001:1;35998;35991:12;36015:117;36124:1;36121;36114:12;36138:102;36179:6;36230:2;36226:7;36221:2;36214:5;36210:14;36206:28;36196:38;;36138:102;;;:::o;36246:221::-;36386:34;36382:1;36374:6;36370:14;36363:58;36455:4;36450:2;36442:6;36438:15;36431:29;36246:221;:::o;36473:225::-;36613:34;36609:1;36601:6;36597:14;36590:58;36682:8;36677:2;36669:6;36665:15;36658:33;36473:225;:::o;36704:229::-;36844:34;36840:1;36832:6;36828:14;36821:58;36913:12;36908:2;36900:6;36896:15;36889:37;36704:229;:::o;36939:222::-;37079:34;37075:1;37067:6;37063:14;37056:58;37148:5;37143:2;37135:6;37131:15;37124:30;36939:222;:::o;37167:224::-;37307:34;37303:1;37295:6;37291:14;37284:58;37376:7;37371:2;37363:6;37359:15;37352:32;37167:224;:::o;37397:244::-;37537:34;37533:1;37525:6;37521:14;37514:58;37606:27;37601:2;37593:6;37589:15;37582:52;37397:244;:::o;37647:230::-;37787:34;37783:1;37775:6;37771:14;37764:58;37856:13;37851:2;37843:6;37839:15;37832:38;37647:230;:::o;37883:225::-;38023:34;38019:1;38011:6;38007:14;38000:58;38092:8;38087:2;38079:6;38075:15;38068:33;37883:225;:::o;38114:155::-;38254:7;38250:1;38242:6;38238:14;38231:31;38114:155;:::o;38275:182::-;38415:34;38411:1;38403:6;38399:14;38392:58;38275:182;:::o;38463:234::-;38603:34;38599:1;38591:6;38587:14;38580:58;38672:17;38667:2;38659:6;38655:15;38648:42;38463:234;:::o;38703:176::-;38843:28;38839:1;38831:6;38827:14;38820:52;38703:176;:::o;38885:237::-;39025:34;39021:1;39013:6;39009:14;39002:58;39094:20;39089:2;39081:6;39077:15;39070:45;38885:237;:::o;39128:221::-;39268:34;39264:1;39256:6;39252:14;39245:58;39337:4;39332:2;39324:6;39320:15;39313:29;39128:221;:::o;39355:238::-;39495:34;39491:1;39483:6;39479:14;39472:58;39564:21;39559:2;39551:6;39547:15;39540:46;39355:238;:::o;39599:179::-;39739:31;39735:1;39727:6;39723:14;39716:55;39599:179;:::o;39784:220::-;39924:34;39920:1;39912:6;39908:14;39901:58;39993:3;39988:2;39980:6;39976:15;39969:28;39784:220;:::o;40010:227::-;40150:34;40146:1;40138:6;40134:14;40127:58;40219:10;40214:2;40206:6;40202:15;40195:35;40010:227;:::o;40243:233::-;40383:34;40379:1;40371:6;40367:14;40360:58;40452:16;40447:2;40439:6;40435:15;40428:41;40243:233;:::o;40722:232::-;40862:34;40858:1;40850:6;40846:14;40839:58;40931:15;40926:2;40918:6;40914:15;40907:40;40722:232;:::o;40960:122::-;41033:24;41051:5;41033:24;:::i;:::-;41026:5;41023:35;41013:63;;41072:1;41069;41062:12;41013:63;40960:122;:::o;41088:116::-;41158:21;41173:5;41158:21;:::i;:::-;41151:5;41148:32;41138:60;;41194:1;41191;41184:12;41138:60;41088:116;:::o;41210:120::-;41282:23;41299:5;41282:23;:::i;:::-;41275:5;41272:34;41262:62;;41320:1;41317;41310:12;41262:62;41210:120;:::o;41336:122::-;41409:24;41427:5;41409:24;:::i;:::-;41402:5;41399:35;41389:63;;41448:1;41445;41438:12;41389:63;41336:122;:::o

Swarm Source

ipfs://b84925f0bd4fe92634234c7f8725e80e54303b9553b3e19e87d6ac7115f722ce
Loading...
Loading
Loading...
Loading
[ 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.