ETH Price: $2,458.77 (-1.17%)

Token

FCG Championship Ring (CHAMP)
 

Overview

Max Total Supply

3,083 CHAMP

Holders

1,247

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 CHAMP
0x867748b6d98388a7591e380f633d8c7cf791168a
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:
ChampionshipRings

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/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;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/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}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

// File: contracts/ChampionshipRings.sol

pragma solidity ^0.8.4;




contract ChampionshipRings is Ownable, ERC721 {

    event Mint(uint indexed _tokenId);

    uint public totalSupply = 0; // This is our mint counter as well
    mapping(uint => string) public tokenURIs; // Metadata location, updatable by owner
    string public _baseTokenURI; // Same for all tokens
    bool public paused = false;
    address public fcgAddr = 0x82258c0F6ad961CE259eA3A134d32484125E4E40;

    constructor() payable ERC721("FCG Championship Ring", "CHAMP") {
    }

    function mint(address to, uint[] memory tokenIds) external {
        require(!paused, "Paused");
        for (uint i = 0; i < tokenIds.length; i++) {
            require(!_exists(tokenIds[i]), "Token already minted");
            require(IERC721(fcgAddr).ownerOf(tokenIds[i]) == to, "Not the owner");
            _mint(to, tokenIds[i]);
            emit Mint(tokenIds[i]);
            totalSupply += 1;
        }
    }

    /**
     * @dev Returns a URI for a given token ID's metadata
     */
    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        return string(abi.encodePacked(_baseTokenURI, Strings.toString(_tokenId)));
    }

    // ADMIN FUNCTIONALITY

    /**
     * @dev Pauses or unpauses the contract
     */
    function setPaused(bool _paused) public onlyOwner {
        paused = _paused;
    }

    /**
     * @dev Updates the base token URI for the metadata
     */
    function setBaseTokenURI(string memory __baseTokenURI) public onlyOwner {
        _baseTokenURI = __baseTokenURI;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"uint256","name":"_tokenId","type":"uint256"}],"name":"Mint","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":"_baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fcgAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"string","name":"__baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenURIs","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"}]

608060405260006007556000600a60006101000a81548160ff0219169083151502179055507382258c0f6ad961ce259ea3a134d32484125e4e40600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280601581526020017f464347204368616d70696f6e736869702052696e6700000000000000000000008152506040518060400160405280600581526020017f4348414d5000000000000000000000000000000000000000000000000000000081525062000105620000f96200013f60201b60201c565b6200014760201b60201c565b81600190805190602001906200011d9291906200020b565b508060029080519060200190620001369291906200020b565b50505062000320565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021990620002bb565b90600052602060002090601f0160209004810192826200023d576000855562000289565b82601f106200025857805160ff191683800117855562000289565b8280016001018555821562000289579182015b82811115620002885782518255916020019190600101906200026b565b5b5090506200029891906200029c565b5090565b5b80821115620002b75760008160009055506001016200029d565b5090565b60006002820490506001821680620002d457607f821691505b60208210811415620002eb57620002ea620002f1565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6134f780620003306000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103b3578063c87b56dd146103cf578063cfc86f7b146103ff578063de836ebd1461041d578063e985e9c514610439578063f2fde38b1461046957610158565b806370a0823114610303578063715018a6146103335780638da5cb5b1461033d57806395d89b411461035b578063a22cb46514610379578063a43661161461039557610158565b806323b872dd1161011557806323b872dd1461023157806330176e131461024d57806342842e0e146102695780635c975abb146102855780636352211e146102a35780636c8b703f146102d357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806316c38b3c146101f757806318160ddd14610213575b600080fd5b61017760048036038101906101729190612417565b610485565b6040516101849190612923565b60405180910390f35b610195610567565b6040516101a2919061293e565b60405180910390f35b6101c560048036038101906101c091906124aa565b6105f9565b6040516101d291906128bc565b60405180910390f35b6101f560048036038101906101f091906123b2565b61067e565b005b610211600480360381019061020c91906123ee565b610796565b005b61021b61082f565b6040516102289190612ba0565b60405180910390f35b61024b60048036038101906102469190612258565b610835565b005b61026760048036038101906102629190612469565b610895565b005b610283600480360381019061027e9190612258565b61092b565b005b61028d61094b565b60405161029a9190612923565b60405180910390f35b6102bd60048036038101906102b891906124aa565b61095e565b6040516102ca91906128bc565b60405180910390f35b6102ed60048036038101906102e891906124aa565b610a10565b6040516102fa919061293e565b60405180910390f35b61031d600480360381019061031891906121ca565b610ab0565b60405161032a9190612ba0565b60405180910390f35b61033b610b68565b005b610345610bf0565b60405161035291906128bc565b60405180910390f35b610363610c19565b604051610370919061293e565b60405180910390f35b610393600480360381019061038e9190612376565b610cab565b005b61039d610e2c565b6040516103aa91906128bc565b60405180910390f35b6103cd60048036038101906103c891906122a7565b610e52565b005b6103e960048036038101906103e491906124aa565b610eb4565b6040516103f6919061293e565b60405180910390f35b610407610ee8565b604051610414919061293e565b60405180910390f35b61043760048036038101906104329190612322565b610f76565b005b610453600480360381019061044e919061221c565b61129c565b6040516104609190612923565b60405180910390f35b610483600480360381019061047e91906121ca565b611330565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610560575061055f82611428565b5b9050919050565b60606001805461057690612e37565b80601f01602080910402602001604051908101604052809291908181526020018280546105a290612e37565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b5050505050905090565b600061060482611492565b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a90612b00565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106898261095e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190612b60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107196114fe565b73ffffffffffffffffffffffffffffffffffffffff1614806107485750610747816107426114fe565b61129c565b5b610787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077e90612a60565b60405180910390fd5b6107918383611506565b505050565b61079e6114fe565b73ffffffffffffffffffffffffffffffffffffffff166107bc610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990612b20565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60075481565b6108466108406114fe565b826115bf565b610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612b80565b60405180910390fd5b61089083838361169d565b505050565b61089d6114fe565b73ffffffffffffffffffffffffffffffffffffffff166108bb610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890612b20565b60405180910390fd5b8060099080519060200190610927929190611f43565b5050565b61094683838360405180602001604052806000815250610e52565b505050565b600a60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90612ac0565b60405180910390fd5b80915050919050565b60086020528060005260406000206000915090508054610a2f90612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b90612e37565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890612aa0565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b706114fe565b73ffffffffffffffffffffffffffffffffffffffff16610b8e610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612b20565b60405180910390fd5b610bee60006118f9565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610c2890612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490612e37565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b610cb36114fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612a20565b60405180910390fd5b8060066000610d2e6114fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ddb6114fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e209190612923565b60405180910390a35050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e63610e5d6114fe565b836115bf565b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990612b80565b60405180910390fd5b610eae848484846119bd565b50505050565b60606009610ec183611a19565b604051602001610ed2929190612898565b6040516020818303038152906040529050919050565b60098054610ef590612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190612e37565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b505050505081565b600a60009054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90612960565b60405180910390fd5b60005b81518110156112975761101b82828151811061100e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611492565b1561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290612980565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106110e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161110d9190612ba0565b60206040518083038186803b15801561112557600080fd5b505afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d91906121f3565b73ffffffffffffffffffffffffffffffffffffffff16146111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90612a80565b60405180910390fd5b6111fd838383815181106111f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611bc6565b818181518110611236577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101517f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a260016007600082825461127d9190612cc6565b92505081905550808061128f90612e9a565b915050610fc9565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113386114fe565b73ffffffffffffffffffffffffffffffffffffffff16611356610bf0565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390612b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561141c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611413906129c0565b60405180910390fd5b611425816118f9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115798361095e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ca82611492565b611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090612a40565b60405180910390fd5b60006116148361095e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061168357508373ffffffffffffffffffffffffffffffffffffffff1661166b846105f9565b73ffffffffffffffffffffffffffffffffffffffff16145b806116945750611693818561129c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116bd8261095e565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90612a00565b60405180910390fd5b61178e838383611d94565b611799600082611506565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e99190612d4d565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118409190612cc6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119c884848461169d565b6119d484848484611d99565b611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906129a0565b60405180910390fd5b50505050565b60606000821415611a61576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bc1565b600082905060005b60008214611a93578080611a7c90612e9a565b915050600a82611a8c9190612d1c565b9150611a69565b60008167ffffffffffffffff811115611ad5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b075781602001600182028036833780820191505090505b5090505b60008514611bba57600182611b209190612d4d565b9150600a85611b2f9190612ee3565b6030611b3b9190612cc6565b60f81b818381518110611b77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bb39190612d1c565b9450611b0b565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90612ae0565b60405180910390fd5b611c3f81611492565b15611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c76906129e0565b60405180910390fd5b611c8b60008383611d94565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cdb9190612cc6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000611dba8473ffffffffffffffffffffffffffffffffffffffff16611f30565b15611f23578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611de36114fe565b8786866040518563ffffffff1660e01b8152600401611e0594939291906128d7565b602060405180830381600087803b158015611e1f57600080fd5b505af1925050508015611e5057506040513d601f19601f82011682018060405250810190611e4d9190612440565b60015b611ed3573d8060008114611e80576040519150601f19603f3d011682016040523d82523d6000602084013e611e85565b606091505b50600081511415611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec2906129a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f28565b600190505b949350505050565b600080823b905060008111915050919050565b828054611f4f90612e37565b90600052602060002090601f016020900481019282611f715760008555611fb8565b82601f10611f8a57805160ff1916838001178555611fb8565b82800160010185558215611fb8579182015b82811115611fb7578251825591602001919060010190611f9c565b5b509050611fc59190611fc9565b5090565b5b80821115611fe2576000816000905550600101611fca565b5090565b6000611ff9611ff484612be0565b612bbb565b9050808382526020820190508285602086028201111561201857600080fd5b60005b85811015612048578161202e88826121b5565b84526020840193506020830192505060018101905061201b565b5050509392505050565b600061206561206084612c0c565b612bbb565b90508281526020810184848401111561207d57600080fd5b612088848285612df5565b509392505050565b60006120a361209e84612c3d565b612bbb565b9050828152602081018484840111156120bb57600080fd5b6120c6848285612df5565b509392505050565b6000813590506120dd81613465565b92915050565b6000815190506120f281613465565b92915050565b600082601f83011261210957600080fd5b8135612119848260208601611fe6565b91505092915050565b6000813590506121318161347c565b92915050565b60008135905061214681613493565b92915050565b60008151905061215b81613493565b92915050565b600082601f83011261217257600080fd5b8135612182848260208601612052565b91505092915050565b600082601f83011261219c57600080fd5b81356121ac848260208601612090565b91505092915050565b6000813590506121c4816134aa565b92915050565b6000602082840312156121dc57600080fd5b60006121ea848285016120ce565b91505092915050565b60006020828403121561220557600080fd5b6000612213848285016120e3565b91505092915050565b6000806040838503121561222f57600080fd5b600061223d858286016120ce565b925050602061224e858286016120ce565b9150509250929050565b60008060006060848603121561226d57600080fd5b600061227b868287016120ce565b935050602061228c868287016120ce565b925050604061229d868287016121b5565b9150509250925092565b600080600080608085870312156122bd57600080fd5b60006122cb878288016120ce565b94505060206122dc878288016120ce565b93505060406122ed878288016121b5565b925050606085013567ffffffffffffffff81111561230a57600080fd5b61231687828801612161565b91505092959194509250565b6000806040838503121561233557600080fd5b6000612343858286016120ce565b925050602083013567ffffffffffffffff81111561236057600080fd5b61236c858286016120f8565b9150509250929050565b6000806040838503121561238957600080fd5b6000612397858286016120ce565b92505060206123a885828601612122565b9150509250929050565b600080604083850312156123c557600080fd5b60006123d3858286016120ce565b92505060206123e4858286016121b5565b9150509250929050565b60006020828403121561240057600080fd5b600061240e84828501612122565b91505092915050565b60006020828403121561242957600080fd5b600061243784828501612137565b91505092915050565b60006020828403121561245257600080fd5b60006124608482850161214c565b91505092915050565b60006020828403121561247b57600080fd5b600082013567ffffffffffffffff81111561249557600080fd5b6124a18482850161218b565b91505092915050565b6000602082840312156124bc57600080fd5b60006124ca848285016121b5565b91505092915050565b6124dc81612d81565b82525050565b6124eb81612d93565b82525050565b60006124fc82612c83565b6125068185612c99565b9350612516818560208601612e04565b61251f81612fd0565b840191505092915050565b600061253582612c8e565b61253f8185612caa565b935061254f818560208601612e04565b61255881612fd0565b840191505092915050565b600061256e82612c8e565b6125788185612cbb565b9350612588818560208601612e04565b80840191505092915050565b600081546125a181612e37565b6125ab8186612cbb565b945060018216600081146125c657600181146125d75761260a565b60ff1983168652818601935061260a565b6125e085612c6e565b60005b83811015612602578154818901526001820191506020810190506125e3565b838801955050505b50505092915050565b6000612620600683612caa565b915061262b82612fe1565b602082019050919050565b6000612643601483612caa565b915061264e8261300a565b602082019050919050565b6000612666603283612caa565b915061267182613033565b604082019050919050565b6000612689602683612caa565b915061269482613082565b604082019050919050565b60006126ac601c83612caa565b91506126b7826130d1565b602082019050919050565b60006126cf602483612caa565b91506126da826130fa565b604082019050919050565b60006126f2601983612caa565b91506126fd82613149565b602082019050919050565b6000612715602c83612caa565b915061272082613172565b604082019050919050565b6000612738603883612caa565b9150612743826131c1565b604082019050919050565b600061275b600d83612caa565b915061276682613210565b602082019050919050565b600061277e602a83612caa565b915061278982613239565b604082019050919050565b60006127a1602983612caa565b91506127ac82613288565b604082019050919050565b60006127c4602083612caa565b91506127cf826132d7565b602082019050919050565b60006127e7602c83612caa565b91506127f282613300565b604082019050919050565b600061280a602083612caa565b91506128158261334f565b602082019050919050565b600061282d602983612caa565b915061283882613378565b604082019050919050565b6000612850602183612caa565b915061285b826133c7565b604082019050919050565b6000612873603183612caa565b915061287e82613416565b604082019050919050565b61289281612deb565b82525050565b60006128a48285612594565b91506128b08284612563565b91508190509392505050565b60006020820190506128d160008301846124d3565b92915050565b60006080820190506128ec60008301876124d3565b6128f960208301866124d3565b6129066040830185612889565b818103606083015261291881846124f1565b905095945050505050565b600060208201905061293860008301846124e2565b92915050565b60006020820190508181036000830152612958818461252a565b905092915050565b6000602082019050818103600083015261297981612613565b9050919050565b6000602082019050818103600083015261299981612636565b9050919050565b600060208201905081810360008301526129b981612659565b9050919050565b600060208201905081810360008301526129d98161267c565b9050919050565b600060208201905081810360008301526129f98161269f565b9050919050565b60006020820190508181036000830152612a19816126c2565b9050919050565b60006020820190508181036000830152612a39816126e5565b9050919050565b60006020820190508181036000830152612a5981612708565b9050919050565b60006020820190508181036000830152612a798161272b565b9050919050565b60006020820190508181036000830152612a998161274e565b9050919050565b60006020820190508181036000830152612ab981612771565b9050919050565b60006020820190508181036000830152612ad981612794565b9050919050565b60006020820190508181036000830152612af9816127b7565b9050919050565b60006020820190508181036000830152612b19816127da565b9050919050565b60006020820190508181036000830152612b39816127fd565b9050919050565b60006020820190508181036000830152612b5981612820565b9050919050565b60006020820190508181036000830152612b7981612843565b9050919050565b60006020820190508181036000830152612b9981612866565b9050919050565b6000602082019050612bb56000830184612889565b92915050565b6000612bc5612bd6565b9050612bd18282612e69565b919050565b6000604051905090565b600067ffffffffffffffff821115612bfb57612bfa612fa1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c2757612c26612fa1565b5b612c3082612fd0565b9050602081019050919050565b600067ffffffffffffffff821115612c5857612c57612fa1565b5b612c6182612fd0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cd182612deb565b9150612cdc83612deb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d1157612d10612f14565b5b828201905092915050565b6000612d2782612deb565b9150612d3283612deb565b925082612d4257612d41612f43565b5b828204905092915050565b6000612d5882612deb565b9150612d6383612deb565b925082821015612d7657612d75612f14565b5b828203905092915050565b6000612d8c82612dcb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e22578082015181840152602081019050612e07565b83811115612e31576000848401525b50505050565b60006002820490506001821680612e4f57607f821691505b60208210811415612e6357612e62612f72565b5b50919050565b612e7282612fd0565b810181811067ffffffffffffffff82111715612e9157612e90612fa1565b5b80604052505050565b6000612ea582612deb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ed857612ed7612f14565b5b600182019050919050565b6000612eee82612deb565b9150612ef983612deb565b925082612f0957612f08612f43565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f546f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61346e81612d81565b811461347957600080fd5b50565b61348581612d93565b811461349057600080fd5b50565b61349c81612d9f565b81146134a757600080fd5b50565b6134b381612deb565b81146134be57600080fd5b5056fea2646970667358221220b4433fa5129b35bdf5294bebe39ef8b647bdb6238761a621873eb4ed2b99fddf64736f6c63430008040033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063b88d4fde1161007c578063b88d4fde146103b3578063c87b56dd146103cf578063cfc86f7b146103ff578063de836ebd1461041d578063e985e9c514610439578063f2fde38b1461046957610158565b806370a0823114610303578063715018a6146103335780638da5cb5b1461033d57806395d89b411461035b578063a22cb46514610379578063a43661161461039557610158565b806323b872dd1161011557806323b872dd1461023157806330176e131461024d57806342842e0e146102695780635c975abb146102855780636352211e146102a35780636c8b703f146102d357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db57806316c38b3c146101f757806318160ddd14610213575b600080fd5b61017760048036038101906101729190612417565b610485565b6040516101849190612923565b60405180910390f35b610195610567565b6040516101a2919061293e565b60405180910390f35b6101c560048036038101906101c091906124aa565b6105f9565b6040516101d291906128bc565b60405180910390f35b6101f560048036038101906101f091906123b2565b61067e565b005b610211600480360381019061020c91906123ee565b610796565b005b61021b61082f565b6040516102289190612ba0565b60405180910390f35b61024b60048036038101906102469190612258565b610835565b005b61026760048036038101906102629190612469565b610895565b005b610283600480360381019061027e9190612258565b61092b565b005b61028d61094b565b60405161029a9190612923565b60405180910390f35b6102bd60048036038101906102b891906124aa565b61095e565b6040516102ca91906128bc565b60405180910390f35b6102ed60048036038101906102e891906124aa565b610a10565b6040516102fa919061293e565b60405180910390f35b61031d600480360381019061031891906121ca565b610ab0565b60405161032a9190612ba0565b60405180910390f35b61033b610b68565b005b610345610bf0565b60405161035291906128bc565b60405180910390f35b610363610c19565b604051610370919061293e565b60405180910390f35b610393600480360381019061038e9190612376565b610cab565b005b61039d610e2c565b6040516103aa91906128bc565b60405180910390f35b6103cd60048036038101906103c891906122a7565b610e52565b005b6103e960048036038101906103e491906124aa565b610eb4565b6040516103f6919061293e565b60405180910390f35b610407610ee8565b604051610414919061293e565b60405180910390f35b61043760048036038101906104329190612322565b610f76565b005b610453600480360381019061044e919061221c565b61129c565b6040516104609190612923565b60405180910390f35b610483600480360381019061047e91906121ca565b611330565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061055057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610560575061055f82611428565b5b9050919050565b60606001805461057690612e37565b80601f01602080910402602001604051908101604052809291908181526020018280546105a290612e37565b80156105ef5780601f106105c4576101008083540402835291602001916105ef565b820191906000526020600020905b8154815290600101906020018083116105d257829003601f168201915b5050505050905090565b600061060482611492565b610643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063a90612b00565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106898261095e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156106fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f190612b60565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166107196114fe565b73ffffffffffffffffffffffffffffffffffffffff1614806107485750610747816107426114fe565b61129c565b5b610787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077e90612a60565b60405180910390fd5b6107918383611506565b505050565b61079e6114fe565b73ffffffffffffffffffffffffffffffffffffffff166107bc610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610812576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080990612b20565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b60075481565b6108466108406114fe565b826115bf565b610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612b80565b60405180910390fd5b61089083838361169d565b505050565b61089d6114fe565b73ffffffffffffffffffffffffffffffffffffffff166108bb610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090890612b20565b60405180910390fd5b8060099080519060200190610927929190611f43565b5050565b61094683838360405180602001604052806000815250610e52565b505050565b600a60009054906101000a900460ff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a07576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109fe90612ac0565b60405180910390fd5b80915050919050565b60086020528060005260406000206000915090508054610a2f90612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5b90612e37565b8015610aa85780601f10610a7d57610100808354040283529160200191610aa8565b820191906000526020600020905b815481529060010190602001808311610a8b57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1890612aa0565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b706114fe565b73ffffffffffffffffffffffffffffffffffffffff16610b8e610bf0565b73ffffffffffffffffffffffffffffffffffffffff1614610be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdb90612b20565b60405180910390fd5b610bee60006118f9565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610c2890612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5490612e37565b8015610ca15780601f10610c7657610100808354040283529160200191610ca1565b820191906000526020600020905b815481529060010190602001808311610c8457829003601f168201915b5050505050905090565b610cb36114fe565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1890612a20565b60405180910390fd5b8060066000610d2e6114fe565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610ddb6114fe565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610e209190612923565b60405180910390a35050565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e63610e5d6114fe565b836115bf565b610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9990612b80565b60405180910390fd5b610eae848484846119bd565b50505050565b60606009610ec183611a19565b604051602001610ed2929190612898565b6040516020818303038152906040529050919050565b60098054610ef590612e37565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2190612e37565b8015610f6e5780601f10610f4357610100808354040283529160200191610f6e565b820191906000526020600020905b815481529060010190602001808311610f5157829003601f168201915b505050505081565b600a60009054906101000a900460ff1615610fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbd90612960565b60405180910390fd5b60005b81518110156112975761101b82828151811061100e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611492565b1561105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105290612980565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8484815181106110e9577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b815260040161110d9190612ba0565b60206040518083038186803b15801561112557600080fd5b505afa158015611139573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115d91906121f3565b73ffffffffffffffffffffffffffffffffffffffff16146111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90612a80565b60405180910390fd5b6111fd838383815181106111f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151611bc6565b818181518110611236577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101517f07883703ed0e86588a40d76551c92f8a4b329e3bf19765e0e6749473c1a8466560405160405180910390a260016007600082825461127d9190612cc6565b92505081905550808061128f90612e9a565b915050610fc9565b505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6113386114fe565b73ffffffffffffffffffffffffffffffffffffffff16611356610bf0565b73ffffffffffffffffffffffffffffffffffffffff16146113ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a390612b20565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561141c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611413906129c0565b60405180910390fd5b611425816118f9565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166115798361095e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006115ca82611492565b611609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160090612a40565b60405180910390fd5b60006116148361095e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061168357508373ffffffffffffffffffffffffffffffffffffffff1661166b846105f9565b73ffffffffffffffffffffffffffffffffffffffff16145b806116945750611693818561129c565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166116bd8261095e565b73ffffffffffffffffffffffffffffffffffffffff1614611713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170a90612b40565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90612a00565b60405180910390fd5b61178e838383611d94565b611799600082611506565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117e99190612d4d565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118409190612cc6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6119c884848461169d565b6119d484848484611d99565b611a13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0a906129a0565b60405180910390fd5b50505050565b60606000821415611a61576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611bc1565b600082905060005b60008214611a93578080611a7c90612e9a565b915050600a82611a8c9190612d1c565b9150611a69565b60008167ffffffffffffffff811115611ad5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611b075781602001600182028036833780820191505090505b5090505b60008514611bba57600182611b209190612d4d565b9150600a85611b2f9190612ee3565b6030611b3b9190612cc6565b60f81b818381518110611b77577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611bb39190612d1c565b9450611b0b565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2d90612ae0565b60405180910390fd5b611c3f81611492565b15611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c76906129e0565b60405180910390fd5b611c8b60008383611d94565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cdb9190612cc6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6000611dba8473ffffffffffffffffffffffffffffffffffffffff16611f30565b15611f23578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611de36114fe565b8786866040518563ffffffff1660e01b8152600401611e0594939291906128d7565b602060405180830381600087803b158015611e1f57600080fd5b505af1925050508015611e5057506040513d601f19601f82011682018060405250810190611e4d9190612440565b60015b611ed3573d8060008114611e80576040519150601f19603f3d011682016040523d82523d6000602084013e611e85565b606091505b50600081511415611ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec2906129a0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050611f28565b600190505b949350505050565b600080823b905060008111915050919050565b828054611f4f90612e37565b90600052602060002090601f016020900481019282611f715760008555611fb8565b82601f10611f8a57805160ff1916838001178555611fb8565b82800160010185558215611fb8579182015b82811115611fb7578251825591602001919060010190611f9c565b5b509050611fc59190611fc9565b5090565b5b80821115611fe2576000816000905550600101611fca565b5090565b6000611ff9611ff484612be0565b612bbb565b9050808382526020820190508285602086028201111561201857600080fd5b60005b85811015612048578161202e88826121b5565b84526020840193506020830192505060018101905061201b565b5050509392505050565b600061206561206084612c0c565b612bbb565b90508281526020810184848401111561207d57600080fd5b612088848285612df5565b509392505050565b60006120a361209e84612c3d565b612bbb565b9050828152602081018484840111156120bb57600080fd5b6120c6848285612df5565b509392505050565b6000813590506120dd81613465565b92915050565b6000815190506120f281613465565b92915050565b600082601f83011261210957600080fd5b8135612119848260208601611fe6565b91505092915050565b6000813590506121318161347c565b92915050565b60008135905061214681613493565b92915050565b60008151905061215b81613493565b92915050565b600082601f83011261217257600080fd5b8135612182848260208601612052565b91505092915050565b600082601f83011261219c57600080fd5b81356121ac848260208601612090565b91505092915050565b6000813590506121c4816134aa565b92915050565b6000602082840312156121dc57600080fd5b60006121ea848285016120ce565b91505092915050565b60006020828403121561220557600080fd5b6000612213848285016120e3565b91505092915050565b6000806040838503121561222f57600080fd5b600061223d858286016120ce565b925050602061224e858286016120ce565b9150509250929050565b60008060006060848603121561226d57600080fd5b600061227b868287016120ce565b935050602061228c868287016120ce565b925050604061229d868287016121b5565b9150509250925092565b600080600080608085870312156122bd57600080fd5b60006122cb878288016120ce565b94505060206122dc878288016120ce565b93505060406122ed878288016121b5565b925050606085013567ffffffffffffffff81111561230a57600080fd5b61231687828801612161565b91505092959194509250565b6000806040838503121561233557600080fd5b6000612343858286016120ce565b925050602083013567ffffffffffffffff81111561236057600080fd5b61236c858286016120f8565b9150509250929050565b6000806040838503121561238957600080fd5b6000612397858286016120ce565b92505060206123a885828601612122565b9150509250929050565b600080604083850312156123c557600080fd5b60006123d3858286016120ce565b92505060206123e4858286016121b5565b9150509250929050565b60006020828403121561240057600080fd5b600061240e84828501612122565b91505092915050565b60006020828403121561242957600080fd5b600061243784828501612137565b91505092915050565b60006020828403121561245257600080fd5b60006124608482850161214c565b91505092915050565b60006020828403121561247b57600080fd5b600082013567ffffffffffffffff81111561249557600080fd5b6124a18482850161218b565b91505092915050565b6000602082840312156124bc57600080fd5b60006124ca848285016121b5565b91505092915050565b6124dc81612d81565b82525050565b6124eb81612d93565b82525050565b60006124fc82612c83565b6125068185612c99565b9350612516818560208601612e04565b61251f81612fd0565b840191505092915050565b600061253582612c8e565b61253f8185612caa565b935061254f818560208601612e04565b61255881612fd0565b840191505092915050565b600061256e82612c8e565b6125788185612cbb565b9350612588818560208601612e04565b80840191505092915050565b600081546125a181612e37565b6125ab8186612cbb565b945060018216600081146125c657600181146125d75761260a565b60ff1983168652818601935061260a565b6125e085612c6e565b60005b83811015612602578154818901526001820191506020810190506125e3565b838801955050505b50505092915050565b6000612620600683612caa565b915061262b82612fe1565b602082019050919050565b6000612643601483612caa565b915061264e8261300a565b602082019050919050565b6000612666603283612caa565b915061267182613033565b604082019050919050565b6000612689602683612caa565b915061269482613082565b604082019050919050565b60006126ac601c83612caa565b91506126b7826130d1565b602082019050919050565b60006126cf602483612caa565b91506126da826130fa565b604082019050919050565b60006126f2601983612caa565b91506126fd82613149565b602082019050919050565b6000612715602c83612caa565b915061272082613172565b604082019050919050565b6000612738603883612caa565b9150612743826131c1565b604082019050919050565b600061275b600d83612caa565b915061276682613210565b602082019050919050565b600061277e602a83612caa565b915061278982613239565b604082019050919050565b60006127a1602983612caa565b91506127ac82613288565b604082019050919050565b60006127c4602083612caa565b91506127cf826132d7565b602082019050919050565b60006127e7602c83612caa565b91506127f282613300565b604082019050919050565b600061280a602083612caa565b91506128158261334f565b602082019050919050565b600061282d602983612caa565b915061283882613378565b604082019050919050565b6000612850602183612caa565b915061285b826133c7565b604082019050919050565b6000612873603183612caa565b915061287e82613416565b604082019050919050565b61289281612deb565b82525050565b60006128a48285612594565b91506128b08284612563565b91508190509392505050565b60006020820190506128d160008301846124d3565b92915050565b60006080820190506128ec60008301876124d3565b6128f960208301866124d3565b6129066040830185612889565b818103606083015261291881846124f1565b905095945050505050565b600060208201905061293860008301846124e2565b92915050565b60006020820190508181036000830152612958818461252a565b905092915050565b6000602082019050818103600083015261297981612613565b9050919050565b6000602082019050818103600083015261299981612636565b9050919050565b600060208201905081810360008301526129b981612659565b9050919050565b600060208201905081810360008301526129d98161267c565b9050919050565b600060208201905081810360008301526129f98161269f565b9050919050565b60006020820190508181036000830152612a19816126c2565b9050919050565b60006020820190508181036000830152612a39816126e5565b9050919050565b60006020820190508181036000830152612a5981612708565b9050919050565b60006020820190508181036000830152612a798161272b565b9050919050565b60006020820190508181036000830152612a998161274e565b9050919050565b60006020820190508181036000830152612ab981612771565b9050919050565b60006020820190508181036000830152612ad981612794565b9050919050565b60006020820190508181036000830152612af9816127b7565b9050919050565b60006020820190508181036000830152612b19816127da565b9050919050565b60006020820190508181036000830152612b39816127fd565b9050919050565b60006020820190508181036000830152612b5981612820565b9050919050565b60006020820190508181036000830152612b7981612843565b9050919050565b60006020820190508181036000830152612b9981612866565b9050919050565b6000602082019050612bb56000830184612889565b92915050565b6000612bc5612bd6565b9050612bd18282612e69565b919050565b6000604051905090565b600067ffffffffffffffff821115612bfb57612bfa612fa1565b5b602082029050602081019050919050565b600067ffffffffffffffff821115612c2757612c26612fa1565b5b612c3082612fd0565b9050602081019050919050565b600067ffffffffffffffff821115612c5857612c57612fa1565b5b612c6182612fd0565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612cd182612deb565b9150612cdc83612deb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612d1157612d10612f14565b5b828201905092915050565b6000612d2782612deb565b9150612d3283612deb565b925082612d4257612d41612f43565b5b828204905092915050565b6000612d5882612deb565b9150612d6383612deb565b925082821015612d7657612d75612f14565b5b828203905092915050565b6000612d8c82612dcb565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612e22578082015181840152602081019050612e07565b83811115612e31576000848401525b50505050565b60006002820490506001821680612e4f57607f821691505b60208210811415612e6357612e62612f72565b5b50919050565b612e7282612fd0565b810181811067ffffffffffffffff82111715612e9157612e90612fa1565b5b80604052505050565b6000612ea582612deb565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415612ed857612ed7612f14565b5b600182019050919050565b6000612eee82612deb565b9150612ef983612deb565b925082612f0957612f08612f43565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f546f6b656e20616c7265616479206d696e746564000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b61346e81612d81565b811461347957600080fd5b50565b61348581612d93565b811461349057600080fd5b50565b61349c81612d9f565b81146134a757600080fd5b50565b6134b381612deb565b81146134be57600080fd5b5056fea2646970667358221220b4433fa5129b35bdf5294bebe39ef8b647bdb6238761a621873eb4ed2b99fddf64736f6c63430008040033

Deployed Bytecode Sourcemap

34909:1579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22705:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23650:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25209:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24732:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36196:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35006:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26099:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36364:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26509:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35221:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23344:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35076:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23074:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2487:94;;;:::i;:::-;;1836:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23819:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25502:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35254:67;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26765:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35921:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35164:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35409:427;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25868:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2736:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22705:305;22807:4;22859:25;22844:40;;;:11;:40;;;;:105;;;;22916:33;22901:48;;;:11;:48;;;;22844:105;:158;;;;22966:36;22990:11;22966:23;:36::i;:::-;22844:158;22824:178;;22705:305;;;:::o;23650:100::-;23704:13;23737:5;23730:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23650:100;:::o;25209:221::-;25285:7;25313:16;25321:7;25313;:16::i;:::-;25305:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25398:15;:24;25414:7;25398:24;;;;;;;;;;;;;;;;;;;;;25391:31;;25209:221;;;:::o;24732:411::-;24813:13;24829:23;24844:7;24829:14;:23::i;:::-;24813:39;;24877:5;24871:11;;:2;:11;;;;24863:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24971:5;24955:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24980:37;24997:5;25004:12;:10;:12::i;:::-;24980:16;:37::i;:::-;24955:62;24933:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25114:21;25123:2;25127:7;25114:8;:21::i;:::-;24732:411;;;:::o;36196:85::-;2067:12;:10;:12::i;:::-;2056:23;;:7;:5;:7::i;:::-;:23;;;2048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36266:7:::1;36257:6;;:16;;;;;;;;;;;;;;;;;;36196:85:::0;:::o;35006:27::-;;;;:::o;26099:339::-;26294:41;26313:12;:10;:12::i;:::-;26327:7;26294:18;:41::i;:::-;26286:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26402:28;26412:4;26418:2;26422:7;26402:9;:28::i;:::-;26099:339;;;:::o;36364:121::-;2067:12;:10;:12::i;:::-;2056:23;;:7;:5;:7::i;:::-;:23;;;2048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36463:14:::1;36447:13;:30;;;;;;;;;;;;:::i;:::-;;36364:121:::0;:::o;26509:185::-;26647:39;26664:4;26670:2;26674:7;26647:39;;;;;;;;;;;;:16;:39::i;:::-;26509:185;;;:::o;35221:26::-;;;;;;;;;;;;;:::o;23344:239::-;23416:7;23436:13;23452:7;:16;23460:7;23452:16;;;;;;;;;;;;;;;;;;;;;23436:32;;23504:1;23487:19;;:5;:19;;;;23479:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23570:5;23563:12;;;23344:239;;;:::o;35076:40::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23074:208::-;23146:7;23191:1;23174:19;;:5;:19;;;;23166:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23258:9;:16;23268:5;23258:16;;;;;;;;;;;;;;;;23251:23;;23074:208;;;:::o;2487:94::-;2067:12;:10;:12::i;:::-;2056:23;;:7;:5;:7::i;:::-;:23;;;2048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2552:21:::1;2570:1;2552:9;:21::i;:::-;2487:94::o:0;1836:87::-;1882:7;1909:6;;;;;;;;;;;1902:13;;1836:87;:::o;23819:104::-;23875:13;23908:7;23901:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23819:104;:::o;25502:295::-;25617:12;:10;:12::i;:::-;25605:24;;:8;:24;;;;25597:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25717:8;25672:18;:32;25691:12;:10;:12::i;:::-;25672:32;;;;;;;;;;;;;;;:42;25705:8;25672:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25770:8;25741:48;;25756:12;:10;:12::i;:::-;25741:48;;;25780:8;25741:48;;;;;;:::i;:::-;;;;;;;;25502:295;;:::o;35254:67::-;;;;;;;;;;;;;:::o;26765:328::-;26940:41;26959:12;:10;:12::i;:::-;26973:7;26940:18;:41::i;:::-;26932:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27046:39;27060:4;27066:2;27070:7;27079:5;27046:13;:39::i;:::-;26765:328;;;;:::o;35921:174::-;35987:13;36044;36059:26;36076:8;36059:16;:26::i;:::-;36027:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36013:74;;35921:174;;;:::o;35164:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35409:427::-;35488:6;;;;;;;;;;;35487:7;35479:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;35521:6;35516:313;35537:8;:15;35533:1;:19;35516:313;;;35583:20;35591:8;35600:1;35591:11;;;;;;;;;;;;;;;;;;;;;;35583:7;:20::i;:::-;35582:21;35574:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:2;35651:43;;35659:7;;;;;;;;;;;35651:24;;;35676:8;35685:1;35676:11;;;;;;;;;;;;;;;;;;;;;;35651:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;35643:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35727:22;35733:2;35737:8;35746:1;35737:11;;;;;;;;;;;;;;;;;;;;;;35727:5;:22::i;:::-;35774:8;35783:1;35774:11;;;;;;;;;;;;;;;;;;;;;;35769:17;;;;;;;;;;35816:1;35801:11;;:16;;;;;;;:::i;:::-;;;;;;;;35554:3;;;;;:::i;:::-;;;;35516:313;;;;35409:427;;:::o;25868:164::-;25965:4;25989:18;:25;26008:5;25989:25;;;;;;;;;;;;;;;:35;26015:8;25989:35;;;;;;;;;;;;;;;;;;;;;;;;;25982:42;;25868:164;;;;:::o;2736:192::-;2067:12;:10;:12::i;:::-;2056:23;;:7;:5;:7::i;:::-;:23;;;2048:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2845:1:::1;2825:22;;:8;:22;;;;2817:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2901:19;2911:8;2901:9;:19::i;:::-;2736:192:::0;:::o;21209:157::-;21294:4;21333:25;21318:40;;;:11;:40;;;;21311:47;;21209:157;;;:::o;28603:127::-;28668:4;28720:1;28692:30;;:7;:16;28700:7;28692:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28685:37;;28603:127;;;:::o;624:98::-;677:7;704:10;697:17;;624:98;:::o;32585:174::-;32687:2;32660:15;:24;32676:7;32660:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32743:7;32739:2;32705:46;;32714:23;32729:7;32714:14;:23::i;:::-;32705:46;;;;;;;;;;;;32585:174;;:::o;28897:348::-;28990:4;29015:16;29023:7;29015;:16::i;:::-;29007:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29091:13;29107:23;29122:7;29107:14;:23::i;:::-;29091:39;;29160:5;29149:16;;:7;:16;;;:51;;;;29193:7;29169:31;;:20;29181:7;29169:11;:20::i;:::-;:31;;;29149:51;:87;;;;29204:32;29221:5;29228:7;29204:16;:32::i;:::-;29149:87;29141:96;;;28897:348;;;;:::o;31889:578::-;32048:4;32021:31;;:23;32036:7;32021:14;:23::i;:::-;:31;;;32013:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32131:1;32117:16;;:2;:16;;;;32109:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32187:39;32208:4;32214:2;32218:7;32187:20;:39::i;:::-;32291:29;32308:1;32312:7;32291:8;:29::i;:::-;32352:1;32333:9;:15;32343:4;32333:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32381:1;32364:9;:13;32374:2;32364:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32412:2;32393:7;:16;32401:7;32393:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32451:7;32447:2;32432:27;;32441:4;32432:27;;;;;;;;;;;;31889:578;;;:::o;2936:173::-;2992:16;3011:6;;;;;;;;;;;2992:25;;3037:8;3028:6;;:17;;;;;;;;;;;;;;;;;;3092:8;3061:40;;3082:8;3061:40;;;;;;;;;;;;2936:173;;:::o;27975:315::-;28132:28;28142:4;28148:2;28152:7;28132:9;:28::i;:::-;28179:48;28202:4;28208:2;28212:7;28221:5;28179:22;:48::i;:::-;28171:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27975:315;;;;:::o;18652:723::-;18708:13;18938:1;18929:5;:10;18925:53;;;18956:10;;;;;;;;;;;;;;;;;;;;;18925:53;18988:12;19003:5;18988:20;;19019:14;19044:78;19059:1;19051:4;:9;19044:78;;19077:8;;;;;:::i;:::-;;;;19108:2;19100:10;;;;;:::i;:::-;;;19044:78;;;19132:19;19164:6;19154:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19132:39;;19182:154;19198:1;19189:5;:10;19182:154;;19226:1;19216:11;;;;;:::i;:::-;;;19293:2;19285:5;:10;;;;:::i;:::-;19272:2;:24;;;;:::i;:::-;19259:39;;19242:6;19249;19242:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;19322:2;19313:11;;;;;:::i;:::-;;;19182:154;;;19360:6;19346:21;;;;;18652:723;;;;:::o;30581:382::-;30675:1;30661:16;;:2;:16;;;;30653:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30734:16;30742:7;30734;:16::i;:::-;30733:17;30725:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30796:45;30825:1;30829:2;30833:7;30796:20;:45::i;:::-;30871:1;30854:9;:13;30864:2;30854:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30902:2;30883:7;:16;30891:7;30883:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30947:7;30943:2;30922:33;;30939:1;30922:33;;;;;;;;;;;;30581:382;;:::o;34699:126::-;;;;:::o;33324:803::-;33479:4;33500:15;:2;:13;;;:15::i;:::-;33496:624;;;33552:2;33536:36;;;33573:12;:10;:12::i;:::-;33587:4;33593:7;33602:5;33536:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33532:533;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33799:1;33782:6;:13;:18;33778:272;;;33825:60;;;;;;;;;;:::i;:::-;;;;;;;;33778:272;34000:6;33994:13;33985:6;33981:2;33977:15;33970:38;33532:533;33669:45;;;33659:55;;;:6;:55;;;;33652:62;;;;;33496:624;34104:4;34097:11;;33324:803;;;;;;;:::o;11227:387::-;11287:4;11495:12;11562:7;11550:20;11542:28;;11605:1;11598:4;:8;11591:15;;;11227:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:345::-;1112:5;1137:66;1153:49;1195:6;1153:49;:::i;:::-;1137:66;:::i;:::-;1128:75;;1226:6;1219:5;1212:21;1264:4;1257:5;1253:16;1302:3;1293:6;1288:3;1284:16;1281:25;1278:2;;;1319:1;1316;1309:12;1278:2;1332:41;1366:6;1361:3;1356;1332:41;:::i;:::-;1118:261;;;;;;:::o;1385:139::-;1431:5;1469:6;1456:20;1447:29;;1485:33;1512:5;1485:33;:::i;:::-;1437:87;;;;:::o;1530:143::-;1587:5;1618:6;1612:13;1603:22;;1634:33;1661:5;1634:33;:::i;:::-;1593:80;;;;:::o;1696:303::-;1767:5;1816:3;1809:4;1801:6;1797:17;1793:27;1783:2;;1834:1;1831;1824:12;1783:2;1874:6;1861:20;1899:94;1989:3;1981:6;1974:4;1966:6;1962:17;1899:94;:::i;:::-;1890:103;;1773:226;;;;;:::o;2005:133::-;2048:5;2086:6;2073:20;2064:29;;2102:30;2126:5;2102:30;:::i;:::-;2054:84;;;;:::o;2144:137::-;2189:5;2227:6;2214:20;2205:29;;2243:32;2269:5;2243:32;:::i;:::-;2195:86;;;;:::o;2287:141::-;2343:5;2374:6;2368:13;2359:22;;2390:32;2416:5;2390:32;:::i;:::-;2349:79;;;;:::o;2447:271::-;2502:5;2551:3;2544:4;2536:6;2532:17;2528:27;2518:2;;2569:1;2566;2559:12;2518:2;2609:6;2596:20;2634:78;2708:3;2700:6;2693:4;2685:6;2681:17;2634:78;:::i;:::-;2625:87;;2508:210;;;;;:::o;2738:273::-;2794:5;2843:3;2836:4;2828:6;2824:17;2820:27;2810:2;;2861:1;2858;2851:12;2810:2;2901:6;2888:20;2926:79;3001:3;2993:6;2986:4;2978:6;2974:17;2926:79;:::i;:::-;2917:88;;2800:211;;;;;:::o;3017:139::-;3063:5;3101:6;3088:20;3079:29;;3117:33;3144:5;3117:33;:::i;:::-;3069:87;;;;:::o;3162:262::-;3221:6;3270:2;3258:9;3249:7;3245:23;3241:32;3238:2;;;3286:1;3283;3276:12;3238:2;3329:1;3354:53;3399:7;3390:6;3379:9;3375:22;3354:53;:::i;:::-;3344:63;;3300:117;3228:196;;;;:::o;3430:284::-;3500:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:2;;;3565:1;3562;3555:12;3517:2;3608:1;3633:64;3689:7;3680:6;3669:9;3665:22;3633:64;:::i;:::-;3623:74;;3579:128;3507:207;;;;:::o;3720:407::-;3788:6;3796;3845:2;3833:9;3824:7;3820:23;3816:32;3813:2;;;3861:1;3858;3851:12;3813:2;3904:1;3929:53;3974:7;3965:6;3954:9;3950:22;3929:53;:::i;:::-;3919:63;;3875:117;4031:2;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4002:118;3803:324;;;;;:::o;4133:552::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:2;;;4291:1;4288;4281:12;4243:2;4334:1;4359:53;4404:7;4395:6;4384:9;4380:22;4359:53;:::i;:::-;4349:63;;4305:117;4461:2;4487:53;4532:7;4523:6;4512:9;4508:22;4487:53;:::i;:::-;4477:63;;4432:118;4589:2;4615:53;4660:7;4651:6;4640:9;4636:22;4615:53;:::i;:::-;4605:63;;4560:118;4233:452;;;;;:::o;4691:809::-;4786:6;4794;4802;4810;4859:3;4847:9;4838:7;4834:23;4830:33;4827:2;;;4876:1;4873;4866:12;4827:2;4919:1;4944:53;4989:7;4980:6;4969:9;4965:22;4944:53;:::i;:::-;4934:63;;4890:117;5046:2;5072:53;5117:7;5108:6;5097:9;5093:22;5072:53;:::i;:::-;5062:63;;5017:118;5174:2;5200:53;5245:7;5236:6;5225:9;5221:22;5200:53;:::i;:::-;5190:63;;5145:118;5330:2;5319:9;5315:18;5302:32;5361:18;5353:6;5350:30;5347:2;;;5393:1;5390;5383:12;5347:2;5421:62;5475:7;5466:6;5455:9;5451:22;5421:62;:::i;:::-;5411:72;;5273:220;4817:683;;;;;;;:::o;5506:550::-;5599:6;5607;5656:2;5644:9;5635:7;5631:23;5627:32;5624:2;;;5672:1;5669;5662:12;5624:2;5715:1;5740:53;5785:7;5776:6;5765:9;5761:22;5740:53;:::i;:::-;5730:63;;5686:117;5870:2;5859:9;5855:18;5842:32;5901:18;5893:6;5890:30;5887:2;;;5933:1;5930;5923:12;5887:2;5961:78;6031:7;6022:6;6011:9;6007:22;5961:78;:::i;:::-;5951:88;;5813:236;5614:442;;;;;:::o;6062:401::-;6127:6;6135;6184:2;6172:9;6163:7;6159:23;6155:32;6152:2;;;6200:1;6197;6190:12;6152:2;6243:1;6268:53;6313:7;6304:6;6293:9;6289:22;6268:53;:::i;:::-;6258:63;;6214:117;6370:2;6396:50;6438:7;6429:6;6418:9;6414:22;6396:50;:::i;:::-;6386:60;;6341:115;6142:321;;;;;:::o;6469:407::-;6537:6;6545;6594:2;6582:9;6573:7;6569:23;6565:32;6562:2;;;6610:1;6607;6600:12;6562:2;6653:1;6678:53;6723:7;6714:6;6703:9;6699:22;6678:53;:::i;:::-;6668:63;;6624:117;6780:2;6806:53;6851:7;6842:6;6831:9;6827:22;6806:53;:::i;:::-;6796:63;;6751:118;6552:324;;;;;:::o;6882:256::-;6938:6;6987:2;6975:9;6966:7;6962:23;6958:32;6955:2;;;7003:1;7000;6993:12;6955:2;7046:1;7071:50;7113:7;7104:6;7093:9;7089:22;7071:50;:::i;:::-;7061:60;;7017:114;6945:193;;;;:::o;7144:260::-;7202:6;7251:2;7239:9;7230:7;7226:23;7222:32;7219:2;;;7267:1;7264;7257:12;7219:2;7310:1;7335:52;7379:7;7370:6;7359:9;7355:22;7335:52;:::i;:::-;7325:62;;7281:116;7209:195;;;;:::o;7410:282::-;7479:6;7528:2;7516:9;7507:7;7503:23;7499:32;7496:2;;;7544:1;7541;7534:12;7496:2;7587:1;7612:63;7667:7;7658:6;7647:9;7643:22;7612:63;:::i;:::-;7602:73;;7558:127;7486:206;;;;:::o;7698:375::-;7767:6;7816:2;7804:9;7795:7;7791:23;7787:32;7784:2;;;7832:1;7829;7822:12;7784:2;7903:1;7892:9;7888:17;7875:31;7933:18;7925:6;7922:30;7919:2;;;7965:1;7962;7955:12;7919:2;7993:63;8048:7;8039:6;8028:9;8024:22;7993:63;:::i;:::-;7983:73;;7846:220;7774:299;;;;:::o;8079:262::-;8138:6;8187:2;8175:9;8166:7;8162:23;8158:32;8155:2;;;8203:1;8200;8193:12;8155:2;8246:1;8271:53;8316:7;8307:6;8296:9;8292:22;8271:53;:::i;:::-;8261:63;;8217:117;8145:196;;;;:::o;8347:118::-;8434:24;8452:5;8434:24;:::i;:::-;8429:3;8422:37;8412:53;;:::o;8471:109::-;8552:21;8567:5;8552:21;:::i;:::-;8547:3;8540:34;8530:50;;:::o;8586:360::-;8672:3;8700:38;8732:5;8700:38;:::i;:::-;8754:70;8817:6;8812:3;8754:70;:::i;:::-;8747:77;;8833:52;8878:6;8873:3;8866:4;8859:5;8855:16;8833:52;:::i;:::-;8910:29;8932:6;8910:29;:::i;:::-;8905:3;8901:39;8894:46;;8676:270;;;;;:::o;8952:364::-;9040:3;9068:39;9101:5;9068:39;:::i;:::-;9123:71;9187:6;9182:3;9123:71;:::i;:::-;9116:78;;9203:52;9248:6;9243:3;9236:4;9229:5;9225:16;9203:52;:::i;:::-;9280:29;9302:6;9280:29;:::i;:::-;9275:3;9271:39;9264:46;;9044:272;;;;;:::o;9322:377::-;9428:3;9456:39;9489:5;9456:39;:::i;:::-;9511:89;9593:6;9588:3;9511:89;:::i;:::-;9504:96;;9609:52;9654:6;9649:3;9642:4;9635:5;9631:16;9609:52;:::i;:::-;9686:6;9681:3;9677:16;9670:23;;9432:267;;;;;:::o;9729:845::-;9832:3;9869:5;9863:12;9898:36;9924:9;9898:36;:::i;:::-;9950:89;10032:6;10027:3;9950:89;:::i;:::-;9943:96;;10070:1;10059:9;10055:17;10086:1;10081:137;;;;10232:1;10227:341;;;;10048:520;;10081:137;10165:4;10161:9;10150;10146:25;10141:3;10134:38;10201:6;10196:3;10192:16;10185:23;;10081:137;;10227:341;10294:38;10326:5;10294:38;:::i;:::-;10354:1;10368:154;10382:6;10379:1;10376:13;10368:154;;;10456:7;10450:14;10446:1;10441:3;10437:11;10430:35;10506:1;10497:7;10493:15;10482:26;;10404:4;10401:1;10397:12;10392:17;;10368:154;;;10551:6;10546:3;10542:16;10535:23;;10234:334;;10048:520;;9836:738;;;;;;:::o;10580:365::-;10722:3;10743:66;10807:1;10802:3;10743:66;:::i;:::-;10736:73;;10818:93;10907:3;10818:93;:::i;:::-;10936:2;10931:3;10927:12;10920:19;;10726:219;;;:::o;10951:366::-;11093:3;11114:67;11178:2;11173:3;11114:67;:::i;:::-;11107:74;;11190:93;11279:3;11190:93;:::i;:::-;11308:2;11303:3;11299:12;11292:19;;11097:220;;;:::o;11323:366::-;11465:3;11486:67;11550:2;11545:3;11486:67;:::i;:::-;11479:74;;11562:93;11651:3;11562:93;:::i;:::-;11680:2;11675:3;11671:12;11664:19;;11469:220;;;:::o;11695:366::-;11837:3;11858:67;11922:2;11917:3;11858:67;:::i;:::-;11851:74;;11934:93;12023:3;11934:93;:::i;:::-;12052:2;12047:3;12043:12;12036:19;;11841:220;;;:::o;12067:366::-;12209:3;12230:67;12294:2;12289:3;12230:67;:::i;:::-;12223:74;;12306:93;12395:3;12306:93;:::i;:::-;12424:2;12419:3;12415:12;12408:19;;12213:220;;;:::o;12439:366::-;12581:3;12602:67;12666:2;12661:3;12602:67;:::i;:::-;12595:74;;12678:93;12767:3;12678:93;:::i;:::-;12796:2;12791:3;12787:12;12780:19;;12585:220;;;:::o;12811:366::-;12953:3;12974:67;13038:2;13033:3;12974:67;:::i;:::-;12967:74;;13050:93;13139:3;13050:93;:::i;:::-;13168:2;13163:3;13159:12;13152:19;;12957:220;;;:::o;13183:366::-;13325:3;13346:67;13410:2;13405:3;13346:67;:::i;:::-;13339:74;;13422:93;13511:3;13422:93;:::i;:::-;13540:2;13535:3;13531:12;13524:19;;13329:220;;;:::o;13555:366::-;13697:3;13718:67;13782:2;13777:3;13718:67;:::i;:::-;13711:74;;13794:93;13883:3;13794:93;:::i;:::-;13912:2;13907:3;13903:12;13896:19;;13701:220;;;:::o;13927:366::-;14069:3;14090:67;14154:2;14149:3;14090:67;:::i;:::-;14083:74;;14166:93;14255:3;14166:93;:::i;:::-;14284:2;14279:3;14275:12;14268:19;;14073:220;;;:::o;14299:366::-;14441:3;14462:67;14526:2;14521:3;14462:67;:::i;:::-;14455:74;;14538:93;14627:3;14538:93;:::i;:::-;14656:2;14651:3;14647:12;14640:19;;14445:220;;;:::o;14671:366::-;14813:3;14834:67;14898:2;14893:3;14834:67;:::i;:::-;14827:74;;14910:93;14999:3;14910:93;:::i;:::-;15028:2;15023:3;15019:12;15012:19;;14817:220;;;:::o;15043:366::-;15185:3;15206:67;15270:2;15265:3;15206:67;:::i;:::-;15199:74;;15282:93;15371:3;15282:93;:::i;:::-;15400:2;15395:3;15391:12;15384:19;;15189:220;;;:::o;15415:366::-;15557:3;15578:67;15642:2;15637:3;15578:67;:::i;:::-;15571:74;;15654:93;15743:3;15654:93;:::i;:::-;15772:2;15767:3;15763:12;15756:19;;15561:220;;;:::o;15787:366::-;15929:3;15950:67;16014:2;16009:3;15950:67;:::i;:::-;15943:74;;16026:93;16115:3;16026:93;:::i;:::-;16144:2;16139:3;16135:12;16128:19;;15933:220;;;:::o;16159:366::-;16301:3;16322:67;16386:2;16381:3;16322:67;:::i;:::-;16315:74;;16398:93;16487:3;16398:93;:::i;:::-;16516:2;16511:3;16507:12;16500:19;;16305:220;;;:::o;16531:366::-;16673:3;16694:67;16758:2;16753:3;16694:67;:::i;:::-;16687:74;;16770:93;16859:3;16770:93;:::i;:::-;16888:2;16883:3;16879:12;16872:19;;16677:220;;;:::o;16903:366::-;17045:3;17066:67;17130:2;17125:3;17066:67;:::i;:::-;17059:74;;17142:93;17231:3;17142:93;:::i;:::-;17260:2;17255:3;17251:12;17244:19;;17049:220;;;:::o;17275:118::-;17362:24;17380:5;17362:24;:::i;:::-;17357:3;17350:37;17340:53;;:::o;17399:429::-;17576:3;17598:92;17686:3;17677:6;17598:92;:::i;:::-;17591:99;;17707:95;17798:3;17789:6;17707:95;:::i;:::-;17700:102;;17819:3;17812:10;;17580:248;;;;;:::o;17834:222::-;17927:4;17965:2;17954:9;17950:18;17942:26;;17978:71;18046:1;18035:9;18031:17;18022:6;17978:71;:::i;:::-;17932:124;;;;:::o;18062:640::-;18257:4;18295:3;18284:9;18280:19;18272:27;;18309:71;18377:1;18366:9;18362:17;18353:6;18309:71;:::i;:::-;18390:72;18458:2;18447:9;18443:18;18434:6;18390:72;:::i;:::-;18472;18540:2;18529:9;18525:18;18516:6;18472:72;:::i;:::-;18591:9;18585:4;18581:20;18576:2;18565:9;18561:18;18554:48;18619:76;18690:4;18681:6;18619:76;:::i;:::-;18611:84;;18262:440;;;;;;;:::o;18708:210::-;18795:4;18833:2;18822:9;18818:18;18810:26;;18846:65;18908:1;18897:9;18893:17;18884:6;18846:65;:::i;:::-;18800:118;;;;:::o;18924:313::-;19037:4;19075:2;19064:9;19060:18;19052:26;;19124:9;19118:4;19114:20;19110:1;19099:9;19095:17;19088:47;19152:78;19225:4;19216:6;19152:78;:::i;:::-;19144:86;;19042:195;;;;:::o;19243:419::-;19409:4;19447:2;19436:9;19432:18;19424:26;;19496:9;19490:4;19486:20;19482:1;19471:9;19467:17;19460:47;19524:131;19650:4;19524:131;:::i;:::-;19516:139;;19414:248;;;:::o;19668:419::-;19834:4;19872:2;19861:9;19857:18;19849:26;;19921:9;19915:4;19911:20;19907:1;19896:9;19892:17;19885:47;19949:131;20075:4;19949:131;:::i;:::-;19941:139;;19839:248;;;:::o;20093:419::-;20259:4;20297:2;20286:9;20282:18;20274:26;;20346:9;20340:4;20336:20;20332:1;20321:9;20317:17;20310:47;20374:131;20500:4;20374:131;:::i;:::-;20366:139;;20264:248;;;:::o;20518:419::-;20684:4;20722:2;20711:9;20707:18;20699:26;;20771:9;20765:4;20761:20;20757:1;20746:9;20742:17;20735:47;20799:131;20925:4;20799:131;:::i;:::-;20791:139;;20689:248;;;:::o;20943:419::-;21109:4;21147:2;21136:9;21132:18;21124:26;;21196:9;21190:4;21186:20;21182:1;21171:9;21167:17;21160:47;21224:131;21350:4;21224:131;:::i;:::-;21216:139;;21114:248;;;:::o;21368:419::-;21534:4;21572:2;21561:9;21557:18;21549:26;;21621:9;21615:4;21611:20;21607:1;21596:9;21592:17;21585:47;21649:131;21775:4;21649:131;:::i;:::-;21641:139;;21539:248;;;:::o;21793:419::-;21959:4;21997:2;21986:9;21982:18;21974:26;;22046:9;22040:4;22036:20;22032:1;22021:9;22017:17;22010:47;22074:131;22200:4;22074:131;:::i;:::-;22066:139;;21964:248;;;:::o;22218:419::-;22384:4;22422:2;22411:9;22407:18;22399:26;;22471:9;22465:4;22461:20;22457:1;22446:9;22442:17;22435:47;22499:131;22625:4;22499:131;:::i;:::-;22491:139;;22389:248;;;:::o;22643:419::-;22809:4;22847:2;22836:9;22832:18;22824:26;;22896:9;22890:4;22886:20;22882:1;22871:9;22867:17;22860:47;22924:131;23050:4;22924:131;:::i;:::-;22916:139;;22814:248;;;:::o;23068:419::-;23234:4;23272:2;23261:9;23257:18;23249:26;;23321:9;23315:4;23311:20;23307:1;23296:9;23292:17;23285:47;23349:131;23475:4;23349:131;:::i;:::-;23341:139;;23239:248;;;:::o;23493:419::-;23659:4;23697:2;23686:9;23682:18;23674:26;;23746:9;23740:4;23736:20;23732:1;23721:9;23717:17;23710:47;23774:131;23900:4;23774:131;:::i;:::-;23766:139;;23664:248;;;:::o;23918:419::-;24084:4;24122:2;24111:9;24107:18;24099:26;;24171:9;24165:4;24161:20;24157:1;24146:9;24142:17;24135:47;24199:131;24325:4;24199:131;:::i;:::-;24191:139;;24089:248;;;:::o;24343:419::-;24509:4;24547:2;24536:9;24532:18;24524:26;;24596:9;24590:4;24586:20;24582:1;24571:9;24567:17;24560:47;24624:131;24750:4;24624:131;:::i;:::-;24616:139;;24514:248;;;:::o;24768:419::-;24934:4;24972:2;24961:9;24957:18;24949:26;;25021:9;25015:4;25011:20;25007:1;24996:9;24992:17;24985:47;25049:131;25175:4;25049:131;:::i;:::-;25041:139;;24939:248;;;:::o;25193:419::-;25359:4;25397:2;25386:9;25382:18;25374:26;;25446:9;25440:4;25436:20;25432:1;25421:9;25417:17;25410:47;25474:131;25600:4;25474:131;:::i;:::-;25466:139;;25364:248;;;:::o;25618:419::-;25784:4;25822:2;25811:9;25807:18;25799:26;;25871:9;25865:4;25861:20;25857:1;25846:9;25842:17;25835:47;25899:131;26025:4;25899:131;:::i;:::-;25891:139;;25789:248;;;:::o;26043:419::-;26209:4;26247:2;26236:9;26232:18;26224:26;;26296:9;26290:4;26286:20;26282:1;26271:9;26267:17;26260:47;26324:131;26450:4;26324:131;:::i;:::-;26316:139;;26214:248;;;:::o;26468:419::-;26634:4;26672:2;26661:9;26657:18;26649:26;;26721:9;26715:4;26711:20;26707:1;26696:9;26692:17;26685:47;26749:131;26875:4;26749:131;:::i;:::-;26741:139;;26639:248;;;:::o;26893:222::-;26986:4;27024:2;27013:9;27009:18;27001:26;;27037:71;27105:1;27094:9;27090:17;27081:6;27037:71;:::i;:::-;26991:124;;;;:::o;27121:129::-;27155:6;27182:20;;:::i;:::-;27172:30;;27211:33;27239:4;27231:6;27211:33;:::i;:::-;27162:88;;;:::o;27256:75::-;27289:6;27322:2;27316:9;27306:19;;27296:35;:::o;27337:311::-;27414:4;27504:18;27496:6;27493:30;27490:2;;;27526:18;;:::i;:::-;27490:2;27576:4;27568:6;27564:17;27556:25;;27636:4;27630;27626:15;27618:23;;27419:229;;;:::o;27654:307::-;27715:4;27805:18;27797:6;27794:30;27791:2;;;27827:18;;:::i;:::-;27791:2;27865:29;27887:6;27865:29;:::i;:::-;27857:37;;27949:4;27943;27939:15;27931:23;;27720:241;;;:::o;27967:308::-;28029:4;28119:18;28111:6;28108:30;28105:2;;;28141:18;;:::i;:::-;28105:2;28179:29;28201:6;28179:29;:::i;:::-;28171:37;;28263:4;28257;28253:15;28245:23;;28034:241;;;:::o;28281:141::-;28330:4;28353:3;28345:11;;28376:3;28373:1;28366:14;28410:4;28407:1;28397:18;28389:26;;28335:87;;;:::o;28428:98::-;28479:6;28513:5;28507:12;28497:22;;28486:40;;;:::o;28532:99::-;28584:6;28618:5;28612:12;28602:22;;28591:40;;;:::o;28637:168::-;28720:11;28754:6;28749:3;28742:19;28794:4;28789:3;28785:14;28770:29;;28732:73;;;;:::o;28811:169::-;28895:11;28929:6;28924:3;28917:19;28969:4;28964:3;28960:14;28945:29;;28907:73;;;;:::o;28986:148::-;29088:11;29125:3;29110:18;;29100:34;;;;:::o;29140:305::-;29180:3;29199:20;29217:1;29199:20;:::i;:::-;29194:25;;29233:20;29251:1;29233:20;:::i;:::-;29228:25;;29387:1;29319:66;29315:74;29312:1;29309:81;29306:2;;;29393:18;;:::i;:::-;29306:2;29437:1;29434;29430:9;29423:16;;29184:261;;;;:::o;29451:185::-;29491:1;29508:20;29526:1;29508:20;:::i;:::-;29503:25;;29542:20;29560:1;29542:20;:::i;:::-;29537:25;;29581:1;29571:2;;29586:18;;:::i;:::-;29571:2;29628:1;29625;29621:9;29616:14;;29493:143;;;;:::o;29642:191::-;29682:4;29702:20;29720:1;29702:20;:::i;:::-;29697:25;;29736:20;29754:1;29736:20;:::i;:::-;29731:25;;29775:1;29772;29769:8;29766:2;;;29780:18;;:::i;:::-;29766:2;29825:1;29822;29818:9;29810:17;;29687:146;;;;:::o;29839:96::-;29876:7;29905:24;29923:5;29905:24;:::i;:::-;29894:35;;29884:51;;;:::o;29941:90::-;29975:7;30018:5;30011:13;30004:21;29993:32;;29983:48;;;:::o;30037:149::-;30073:7;30113:66;30106:5;30102:78;30091:89;;30081:105;;;:::o;30192:126::-;30229:7;30269:42;30262:5;30258:54;30247:65;;30237:81;;;:::o;30324:77::-;30361:7;30390:5;30379:16;;30369:32;;;:::o;30407:154::-;30491:6;30486:3;30481;30468:30;30553:1;30544:6;30539:3;30535:16;30528:27;30458:103;;;:::o;30567:307::-;30635:1;30645:113;30659:6;30656:1;30653:13;30645:113;;;30744:1;30739:3;30735:11;30729:18;30725:1;30720:3;30716:11;30709:39;30681:2;30678:1;30674:10;30669:15;;30645:113;;;30776:6;30773:1;30770:13;30767:2;;;30856:1;30847:6;30842:3;30838:16;30831:27;30767:2;30616:258;;;;:::o;30880:320::-;30924:6;30961:1;30955:4;30951:12;30941:22;;31008:1;31002:4;30998:12;31029:18;31019:2;;31085:4;31077:6;31073:17;31063:27;;31019:2;31147;31139:6;31136:14;31116:18;31113:38;31110:2;;;31166:18;;:::i;:::-;31110:2;30931:269;;;;:::o;31206:281::-;31289:27;31311:4;31289:27;:::i;:::-;31281:6;31277:40;31419:6;31407:10;31404:22;31383:18;31371:10;31368:34;31365:62;31362:2;;;31430:18;;:::i;:::-;31362:2;31470:10;31466:2;31459:22;31249:238;;;:::o;31493:233::-;31532:3;31555:24;31573:5;31555:24;:::i;:::-;31546:33;;31601:66;31594:5;31591:77;31588:2;;;31671:18;;:::i;:::-;31588:2;31718:1;31711:5;31707:13;31700:20;;31536:190;;;:::o;31732:176::-;31764:1;31781:20;31799:1;31781:20;:::i;:::-;31776:25;;31815:20;31833:1;31815:20;:::i;:::-;31810:25;;31854:1;31844:2;;31859:18;;:::i;:::-;31844:2;31900:1;31897;31893:9;31888:14;;31766:142;;;;:::o;31914:180::-;31962:77;31959:1;31952:88;32059:4;32056:1;32049:15;32083:4;32080:1;32073:15;32100:180;32148:77;32145:1;32138:88;32245:4;32242:1;32235:15;32269:4;32266:1;32259:15;32286:180;32334:77;32331:1;32324:88;32431:4;32428:1;32421:15;32455:4;32452:1;32445:15;32472:180;32520:77;32517:1;32510:88;32617:4;32614:1;32607:15;32641:4;32638:1;32631:15;32658:102;32699:6;32750:2;32746:7;32741:2;32734:5;32730:14;32726:28;32716:38;;32706:54;;;:::o;32766:156::-;32906:8;32902:1;32894:6;32890:14;32883:32;32872:50;:::o;32928:170::-;33068:22;33064:1;33056:6;33052:14;33045:46;33034:64;:::o;33104:237::-;33244:34;33240:1;33232:6;33228:14;33221:58;33313:20;33308:2;33300:6;33296:15;33289:45;33210:131;:::o;33347:225::-;33487:34;33483:1;33475:6;33471:14;33464:58;33556:8;33551:2;33543:6;33539:15;33532:33;33453:119;:::o;33578:178::-;33718:30;33714:1;33706:6;33702:14;33695:54;33684:72;:::o;33762:223::-;33902:34;33898:1;33890:6;33886:14;33879:58;33971:6;33966:2;33958:6;33954:15;33947:31;33868:117;:::o;33991:175::-;34131:27;34127:1;34119:6;34115:14;34108:51;34097:69;:::o;34172:231::-;34312:34;34308:1;34300:6;34296:14;34289:58;34381:14;34376:2;34368:6;34364:15;34357:39;34278:125;:::o;34409:243::-;34549:34;34545:1;34537:6;34533:14;34526:58;34618:26;34613:2;34605:6;34601:15;34594:51;34515:137;:::o;34658:163::-;34798:15;34794:1;34786:6;34782:14;34775:39;34764:57;:::o;34827:229::-;34967:34;34963:1;34955:6;34951:14;34944:58;35036:12;35031:2;35023:6;35019:15;35012:37;34933:123;:::o;35062:228::-;35202:34;35198:1;35190:6;35186:14;35179:58;35271:11;35266:2;35258:6;35254:15;35247:36;35168:122;:::o;35296:182::-;35436:34;35432:1;35424:6;35420:14;35413:58;35402:76;:::o;35484:231::-;35624:34;35620:1;35612:6;35608:14;35601:58;35693:14;35688:2;35680:6;35676:15;35669:39;35590:125;:::o;35721:182::-;35861:34;35857:1;35849:6;35845:14;35838:58;35827:76;:::o;35909:228::-;36049:34;36045:1;36037:6;36033:14;36026:58;36118:11;36113:2;36105:6;36101:15;36094:36;36015:122;:::o;36143:220::-;36283:34;36279:1;36271:6;36267:14;36260:58;36352:3;36347:2;36339:6;36335:15;36328:28;36249:114;:::o;36369:236::-;36509:34;36505:1;36497:6;36493:14;36486:58;36578:19;36573:2;36565:6;36561:15;36554:44;36475:130;:::o;36611:122::-;36684:24;36702:5;36684:24;:::i;:::-;36677:5;36674:35;36664:2;;36723:1;36720;36713:12;36664:2;36654:79;:::o;36739:116::-;36809:21;36824:5;36809:21;:::i;:::-;36802:5;36799:32;36789:2;;36845:1;36842;36835:12;36789:2;36779:76;:::o;36861:120::-;36933:23;36950:5;36933:23;:::i;:::-;36926:5;36923:34;36913:2;;36971:1;36968;36961:12;36913:2;36903:78;:::o;36987:122::-;37060:24;37078:5;37060:24;:::i;:::-;37053:5;37050:35;37040:2;;37099:1;37096;37089:12;37040:2;37030:79;:::o

Swarm Source

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