ETH Price: $2,350.24 (+0.31%)

Token

BarrySilbert (BARRY)
 

Overview

Max Total Supply

100 BARRY

Holders

68

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
ponzienjoyer.eth
Balance
1 BARRY
0x5845977262121d881a5ea36bcfe22fc0e996abdd
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:
BarrySilbert

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-08
*/

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// SPDX-License-Identifier: MIT
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/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/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/token/ERC721/extensions/IERC721Metadata.sol



pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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

// File: @openzeppelin/contracts/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;
        // solhint-disable-next-line no-inline-assembly
        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");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (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");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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

                // solhint-disable-next-line no-inline-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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

}

// 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/ERC721.sol



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: 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 virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

// 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/ERC721Enumerable.sol



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/BarrySilbert.sol
pragma solidity ^0.8.0;

contract BarrySilbert is ERC721Enumerable, Ownable {
    uint256 public constant MAX_SUPPLY = 100;

    constructor() ERC721("BarrySilbert", "BARRY") {
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return "ipfs://QmcfhJLNrrdwaqBpaAQqL6a8hc2EuRcaVbqz68yYnVtAxQ";
    }

   function mint() public {
        require(totalSupply() < MAX_SUPPLY, "no.");

        if (totalSupply() < MAX_SUPPLY) {
            uint256 mintIndex = totalSupply();
            _safeMint(msg.sender, mintIndex);
            return;
        }
   }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"MAX_SUPPLY","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":[],"name":"mint","outputs":[],"stateMutability":"nonpayable","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":"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":"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"}]

60806040523480156200001157600080fd5b506040518060400160405280600c81526020017f426172727953696c6265727400000000000000000000000000000000000000008152506040518060400160405280600581526020017f424152525900000000000000000000000000000000000000000000000000000081525081600090805190602001906200009692919062000171565b508060019080519060200190620000af92919062000171565b5050506000620000c46200016960201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35062000286565b600033905090565b8280546200017f9062000221565b90600052602060002090601f016020900481019282620001a35760008555620001ef565b82601f10620001be57805160ff1916838001178555620001ef565b82800160010185558215620001ef579182015b82811115620001ee578251825591602001919060010190620001d1565b5b509050620001fe919062000202565b5090565b5b808211156200021d57600081600090555060010162000203565b5090565b600060028204905060018216806200023a57607f821691505b6020821081141562000251576200025062000257565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61307480620002966000396000f3fe608060405234801561001057600080fd5b50600436106101375760003560e01c80634f6ccce7116100b857806395d89b411161007c57806395d89b411461033c578063a22cb4651461035a578063b88d4fde14610376578063c87b56dd14610392578063e985e9c5146103c2578063f2fde38b146103f257610137565b80634f6ccce7146102845780636352211e146102b457806370a08231146102e4578063715018a6146103145780638da5cb5b1461031e57610137565b806318160ddd116100ff57806318160ddd146101e057806323b872dd146101fe5780632f745c591461021a57806332cb6b0c1461024a57806342842e0e1461026857610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780631249c58b146101d6575b600080fd5b610156600480360381019061015191906121f7565b61040e565b6040516101639190612a4c565b60405180910390f35b610174610488565b6040516101819190612a67565b60405180910390f35b6101a4600480360381019061019f9190612249565b61051a565b6040516101b191906129e5565b60405180910390f35b6101d460048036038101906101cf91906121bb565b61059f565b005b6101de6106b7565b005b6101e8610730565b6040516101f59190612ce9565b60405180910390f35b610218600480360381019061021391906120b5565b61073d565b005b610234600480360381019061022f91906121bb565b61079d565b6040516102419190612ce9565b60405180910390f35b610252610842565b60405161025f9190612ce9565b60405180910390f35b610282600480360381019061027d91906120b5565b610847565b005b61029e60048036038101906102999190612249565b610867565b6040516102ab9190612ce9565b60405180910390f35b6102ce60048036038101906102c99190612249565b6108fe565b6040516102db91906129e5565b60405180910390f35b6102fe60048036038101906102f99190612050565b6109b0565b60405161030b9190612ce9565b60405180910390f35b61031c610a68565b005b610326610ba5565b60405161033391906129e5565b60405180910390f35b610344610bcf565b6040516103519190612a67565b60405180910390f35b610374600480360381019061036f919061217f565b610c61565b005b610390600480360381019061038b9190612104565b610de2565b005b6103ac60048036038101906103a79190612249565b610e44565b6040516103b99190612a67565b60405180910390f35b6103dc60048036038101906103d79190612079565b610eae565b6040516103e99190612a4c565b60405180910390f35b61040c60048036038101906104079190612050565b610f42565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104815750610480826110ee565b5b9050919050565b60606000805461049790612edd565b80601f01602080910402602001604051908101604052809291908181526020018280546104c390612edd565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610525826111d0565b610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b90612c09565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105aa826108fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290612c89565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661063a61123c565b73ffffffffffffffffffffffffffffffffffffffff16148061066957506106688161066361123c565b610eae565b5b6106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90612b69565b60405180910390fd5b6106b28383611244565b505050565b60646106c1610730565b10610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612bc9565b60405180910390fd5b606461070b610730565b101561072d57600061071b610730565b905061072733826112fd565b5061072e565b5b565b6000600880549050905090565b61074e61074861123c565b8261131b565b61078d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078490612ca9565b60405180910390fd5b6107988383836113f9565b505050565b60006107a8836109b0565b82106107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612a89565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606481565b61086283838360405180602001604052806000815250610de2565b505050565b6000610871610730565b82106108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a990612cc9565b60405180910390fd5b600882815481106108ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612ba9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890612b89565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7061123c565b73ffffffffffffffffffffffffffffffffffffffff16610a8e610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90612c29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bde90612edd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0a90612edd565b8015610c575780601f10610c2c57610100808354040283529160200191610c57565b820191906000526020600020905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b610c6961123c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90612b29565b60405180910390fd5b8060056000610ce461123c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d9161123c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610dd69190612a4c565b60405180910390a35050565b610df3610ded61123c565b8361131b565b610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612ca9565b60405180910390fd5b610e3e84848484611655565b50505050565b6060610e4f826111d0565b610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590612c69565b60405180910390fd5b60405180606001604052806035815260200161300a603591399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f4a61123c565b73ffffffffffffffffffffffffffffffffffffffff16610f68610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590612c29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612ac9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806111b957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806111c957506111c8826116b1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112b7836108fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61131782826040518060200160405280600081525061171b565b5050565b6000611326826111d0565b611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90612b49565b60405180910390fd5b6000611370836108fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113df57508373ffffffffffffffffffffffffffffffffffffffff166113c78461051a565b73ffffffffffffffffffffffffffffffffffffffff16145b806113f057506113ef8185610eae565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611419826108fe565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612c49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690612b09565b60405180910390fd5b6114ea838383611776565b6114f5600082611244565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115459190612df3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159c9190612d9d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6116608484846113f9565b61166c8484848461188a565b6116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290612aa9565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6117258383611a21565b611732600084848461188a565b611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890612aa9565b60405180910390fd5b505050565b611781838383611bef565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117c4576117bf81611bf4565b611803565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611802576118018382611c3d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118465761184181611daa565b611885565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611884576118838282611eed565b5b5b505050565b60006118ab8473ffffffffffffffffffffffffffffffffffffffff16611f6c565b15611a14578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026118d461123c565b8786866040518563ffffffff1660e01b81526004016118f69493929190612a00565b602060405180830381600087803b15801561191057600080fd5b505af192505050801561194157506040513d601f19601f8201168201806040525081019061193e9190612220565b60015b6119c4573d8060008114611971576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b606091505b506000815114156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390612aa9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a19565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612be9565b60405180910390fd5b611a9a816111d0565b15611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190612ae9565b60405180910390fd5b611ae660008383611776565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b369190612d9d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611c4a846109b0565b611c549190612df3565b9050600060076000848152602001908152602001600020549050818114611d39576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611dbe9190612df3565b9050600060096000848152602001908152602001600020549050600060088381548110611e14577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110611e5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611ef8836109b0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000611f92611f8d84612d35565b612d04565b905082815260208101848484011115611faa57600080fd5b611fb5848285612e9b565b509392505050565b600081359050611fcc81612fad565b92915050565b600081359050611fe181612fc4565b92915050565b600081359050611ff681612fdb565b92915050565b60008151905061200b81612fdb565b92915050565b600082601f83011261202257600080fd5b8135612032848260208601611f7f565b91505092915050565b60008135905061204a81612ff2565b92915050565b60006020828403121561206257600080fd5b600061207084828501611fbd565b91505092915050565b6000806040838503121561208c57600080fd5b600061209a85828601611fbd565b92505060206120ab85828601611fbd565b9150509250929050565b6000806000606084860312156120ca57600080fd5b60006120d886828701611fbd565b93505060206120e986828701611fbd565b92505060406120fa8682870161203b565b9150509250925092565b6000806000806080858703121561211a57600080fd5b600061212887828801611fbd565b945050602061213987828801611fbd565b935050604061214a8782880161203b565b925050606085013567ffffffffffffffff81111561216757600080fd5b61217387828801612011565b91505092959194509250565b6000806040838503121561219257600080fd5b60006121a085828601611fbd565b92505060206121b185828601611fd2565b9150509250929050565b600080604083850312156121ce57600080fd5b60006121dc85828601611fbd565b92505060206121ed8582860161203b565b9150509250929050565b60006020828403121561220957600080fd5b600061221784828501611fe7565b91505092915050565b60006020828403121561223257600080fd5b600061224084828501611ffc565b91505092915050565b60006020828403121561225b57600080fd5b60006122698482850161203b565b91505092915050565b61227b81612e27565b82525050565b61228a81612e39565b82525050565b600061229b82612d65565b6122a58185612d7b565b93506122b5818560208601612eaa565b6122be81612f9c565b840191505092915050565b60006122d482612d70565b6122de8185612d8c565b93506122ee818560208601612eaa565b6122f781612f9c565b840191505092915050565b600061230f602b83612d8c565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612375603283612d8c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006123db602683612d8c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612441601c83612d8c565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612481602483612d8c565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124e7601983612d8c565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612527602c83612d8c565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061258d603883612d8c565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006125f3602a83612d8c565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612659602983612d8c565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006126bf600383612d8c565b91507f6e6f2e00000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006126ff602083612d8c565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061273f602c83612d8c565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006127a5602083612d8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006127e5602983612d8c565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061284b602f83612d8c565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006128b1602183612d8c565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612917603183612d8c565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061297d602c83612d8c565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6129df81612e91565b82525050565b60006020820190506129fa6000830184612272565b92915050565b6000608082019050612a156000830187612272565b612a226020830186612272565b612a2f60408301856129d6565b8181036060830152612a418184612290565b905095945050505050565b6000602082019050612a616000830184612281565b92915050565b60006020820190508181036000830152612a8181846122c9565b905092915050565b60006020820190508181036000830152612aa281612302565b9050919050565b60006020820190508181036000830152612ac281612368565b9050919050565b60006020820190508181036000830152612ae2816123ce565b9050919050565b60006020820190508181036000830152612b0281612434565b9050919050565b60006020820190508181036000830152612b2281612474565b9050919050565b60006020820190508181036000830152612b42816124da565b9050919050565b60006020820190508181036000830152612b628161251a565b9050919050565b60006020820190508181036000830152612b8281612580565b9050919050565b60006020820190508181036000830152612ba2816125e6565b9050919050565b60006020820190508181036000830152612bc28161264c565b9050919050565b60006020820190508181036000830152612be2816126b2565b9050919050565b60006020820190508181036000830152612c02816126f2565b9050919050565b60006020820190508181036000830152612c2281612732565b9050919050565b60006020820190508181036000830152612c4281612798565b9050919050565b60006020820190508181036000830152612c62816127d8565b9050919050565b60006020820190508181036000830152612c828161283e565b9050919050565b60006020820190508181036000830152612ca2816128a4565b9050919050565b60006020820190508181036000830152612cc28161290a565b9050919050565b60006020820190508181036000830152612ce281612970565b9050919050565b6000602082019050612cfe60008301846129d6565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612d2b57612d2a612f6d565b5b8060405250919050565b600067ffffffffffffffff821115612d5057612d4f612f6d565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612da882612e91565b9150612db383612e91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612de857612de7612f0f565b5b828201905092915050565b6000612dfe82612e91565b9150612e0983612e91565b925082821015612e1c57612e1b612f0f565b5b828203905092915050565b6000612e3282612e71565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612ec8578082015181840152602081019050612ead565b83811115612ed7576000848401525b50505050565b60006002820490506001821680612ef557607f821691505b60208210811415612f0957612f08612f3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612fb681612e27565b8114612fc157600080fd5b50565b612fcd81612e39565b8114612fd857600080fd5b50565b612fe481612e45565b8114612fef57600080fd5b50565b612ffb81612e91565b811461300657600080fd5b5056fe697066733a2f2f516d6366684a4c4e7272647761714270614151714c36613868633245755263615662717a363879596e5674417851a2646970667358221220080048831d364a77ee6032a4ec208a71f7e0207a865d00c1beb9a8f7dab326ef64736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101375760003560e01c80634f6ccce7116100b857806395d89b411161007c57806395d89b411461033c578063a22cb4651461035a578063b88d4fde14610376578063c87b56dd14610392578063e985e9c5146103c2578063f2fde38b146103f257610137565b80634f6ccce7146102845780636352211e146102b457806370a08231146102e4578063715018a6146103145780638da5cb5b1461031e57610137565b806318160ddd116100ff57806318160ddd146101e057806323b872dd146101fe5780632f745c591461021a57806332cb6b0c1461024a57806342842e0e1461026857610137565b806301ffc9a71461013c57806306fdde031461016c578063081812fc1461018a578063095ea7b3146101ba5780631249c58b146101d6575b600080fd5b610156600480360381019061015191906121f7565b61040e565b6040516101639190612a4c565b60405180910390f35b610174610488565b6040516101819190612a67565b60405180910390f35b6101a4600480360381019061019f9190612249565b61051a565b6040516101b191906129e5565b60405180910390f35b6101d460048036038101906101cf91906121bb565b61059f565b005b6101de6106b7565b005b6101e8610730565b6040516101f59190612ce9565b60405180910390f35b610218600480360381019061021391906120b5565b61073d565b005b610234600480360381019061022f91906121bb565b61079d565b6040516102419190612ce9565b60405180910390f35b610252610842565b60405161025f9190612ce9565b60405180910390f35b610282600480360381019061027d91906120b5565b610847565b005b61029e60048036038101906102999190612249565b610867565b6040516102ab9190612ce9565b60405180910390f35b6102ce60048036038101906102c99190612249565b6108fe565b6040516102db91906129e5565b60405180910390f35b6102fe60048036038101906102f99190612050565b6109b0565b60405161030b9190612ce9565b60405180910390f35b61031c610a68565b005b610326610ba5565b60405161033391906129e5565b60405180910390f35b610344610bcf565b6040516103519190612a67565b60405180910390f35b610374600480360381019061036f919061217f565b610c61565b005b610390600480360381019061038b9190612104565b610de2565b005b6103ac60048036038101906103a79190612249565b610e44565b6040516103b99190612a67565b60405180910390f35b6103dc60048036038101906103d79190612079565b610eae565b6040516103e99190612a4c565b60405180910390f35b61040c60048036038101906104079190612050565b610f42565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104815750610480826110ee565b5b9050919050565b60606000805461049790612edd565b80601f01602080910402602001604051908101604052809291908181526020018280546104c390612edd565b80156105105780601f106104e557610100808354040283529160200191610510565b820191906000526020600020905b8154815290600101906020018083116104f357829003601f168201915b5050505050905090565b6000610525826111d0565b610564576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055b90612c09565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006105aa826108fe565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061290612c89565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661063a61123c565b73ffffffffffffffffffffffffffffffffffffffff16148061066957506106688161066361123c565b610eae565b5b6106a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069f90612b69565b60405180910390fd5b6106b28383611244565b505050565b60646106c1610730565b10610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612bc9565b60405180910390fd5b606461070b610730565b101561072d57600061071b610730565b905061072733826112fd565b5061072e565b5b565b6000600880549050905090565b61074e61074861123c565b8261131b565b61078d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078490612ca9565b60405180910390fd5b6107988383836113f9565b505050565b60006107a8836109b0565b82106107e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e090612a89565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b606481565b61086283838360405180602001604052806000815250610de2565b505050565b6000610871610730565b82106108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a990612cc9565b60405180910390fd5b600882815481106108ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e90612ba9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1890612b89565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a7061123c565b73ffffffffffffffffffffffffffffffffffffffff16610a8e610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614610ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adb90612c29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610bde90612edd565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0a90612edd565b8015610c575780601f10610c2c57610100808354040283529160200191610c57565b820191906000526020600020905b815481529060010190602001808311610c3a57829003601f168201915b5050505050905090565b610c6961123c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cce90612b29565b60405180910390fd5b8060056000610ce461123c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610d9161123c565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610dd69190612a4c565b60405180910390a35050565b610df3610ded61123c565b8361131b565b610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990612ca9565b60405180910390fd5b610e3e84848484611655565b50505050565b6060610e4f826111d0565b610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590612c69565b60405180910390fd5b60405180606001604052806035815260200161300a603591399050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610f4a61123c565b73ffffffffffffffffffffffffffffffffffffffff16610f68610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614610fbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb590612c29565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561102e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102590612ac9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806111b957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806111c957506111c8826116b1565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166112b7836108fe565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61131782826040518060200160405280600081525061171b565b5050565b6000611326826111d0565b611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90612b49565b60405180910390fd5b6000611370836108fe565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806113df57508373ffffffffffffffffffffffffffffffffffffffff166113c78461051a565b73ffffffffffffffffffffffffffffffffffffffff16145b806113f057506113ef8185610eae565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611419826108fe565b73ffffffffffffffffffffffffffffffffffffffff161461146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690612c49565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d690612b09565b60405180910390fd5b6114ea838383611776565b6114f5600082611244565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115459190612df3565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461159c9190612d9d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6116608484846113f9565b61166c8484848461188a565b6116ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a290612aa9565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6117258383611a21565b611732600084848461188a565b611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890612aa9565b60405180910390fd5b505050565b611781838383611bef565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117c4576117bf81611bf4565b611803565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611802576118018382611c3d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118465761184181611daa565b611885565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611884576118838282611eed565b5b5b505050565b60006118ab8473ffffffffffffffffffffffffffffffffffffffff16611f6c565b15611a14578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026118d461123c565b8786866040518563ffffffff1660e01b81526004016118f69493929190612a00565b602060405180830381600087803b15801561191057600080fd5b505af192505050801561194157506040513d601f19601f8201168201806040525081019061193e9190612220565b60015b6119c4573d8060008114611971576040519150601f19603f3d011682016040523d82523d6000602084013e611976565b606091505b506000815114156119bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b390612aa9565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611a19565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8890612be9565b60405180910390fd5b611a9a816111d0565b15611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190612ae9565b60405180910390fd5b611ae660008383611776565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b369190612d9d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001611c4a846109b0565b611c549190612df3565b9050600060076000848152602001908152602001600020549050818114611d39576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050611dbe9190612df3565b9050600060096000848152602001908152602001600020549050600060088381548110611e14577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110611e5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480611ed1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000611ef8836109b0565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b6000611f92611f8d84612d35565b612d04565b905082815260208101848484011115611faa57600080fd5b611fb5848285612e9b565b509392505050565b600081359050611fcc81612fad565b92915050565b600081359050611fe181612fc4565b92915050565b600081359050611ff681612fdb565b92915050565b60008151905061200b81612fdb565b92915050565b600082601f83011261202257600080fd5b8135612032848260208601611f7f565b91505092915050565b60008135905061204a81612ff2565b92915050565b60006020828403121561206257600080fd5b600061207084828501611fbd565b91505092915050565b6000806040838503121561208c57600080fd5b600061209a85828601611fbd565b92505060206120ab85828601611fbd565b9150509250929050565b6000806000606084860312156120ca57600080fd5b60006120d886828701611fbd565b93505060206120e986828701611fbd565b92505060406120fa8682870161203b565b9150509250925092565b6000806000806080858703121561211a57600080fd5b600061212887828801611fbd565b945050602061213987828801611fbd565b935050604061214a8782880161203b565b925050606085013567ffffffffffffffff81111561216757600080fd5b61217387828801612011565b91505092959194509250565b6000806040838503121561219257600080fd5b60006121a085828601611fbd565b92505060206121b185828601611fd2565b9150509250929050565b600080604083850312156121ce57600080fd5b60006121dc85828601611fbd565b92505060206121ed8582860161203b565b9150509250929050565b60006020828403121561220957600080fd5b600061221784828501611fe7565b91505092915050565b60006020828403121561223257600080fd5b600061224084828501611ffc565b91505092915050565b60006020828403121561225b57600080fd5b60006122698482850161203b565b91505092915050565b61227b81612e27565b82525050565b61228a81612e39565b82525050565b600061229b82612d65565b6122a58185612d7b565b93506122b5818560208601612eaa565b6122be81612f9c565b840191505092915050565b60006122d482612d70565b6122de8185612d8c565b93506122ee818560208601612eaa565b6122f781612f9c565b840191505092915050565b600061230f602b83612d8c565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b6000612375603283612d8c565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b60006123db602683612d8c565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612441601c83612d8c565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b6000612481602483612d8c565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006124e7601983612d8c565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b6000612527602c83612d8c565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061258d603883612d8c565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b60006125f3602a83612d8c565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000612659602983612d8c565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b60006126bf600383612d8c565b91507f6e6f2e00000000000000000000000000000000000000000000000000000000006000830152602082019050919050565b60006126ff602083612d8c565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b600061273f602c83612d8c565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b60006127a5602083612d8c565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006127e5602983612d8c565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b600061284b602f83612d8c565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b60006128b1602183612d8c565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000612917603183612d8c565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b600061297d602c83612d8c565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6129df81612e91565b82525050565b60006020820190506129fa6000830184612272565b92915050565b6000608082019050612a156000830187612272565b612a226020830186612272565b612a2f60408301856129d6565b8181036060830152612a418184612290565b905095945050505050565b6000602082019050612a616000830184612281565b92915050565b60006020820190508181036000830152612a8181846122c9565b905092915050565b60006020820190508181036000830152612aa281612302565b9050919050565b60006020820190508181036000830152612ac281612368565b9050919050565b60006020820190508181036000830152612ae2816123ce565b9050919050565b60006020820190508181036000830152612b0281612434565b9050919050565b60006020820190508181036000830152612b2281612474565b9050919050565b60006020820190508181036000830152612b42816124da565b9050919050565b60006020820190508181036000830152612b628161251a565b9050919050565b60006020820190508181036000830152612b8281612580565b9050919050565b60006020820190508181036000830152612ba2816125e6565b9050919050565b60006020820190508181036000830152612bc28161264c565b9050919050565b60006020820190508181036000830152612be2816126b2565b9050919050565b60006020820190508181036000830152612c02816126f2565b9050919050565b60006020820190508181036000830152612c2281612732565b9050919050565b60006020820190508181036000830152612c4281612798565b9050919050565b60006020820190508181036000830152612c62816127d8565b9050919050565b60006020820190508181036000830152612c828161283e565b9050919050565b60006020820190508181036000830152612ca2816128a4565b9050919050565b60006020820190508181036000830152612cc28161290a565b9050919050565b60006020820190508181036000830152612ce281612970565b9050919050565b6000602082019050612cfe60008301846129d6565b92915050565b6000604051905081810181811067ffffffffffffffff82111715612d2b57612d2a612f6d565b5b8060405250919050565b600067ffffffffffffffff821115612d5057612d4f612f6d565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000612da882612e91565b9150612db383612e91565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612de857612de7612f0f565b5b828201905092915050565b6000612dfe82612e91565b9150612e0983612e91565b925082821015612e1c57612e1b612f0f565b5b828203905092915050565b6000612e3282612e71565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612ec8578082015181840152602081019050612ead565b83811115612ed7576000848401525b50505050565b60006002820490506001821680612ef557607f821691505b60208210811415612f0957612f08612f3e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612fb681612e27565b8114612fc157600080fd5b50565b612fcd81612e39565b8114612fd857600080fd5b50565b612fe481612e45565b8114612fef57600080fd5b50565b612ffb81612e91565b811461300657600080fd5b5056fe697066733a2f2f516d6366684a4c4e7272647761714270614151714c36613868633245755263615662717a363879596e5674417851a2646970667358221220080048831d364a77ee6032a4ec208a71f7e0207a865d00c1beb9a8f7dab326ef64736f6c63430008000033

Deployed Bytecode Sourcemap

42798:690:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34308:237;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21513:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22973:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22510:397;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43230:255;;;:::i;:::-;;34961:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23863:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34629:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42856:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24239:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35151:233;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21207:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20937:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42180:148;;;:::i;:::-;;41529:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21682:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23266:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24461:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42967:256;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23632:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42483:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34308:237;34410:4;34449:35;34434:50;;;:11;:50;;;;:103;;;;34501:36;34525:11;34501:23;:36::i;:::-;34434:103;34427:110;;34308:237;;;:::o;21513:100::-;21567:13;21600:5;21593:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21513:100;:::o;22973:221::-;23049:7;23077:16;23085:7;23077;:16::i;:::-;23069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23162:15;:24;23178:7;23162:24;;;;;;;;;;;;;;;;;;;;;23155:31;;22973:221;;;:::o;22510:397::-;22591:13;22607:23;22622:7;22607:14;:23::i;:::-;22591:39;;22655:5;22649:11;;:2;:11;;;;22641:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22735:5;22719:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22744:37;22761:5;22768:12;:10;:12::i;:::-;22744:16;:37::i;:::-;22719:62;22711:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;22878:21;22887:2;22891:7;22878:8;:21::i;:::-;22510:397;;;:::o;43230:255::-;42893:3;43272:13;:11;:13::i;:::-;:26;43264:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42893:3;43323:13;:11;:13::i;:::-;:26;43319:160;;;43366:17;43386:13;:11;:13::i;:::-;43366:33;;43414:32;43424:10;43436:9;43414;:32::i;:::-;43461:7;;;43319:160;43230:255;:::o;34961:113::-;35022:7;35049:10;:17;;;;35042:24;;34961:113;:::o;23863:305::-;24024:41;24043:12;:10;:12::i;:::-;24057:7;24024:18;:41::i;:::-;24016:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24132:28;24142:4;24148:2;24152:7;24132:9;:28::i;:::-;23863:305;;;:::o;34629:256::-;34726:7;34762:23;34779:5;34762:16;:23::i;:::-;34754:5;:31;34746:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;34851:12;:19;34864:5;34851:19;;;;;;;;;;;;;;;:26;34871:5;34851:26;;;;;;;;;;;;34844:33;;34629:256;;;;:::o;42856:40::-;42893:3;42856:40;:::o;24239:151::-;24343:39;24360:4;24366:2;24370:7;24343:39;;;;;;;;;;;;:16;:39::i;:::-;24239:151;;;:::o;35151:233::-;35226:7;35262:30;:28;:30::i;:::-;35254:5;:38;35246:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35359:10;35370:5;35359:17;;;;;;;;;;;;;;;;;;;;;;;;35352:24;;35151:233;;;:::o;21207:239::-;21279:7;21299:13;21315:7;:16;21323:7;21315:16;;;;;;;;;;;;;;;;;;;;;21299:32;;21367:1;21350:19;;:5;:19;;;;21342:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21433:5;21426:12;;;21207:239;;;:::o;20937:208::-;21009:7;21054:1;21037:19;;:5;:19;;;;21029:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21121:9;:16;21131:5;21121:16;;;;;;;;;;;;;;;;21114:23;;20937:208;;;:::o;42180:148::-;41760:12;:10;:12::i;:::-;41749:23;;:7;:5;:7::i;:::-;:23;;;41741:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42287:1:::1;42250:40;;42271:6;;;;;;;;;;;42250:40;;;;;;;;;;;;42318:1;42301:6;;:19;;;;;;;;;;;;;;;;;;42180:148::o:0;41529:87::-;41575:7;41602:6;;;;;;;;;;;41595:13;;41529:87;:::o;21682:104::-;21738:13;21771:7;21764:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21682:104;:::o;23266:295::-;23381:12;:10;:12::i;:::-;23369:24;;:8;:24;;;;23361:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23481:8;23436:18;:32;23455:12;:10;:12::i;:::-;23436:32;;;;;;;;;;;;;;;:42;23469:8;23436:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23534:8;23505:48;;23520:12;:10;:12::i;:::-;23505:48;;;23544:8;23505:48;;;;;;:::i;:::-;;;;;;;;23266:295;;:::o;24461:285::-;24593:41;24612:12;:10;:12::i;:::-;24626:7;24593:18;:41::i;:::-;24585:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24699:39;24713:4;24719:2;24723:7;24732:5;24699:13;:39::i;:::-;24461:285;;;;:::o;42967:256::-;43040:13;43074:16;43082:7;43074;:16::i;:::-;43066:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;43153:62;;;;;;;;;;;;;;;;;;;42967:256;;;:::o;23632:164::-;23729:4;23753:18;:25;23772:5;23753:25;;;;;;;;;;;;;;;:35;23779:8;23753:35;;;;;;;;;;;;;;;;;;;;;;;;;23746:42;;23632:164;;;;:::o;42483:244::-;41760:12;:10;:12::i;:::-;41749:23;;:7;:5;:7::i;:::-;:23;;;41741:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42592:1:::1;42572:22;;:8;:22;;;;42564:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;42682:8;42653:38;;42674:6;;;;;;;;;;;42653:38;;;;;;;;;;;;42711:8;42702:6;;:17;;;;;;;;;;;;;;;;;;42483:244:::0;:::o;20581:292::-;20683:4;20722:25;20707:40;;;:11;:40;;;;:105;;;;20779:33;20764:48;;;:11;:48;;;;20707:105;:158;;;;20829:36;20853:11;20829:23;:36::i;:::-;20707:158;20700:165;;20581:292;;;:::o;26213:127::-;26278:4;26330:1;26302:30;;:7;:16;26310:7;26302:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26295:37;;26213:127;;;:::o;15869:98::-;15922:7;15949:10;15942:17;;15869:98;:::o;30090:174::-;30192:2;30165:15;:24;30181:7;30165:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30248:7;30244:2;30210:46;;30219:23;30234:7;30219:14;:23::i;:::-;30210:46;;;;;;;;;;;;30090:174;;:::o;27197:110::-;27273:26;27283:2;27287:7;27273:26;;;;;;;;;;;;:9;:26::i;:::-;27197:110;;:::o;26507:348::-;26600:4;26625:16;26633:7;26625;:16::i;:::-;26617:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26701:13;26717:23;26732:7;26717:14;:23::i;:::-;26701:39;;26770:5;26759:16;;:7;:16;;;:51;;;;26803:7;26779:31;;:20;26791:7;26779:11;:20::i;:::-;:31;;;26759:51;:87;;;;26814:32;26831:5;26838:7;26814:16;:32::i;:::-;26759:87;26751:96;;;26507:348;;;;:::o;29428:544::-;29553:4;29526:31;;:23;29541:7;29526:14;:23::i;:::-;:31;;;29518:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29636:1;29622:16;;:2;:16;;;;29614:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29692:39;29713:4;29719:2;29723:7;29692:20;:39::i;:::-;29796:29;29813:1;29817:7;29796:8;:29::i;:::-;29857:1;29838:9;:15;29848:4;29838:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29886:1;29869:9;:13;29879:2;29869:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29917:2;29898:7;:16;29906:7;29898:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29956:7;29952:2;29937:27;;29946:4;29937:27;;;;;;;;;;;;29428:544;;;:::o;25628:272::-;25742:28;25752:4;25758:2;25762:7;25742:9;:28::i;:::-;25789:48;25812:4;25818:2;25822:7;25831:5;25789:22;:48::i;:::-;25781:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25628:272;;;;:::o;19079:157::-;19164:4;19203:25;19188:40;;;:11;:40;;;;19181:47;;19079:157;;;:::o;27534:250::-;27630:18;27636:2;27640:7;27630:5;:18::i;:::-;27667:54;27698:1;27702:2;27706:7;27715:5;27667:22;:54::i;:::-;27659:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27534:250;;;:::o;35997:555::-;36107:45;36134:4;36140:2;36144:7;36107:26;:45::i;:::-;36185:1;36169:18;;:4;:18;;;36165:187;;;36204:40;36236:7;36204:31;:40::i;:::-;36165:187;;;36274:2;36266:10;;:4;:10;;;36262:90;;36293:47;36326:4;36332:7;36293:32;:47::i;:::-;36262:90;36165:187;36380:1;36366:16;;:2;:16;;;36362:183;;;36399:45;36436:7;36399:36;:45::i;:::-;36362:183;;;36472:4;36466:10;;:2;:10;;;36462:83;;36493:40;36521:2;36525:7;36493:27;:40::i;:::-;36462:83;36362:183;35997:555;;;:::o;30829:843::-;30950:4;30976:15;:2;:13;;;:15::i;:::-;30972:693;;;31028:2;31012:36;;;31049:12;:10;:12::i;:::-;31063:4;31069:7;31078:5;31012:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31008:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31275:1;31258:6;:13;:18;31254:341;;;31301:60;;;;;;;;;;:::i;:::-;;;;;;;;31254:341;31545:6;31539:13;31530:6;31526:2;31522:15;31515:38;31008:602;31145:45;;;31135:55;;;:6;:55;;;;31128:62;;;;;30972:693;31649:4;31642:11;;30829:843;;;;;;;:::o;28120:382::-;28214:1;28200:16;;:2;:16;;;;28192:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28273:16;28281:7;28273;:16::i;:::-;28272:17;28264:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28335:45;28364:1;28368:2;28372:7;28335:20;:45::i;:::-;28410:1;28393:9;:13;28403:2;28393:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28441:2;28422:7;:16;28430:7;28422:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28486:7;28482:2;28461:33;;28478:1;28461:33;;;;;;;;;;;;28120:382;;:::o;32285:93::-;;;;:::o;37275:164::-;37379:10;:17;;;;37352:15;:24;37368:7;37352:24;;;;;;;;;;;:44;;;;37407:10;37423:7;37407:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37275:164;:::o;38066:988::-;38332:22;38382:1;38357:22;38374:4;38357:16;:22::i;:::-;:26;;;;:::i;:::-;38332:51;;38394:18;38415:17;:26;38433:7;38415:26;;;;;;;;;;;;38394:47;;38562:14;38548:10;:28;38544:328;;38593:19;38615:12;:18;38628:4;38615:18;;;;;;;;;;;;;;;:34;38634:14;38615:34;;;;;;;;;;;;38593:56;;38699:11;38666:12;:18;38679:4;38666:18;;;;;;;;;;;;;;;:30;38685:10;38666:30;;;;;;;;;;;:44;;;;38816:10;38783:17;:30;38801:11;38783:30;;;;;;;;;;;:43;;;;38544:328;;38968:17;:26;38986:7;38968:26;;;;;;;;;;;38961:33;;;39012:12;:18;39025:4;39012:18;;;;;;;;;;;;;;;:34;39031:14;39012:34;;;;;;;;;;;39005:41;;;38066:988;;;;:::o;39349:1079::-;39602:22;39647:1;39627:10;:17;;;;:21;;;;:::i;:::-;39602:46;;39659:18;39680:15;:24;39696:7;39680:24;;;;;;;;;;;;39659:45;;40031:19;40053:10;40064:14;40053:26;;;;;;;;;;;;;;;;;;;;;;;;40031:48;;40117:11;40092:10;40103;40092:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40228:10;40197:15;:28;40213:11;40197:28;;;;;;;;;;;:41;;;;40369:15;:24;40385:7;40369:24;;;;;;;;;;;40362:31;;;40404:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39349:1079;;;;:::o;36853:221::-;36938:14;36955:20;36972:2;36955:16;:20::i;:::-;36938:37;;37013:7;36986:12;:16;36999:2;36986:16;;;;;;;;;;;;;;;:24;37003:6;36986:24;;;;;;;;;;;:34;;;;37060:6;37031:17;:26;37049:7;37031:26;;;;;;;;;;;:35;;;;36853:221;;;:::o;7986:422::-;8046:4;8254:12;8365:7;8353:20;8345:28;;8399:1;8392:4;:8;8385:15;;;7986:422;;;:::o;7:342:1:-;;109:64;124:48;165:6;124:48;:::i;:::-;109:64;:::i;:::-;100:73;;196:6;189:5;182:21;234:4;227:5;223:16;272:3;263:6;258:3;254:16;251:25;248:2;;;289:1;286;279:12;248:2;302:41;336:6;331:3;326;302:41;:::i;:::-;90:259;;;;;;:::o;355:139::-;;439:6;426:20;417:29;;455:33;482:5;455:33;:::i;:::-;407:87;;;;:::o;500:133::-;;581:6;568:20;559:29;;597:30;621:5;597:30;:::i;:::-;549:84;;;;:::o;639:137::-;;722:6;709:20;700:29;;738:32;764:5;738:32;:::i;:::-;690:86;;;;:::o;782:141::-;;869:6;863:13;854:22;;885:32;911:5;885:32;:::i;:::-;844:79;;;;:::o;942:271::-;;1046:3;1039:4;1031:6;1027:17;1023:27;1013:2;;1064:1;1061;1054:12;1013:2;1104:6;1091:20;1129:78;1203:3;1195:6;1188:4;1180:6;1176:17;1129:78;:::i;:::-;1120:87;;1003:210;;;;;:::o;1219:139::-;;1303:6;1290:20;1281:29;;1319:33;1346:5;1319:33;:::i;:::-;1271:87;;;;:::o;1364:262::-;;1472:2;1460:9;1451:7;1447:23;1443:32;1440:2;;;1488:1;1485;1478:12;1440:2;1531:1;1556:53;1601:7;1592:6;1581:9;1577:22;1556:53;:::i;:::-;1546:63;;1502:117;1430:196;;;;:::o;1632:407::-;;;1757:2;1745:9;1736:7;1732:23;1728:32;1725:2;;;1773:1;1770;1763:12;1725:2;1816:1;1841:53;1886:7;1877:6;1866:9;1862:22;1841:53;:::i;:::-;1831:63;;1787:117;1943:2;1969:53;2014:7;2005:6;1994:9;1990:22;1969:53;:::i;:::-;1959:63;;1914:118;1715:324;;;;;:::o;2045:552::-;;;;2187:2;2175:9;2166:7;2162:23;2158:32;2155:2;;;2203:1;2200;2193:12;2155:2;2246:1;2271:53;2316:7;2307:6;2296:9;2292:22;2271:53;:::i;:::-;2261:63;;2217:117;2373:2;2399:53;2444:7;2435:6;2424:9;2420:22;2399:53;:::i;:::-;2389:63;;2344:118;2501:2;2527:53;2572:7;2563:6;2552:9;2548:22;2527:53;:::i;:::-;2517:63;;2472:118;2145:452;;;;;:::o;2603:809::-;;;;;2771:3;2759:9;2750:7;2746:23;2742:33;2739:2;;;2788:1;2785;2778:12;2739:2;2831:1;2856:53;2901:7;2892:6;2881:9;2877:22;2856:53;:::i;:::-;2846:63;;2802:117;2958:2;2984:53;3029:7;3020:6;3009:9;3005:22;2984:53;:::i;:::-;2974:63;;2929:118;3086:2;3112:53;3157:7;3148:6;3137:9;3133:22;3112:53;:::i;:::-;3102:63;;3057:118;3242:2;3231:9;3227:18;3214:32;3273:18;3265:6;3262:30;3259:2;;;3305:1;3302;3295:12;3259:2;3333:62;3387:7;3378:6;3367:9;3363:22;3333:62;:::i;:::-;3323:72;;3185:220;2729:683;;;;;;;:::o;3418:401::-;;;3540:2;3528:9;3519:7;3515:23;3511:32;3508:2;;;3556:1;3553;3546:12;3508:2;3599:1;3624:53;3669:7;3660:6;3649:9;3645:22;3624:53;:::i;:::-;3614:63;;3570:117;3726:2;3752:50;3794:7;3785:6;3774:9;3770:22;3752:50;:::i;:::-;3742:60;;3697:115;3498:321;;;;;:::o;3825:407::-;;;3950:2;3938:9;3929:7;3925:23;3921:32;3918:2;;;3966:1;3963;3956:12;3918:2;4009:1;4034:53;4079:7;4070:6;4059:9;4055:22;4034:53;:::i;:::-;4024:63;;3980:117;4136:2;4162:53;4207:7;4198:6;4187:9;4183:22;4162:53;:::i;:::-;4152:63;;4107:118;3908:324;;;;;:::o;4238:260::-;;4345:2;4333:9;4324:7;4320:23;4316:32;4313:2;;;4361:1;4358;4351:12;4313:2;4404:1;4429:52;4473:7;4464:6;4453:9;4449:22;4429:52;:::i;:::-;4419:62;;4375:116;4303:195;;;;:::o;4504:282::-;;4622:2;4610:9;4601:7;4597:23;4593:32;4590:2;;;4638:1;4635;4628:12;4590:2;4681:1;4706:63;4761:7;4752:6;4741:9;4737:22;4706:63;:::i;:::-;4696:73;;4652:127;4580:206;;;;:::o;4792:262::-;;4900:2;4888:9;4879:7;4875:23;4871:32;4868:2;;;4916:1;4913;4906:12;4868:2;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;4858:196;;;;:::o;5060:118::-;5147:24;5165:5;5147:24;:::i;:::-;5142:3;5135:37;5125:53;;:::o;5184:109::-;5265:21;5280:5;5265:21;:::i;:::-;5260:3;5253:34;5243:50;;:::o;5299:360::-;;5413:38;5445:5;5413:38;:::i;:::-;5467:70;5530:6;5525:3;5467:70;:::i;:::-;5460:77;;5546:52;5591:6;5586:3;5579:4;5572:5;5568:16;5546:52;:::i;:::-;5623:29;5645:6;5623:29;:::i;:::-;5618:3;5614:39;5607:46;;5389:270;;;;;:::o;5665:364::-;;5781:39;5814:5;5781:39;:::i;:::-;5836:71;5900:6;5895:3;5836:71;:::i;:::-;5829:78;;5916:52;5961:6;5956:3;5949:4;5942:5;5938:16;5916:52;:::i;:::-;5993:29;6015:6;5993:29;:::i;:::-;5988:3;5984:39;5977:46;;5757:272;;;;;:::o;6035:375::-;;6198:67;6262:2;6257:3;6198:67;:::i;:::-;6191:74;;6295:34;6291:1;6286:3;6282:11;6275:55;6361:13;6356:2;6351:3;6347:12;6340:35;6401:2;6396:3;6392:12;6385:19;;6181:229;;;:::o;6416:382::-;;6579:67;6643:2;6638:3;6579:67;:::i;:::-;6572:74;;6676:34;6672:1;6667:3;6663:11;6656:55;6742:20;6737:2;6732:3;6728:12;6721:42;6789:2;6784:3;6780:12;6773:19;;6562:236;;;:::o;6804:370::-;;6967:67;7031:2;7026:3;6967:67;:::i;:::-;6960:74;;7064:34;7060:1;7055:3;7051:11;7044:55;7130:8;7125:2;7120:3;7116:12;7109:30;7165:2;7160:3;7156:12;7149:19;;6950:224;;;:::o;7180:326::-;;7343:67;7407:2;7402:3;7343:67;:::i;:::-;7336:74;;7440:30;7436:1;7431:3;7427:11;7420:51;7497:2;7492:3;7488:12;7481:19;;7326:180;;;:::o;7512:368::-;;7675:67;7739:2;7734:3;7675:67;:::i;:::-;7668:74;;7772:34;7768:1;7763:3;7759:11;7752:55;7838:6;7833:2;7828:3;7824:12;7817:28;7871:2;7866:3;7862:12;7855:19;;7658:222;;;:::o;7886:323::-;;8049:67;8113:2;8108:3;8049:67;:::i;:::-;8042:74;;8146:27;8142:1;8137:3;8133:11;8126:48;8200:2;8195:3;8191:12;8184:19;;8032:177;;;:::o;8215:376::-;;8378:67;8442:2;8437:3;8378:67;:::i;:::-;8371:74;;8475:34;8471:1;8466:3;8462:11;8455:55;8541:14;8536:2;8531:3;8527:12;8520:36;8582:2;8577:3;8573:12;8566:19;;8361:230;;;:::o;8597:388::-;;8760:67;8824:2;8819:3;8760:67;:::i;:::-;8753:74;;8857:34;8853:1;8848:3;8844:11;8837:55;8923:26;8918:2;8913:3;8909:12;8902:48;8976:2;8971:3;8967:12;8960:19;;8743:242;;;:::o;8991:374::-;;9154:67;9218:2;9213:3;9154:67;:::i;:::-;9147:74;;9251:34;9247:1;9242:3;9238:11;9231:55;9317:12;9312:2;9307:3;9303:12;9296:34;9356:2;9351:3;9347:12;9340:19;;9137:228;;;:::o;9371:373::-;;9534:67;9598:2;9593:3;9534:67;:::i;:::-;9527:74;;9631:34;9627:1;9622:3;9618:11;9611:55;9697:11;9692:2;9687:3;9683:12;9676:33;9735:2;9730:3;9726:12;9719:19;;9517:227;;;:::o;9750:300::-;;9913:66;9977:1;9972:3;9913:66;:::i;:::-;9906:73;;10009:5;10005:1;10000:3;9996:11;9989:26;10041:2;10036:3;10032:12;10025:19;;9896:154;;;:::o;10056:330::-;;10219:67;10283:2;10278:3;10219:67;:::i;:::-;10212:74;;10316:34;10312:1;10307:3;10303:11;10296:55;10377:2;10372:3;10368:12;10361:19;;10202:184;;;:::o;10392:376::-;;10555:67;10619:2;10614:3;10555:67;:::i;:::-;10548:74;;10652:34;10648:1;10643:3;10639:11;10632:55;10718:14;10713:2;10708:3;10704:12;10697:36;10759:2;10754:3;10750:12;10743:19;;10538:230;;;:::o;10774:330::-;;10937:67;11001:2;10996:3;10937:67;:::i;:::-;10930:74;;11034:34;11030:1;11025:3;11021:11;11014:55;11095:2;11090:3;11086:12;11079:19;;10920:184;;;:::o;11110:373::-;;11273:67;11337:2;11332:3;11273:67;:::i;:::-;11266:74;;11370:34;11366:1;11361:3;11357:11;11350:55;11436:11;11431:2;11426:3;11422:12;11415:33;11474:2;11469:3;11465:12;11458:19;;11256:227;;;:::o;11489:379::-;;11652:67;11716:2;11711:3;11652:67;:::i;:::-;11645:74;;11749:34;11745:1;11740:3;11736:11;11729:55;11815:17;11810:2;11805:3;11801:12;11794:39;11859:2;11854:3;11850:12;11843:19;;11635:233;;;:::o;11874:365::-;;12037:67;12101:2;12096:3;12037:67;:::i;:::-;12030:74;;12134:34;12130:1;12125:3;12121:11;12114:55;12200:3;12195:2;12190:3;12186:12;12179:25;12230:2;12225:3;12221:12;12214:19;;12020:219;;;:::o;12245:381::-;;12408:67;12472:2;12467:3;12408:67;:::i;:::-;12401:74;;12505:34;12501:1;12496:3;12492:11;12485:55;12571:19;12566:2;12561:3;12557:12;12550:41;12617:2;12612:3;12608:12;12601:19;;12391:235;;;:::o;12632:376::-;;12795:67;12859:2;12854:3;12795:67;:::i;:::-;12788:74;;12892:34;12888:1;12883:3;12879:11;12872:55;12958:14;12953:2;12948:3;12944:12;12937:36;12999:2;12994:3;12990:12;12983:19;;12778:230;;;:::o;13014:118::-;13101:24;13119:5;13101:24;:::i;:::-;13096:3;13089:37;13079:53;;:::o;13138:222::-;;13269:2;13258:9;13254:18;13246:26;;13282:71;13350:1;13339:9;13335:17;13326:6;13282:71;:::i;:::-;13236:124;;;;:::o;13366:640::-;;13599:3;13588:9;13584:19;13576:27;;13613:71;13681:1;13670:9;13666:17;13657:6;13613:71;:::i;:::-;13694:72;13762:2;13751:9;13747:18;13738:6;13694:72;:::i;:::-;13776;13844:2;13833:9;13829:18;13820:6;13776:72;:::i;:::-;13895:9;13889:4;13885:20;13880:2;13869:9;13865:18;13858:48;13923:76;13994:4;13985:6;13923:76;:::i;:::-;13915:84;;13566:440;;;;;;;:::o;14012:210::-;;14137:2;14126:9;14122:18;14114:26;;14150:65;14212:1;14201:9;14197:17;14188:6;14150:65;:::i;:::-;14104:118;;;;:::o;14228:313::-;;14379:2;14368:9;14364:18;14356:26;;14428:9;14422:4;14418:20;14414:1;14403:9;14399:17;14392:47;14456:78;14529:4;14520:6;14456:78;:::i;:::-;14448:86;;14346:195;;;;:::o;14547:419::-;;14751:2;14740:9;14736:18;14728:26;;14800:9;14794:4;14790:20;14786:1;14775:9;14771:17;14764:47;14828:131;14954:4;14828:131;:::i;:::-;14820:139;;14718:248;;;:::o;14972:419::-;;15176:2;15165:9;15161:18;15153:26;;15225:9;15219:4;15215:20;15211:1;15200:9;15196:17;15189:47;15253:131;15379:4;15253:131;:::i;:::-;15245:139;;15143:248;;;:::o;15397:419::-;;15601:2;15590:9;15586:18;15578:26;;15650:9;15644:4;15640:20;15636:1;15625:9;15621:17;15614:47;15678:131;15804:4;15678:131;:::i;:::-;15670:139;;15568:248;;;:::o;15822:419::-;;16026:2;16015:9;16011:18;16003:26;;16075:9;16069:4;16065:20;16061:1;16050:9;16046:17;16039:47;16103:131;16229:4;16103:131;:::i;:::-;16095:139;;15993:248;;;:::o;16247:419::-;;16451:2;16440:9;16436:18;16428:26;;16500:9;16494:4;16490:20;16486:1;16475:9;16471:17;16464:47;16528:131;16654:4;16528:131;:::i;:::-;16520:139;;16418:248;;;:::o;16672:419::-;;16876:2;16865:9;16861:18;16853:26;;16925:9;16919:4;16915:20;16911:1;16900:9;16896:17;16889:47;16953:131;17079:4;16953:131;:::i;:::-;16945:139;;16843:248;;;:::o;17097:419::-;;17301:2;17290:9;17286:18;17278:26;;17350:9;17344:4;17340:20;17336:1;17325:9;17321:17;17314:47;17378:131;17504:4;17378:131;:::i;:::-;17370:139;;17268:248;;;:::o;17522:419::-;;17726:2;17715:9;17711:18;17703:26;;17775:9;17769:4;17765:20;17761:1;17750:9;17746:17;17739:47;17803:131;17929:4;17803:131;:::i;:::-;17795:139;;17693:248;;;:::o;17947:419::-;;18151:2;18140:9;18136:18;18128:26;;18200:9;18194:4;18190:20;18186:1;18175:9;18171:17;18164:47;18228:131;18354:4;18228:131;:::i;:::-;18220:139;;18118:248;;;:::o;18372:419::-;;18576:2;18565:9;18561:18;18553:26;;18625:9;18619:4;18615:20;18611:1;18600:9;18596:17;18589:47;18653:131;18779:4;18653:131;:::i;:::-;18645:139;;18543:248;;;:::o;18797:419::-;;19001:2;18990:9;18986:18;18978:26;;19050:9;19044:4;19040:20;19036:1;19025:9;19021:17;19014:47;19078:131;19204:4;19078:131;:::i;:::-;19070:139;;18968:248;;;:::o;19222:419::-;;19426:2;19415:9;19411:18;19403:26;;19475:9;19469:4;19465:20;19461:1;19450:9;19446:17;19439:47;19503:131;19629:4;19503:131;:::i;:::-;19495:139;;19393:248;;;:::o;19647:419::-;;19851:2;19840:9;19836:18;19828:26;;19900:9;19894:4;19890:20;19886:1;19875:9;19871:17;19864:47;19928:131;20054:4;19928:131;:::i;:::-;19920:139;;19818:248;;;:::o;20072:419::-;;20276:2;20265:9;20261:18;20253:26;;20325:9;20319:4;20315:20;20311:1;20300:9;20296:17;20289:47;20353:131;20479:4;20353:131;:::i;:::-;20345:139;;20243:248;;;:::o;20497:419::-;;20701:2;20690:9;20686:18;20678:26;;20750:9;20744:4;20740:20;20736:1;20725:9;20721:17;20714:47;20778:131;20904:4;20778:131;:::i;:::-;20770:139;;20668:248;;;:::o;20922:419::-;;21126:2;21115:9;21111:18;21103:26;;21175:9;21169:4;21165:20;21161:1;21150:9;21146:17;21139:47;21203:131;21329:4;21203:131;:::i;:::-;21195:139;;21093:248;;;:::o;21347:419::-;;21551:2;21540:9;21536:18;21528:26;;21600:9;21594:4;21590:20;21586:1;21575:9;21571:17;21564:47;21628:131;21754:4;21628:131;:::i;:::-;21620:139;;21518:248;;;:::o;21772:419::-;;21976:2;21965:9;21961:18;21953:26;;22025:9;22019:4;22015:20;22011:1;22000:9;21996:17;21989:47;22053:131;22179:4;22053:131;:::i;:::-;22045:139;;21943:248;;;:::o;22197:419::-;;22401:2;22390:9;22386:18;22378:26;;22450:9;22444:4;22440:20;22436:1;22425:9;22421:17;22414:47;22478:131;22604:4;22478:131;:::i;:::-;22470:139;;22368:248;;;:::o;22622:222::-;;22753:2;22742:9;22738:18;22730:26;;22766:71;22834:1;22823:9;22819:17;22810:6;22766:71;:::i;:::-;22720:124;;;;:::o;22850:283::-;;22916:2;22910:9;22900:19;;22958:4;22950:6;22946:17;23065:6;23053:10;23050:22;23029:18;23017:10;23014:34;23011:62;23008:2;;;23076:18;;:::i;:::-;23008:2;23116:10;23112:2;23105:22;22890:243;;;;:::o;23139:331::-;;23290:18;23282:6;23279:30;23276:2;;;23312:18;;:::i;:::-;23276:2;23397:4;23393:9;23386:4;23378:6;23374:17;23370:33;23362:41;;23458:4;23452;23448:15;23440:23;;23205:265;;;:::o;23476:98::-;;23561:5;23555:12;23545:22;;23534:40;;;:::o;23580:99::-;;23666:5;23660:12;23650:22;;23639:40;;;:::o;23685:168::-;;23802:6;23797:3;23790:19;23842:4;23837:3;23833:14;23818:29;;23780:73;;;;:::o;23859:169::-;;23977:6;23972:3;23965:19;24017:4;24012:3;24008:14;23993:29;;23955:73;;;;:::o;24034:305::-;;24093:20;24111:1;24093:20;:::i;:::-;24088:25;;24127:20;24145:1;24127:20;:::i;:::-;24122:25;;24281:1;24213:66;24209:74;24206:1;24203:81;24200:2;;;24287:18;;:::i;:::-;24200:2;24331:1;24328;24324:9;24317:16;;24078:261;;;;:::o;24345:191::-;;24405:20;24423:1;24405:20;:::i;:::-;24400:25;;24439:20;24457:1;24439:20;:::i;:::-;24434:25;;24478:1;24475;24472:8;24469:2;;;24483:18;;:::i;:::-;24469:2;24528:1;24525;24521:9;24513:17;;24390:146;;;;:::o;24542:96::-;;24608:24;24626:5;24608:24;:::i;:::-;24597:35;;24587:51;;;:::o;24644:90::-;;24721:5;24714:13;24707:21;24696:32;;24686:48;;;:::o;24740:149::-;;24816:66;24809:5;24805:78;24794:89;;24784:105;;;:::o;24895:126::-;;24972:42;24965:5;24961:54;24950:65;;24940:81;;;:::o;25027:77::-;;25093:5;25082:16;;25072:32;;;:::o;25110:154::-;25194:6;25189:3;25184;25171:30;25256:1;25247:6;25242:3;25238:16;25231:27;25161:103;;;:::o;25270:307::-;25338:1;25348:113;25362:6;25359:1;25356:13;25348:113;;;25447:1;25442:3;25438:11;25432:18;25428:1;25423:3;25419:11;25412:39;25384:2;25381:1;25377:10;25372:15;;25348:113;;;25479:6;25476:1;25473:13;25470:2;;;25559:1;25550:6;25545:3;25541:16;25534:27;25470:2;25319:258;;;;:::o;25583:320::-;;25664:1;25658:4;25654:12;25644:22;;25711:1;25705:4;25701:12;25732:18;25722:2;;25788:4;25780:6;25776:17;25766:27;;25722:2;25850;25842:6;25839:14;25819:18;25816:38;25813:2;;;25869:18;;:::i;:::-;25813:2;25634:269;;;;:::o;25909:180::-;25957:77;25954:1;25947:88;26054:4;26051:1;26044:15;26078:4;26075:1;26068:15;26095:180;26143:77;26140:1;26133:88;26240:4;26237:1;26230:15;26264:4;26261:1;26254:15;26281:180;26329:77;26326:1;26319:88;26426:4;26423:1;26416:15;26450:4;26447:1;26440:15;26467:102;;26559:2;26555:7;26550:2;26543:5;26539:14;26535:28;26525:38;;26515:54;;;:::o;26575:122::-;26648:24;26666:5;26648:24;:::i;:::-;26641:5;26638:35;26628:2;;26687:1;26684;26677:12;26628:2;26618:79;:::o;26703:116::-;26773:21;26788:5;26773:21;:::i;:::-;26766:5;26763:32;26753:2;;26809:1;26806;26799:12;26753:2;26743:76;:::o;26825:120::-;26897:23;26914:5;26897:23;:::i;:::-;26890:5;26887:34;26877:2;;26935:1;26932;26925:12;26877:2;26867:78;:::o;26951:122::-;27024:24;27042:5;27024:24;:::i;:::-;27017:5;27014:35;27004:2;;27063:1;27060;27053:12;27004:2;26994:79;:::o

Swarm Source

ipfs://080048831d364a77ee6032a4ec208a71f7e0207a865d00c1beb9a8f7dab326ef
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.