ETH Price: $2,431.89 (+0.38%)

Token

BIG3 Ownership BrushFire (BRUSHFIRE)
 

Overview

Max Total Supply

11 BRUSHFIRE

Holders

10

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 BRUSHFIRE
0x295b9238e6a37a6331c3ba73d75ecc65d17c8215
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:
BRUSHFIRE

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-04
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.2;

/**
 * @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);
}



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

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

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

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

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

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

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

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

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

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

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

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


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


/**
 * @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);
}




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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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




/**
 * @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;
    }
}




/**
 * @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);
    }
}



/**
 * @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;
    }
}








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

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

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

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

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


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

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

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

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

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.
    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;
    constructor() {
        _status = _NOT_ENTERED;
    }
    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
        _;
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.
    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }
    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }
    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];
        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.
            bytes32 lastvalue = set._values[lastIndex];
            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
            // Delete the slot where the moved value was stored
            set._values.pop();
            // Delete the index for the deleted slot
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }
    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }
    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }
    // Bytes32Set
    struct Bytes32Set {
        Set _inner;
    }
    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }
    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }
    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }
    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }
    // AddressSet
    struct AddressSet {
        Set _inner;
    }
    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }
    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }
    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }
    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }
    // UintSet
    struct UintSet {
        Set _inner;
    }
    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }
    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }
    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }
    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }
   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

contract BRUSHFIRE is ERC721, Ownable,IERC721Receiver {
    using Counters for Counters.Counter;
    using EnumerableSet for EnumerableSet.UintSet; 
    Counters.Counter private _tokenIdCounter;
    string public baseURI = "https://ownership.big3.com/apis/pages/brushfirenft/";
    
    mapping(uint256 => string) public _teamURIs;

    mapping(uint256 => address) public mintinfo;
    uint256 swapLimit = 5;
    address public bigThreeNftAddress = 0x008C69E0c66EbD4b228D27F2162aD54AB1b7dDE1;
    mapping(address => EnumerableSet.UintSet) private _deposits;
    constructor() ERC721("BIG3 Ownership BrushFire", "BRUSHFIRE") {

      
    }


    function updateNftAddress(address bigThreeNftAddress_,uint256 swapLimit_) public onlyOwner {
        bigThreeNftAddress = bigThreeNftAddress_;
        swapLimit = swapLimit_;
    }
    // contract functions
    
    function setBaseURI(string memory __baseURI) external onlyOwner {
        baseURI = __baseURI;
    }
    

    
    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }
    
    function totalSupplyMinted() public view  returns (uint256) { 
        return _tokenIdCounter.current(); 
    }
    
    // end setting functions 

    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal 
    {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _teamURIs[tokenId] = _tokenURI;
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: Nonexistent token");

        string memory _tokenURI = _teamURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }
    //mint functions

    function mintowner(address to,uint256 quantity,uint256 teamId) external onlyOwner
    {
        for (uint256 i = 0; i < quantity; i++) {
            _mint(to, _tokenIdCounter.current());
            _setTokenURI(_tokenIdCounter.current(), string(abi.encodePacked(Strings.toString(_tokenIdCounter.current()),"/",Strings.toString(teamId))));
           _tokenIdCounter.increment();
        }
    }

    function deposit(uint256[] calldata tokenIds,uint256 teamId) external {
        //claimRewards(tokenIds);
        require(IERC721(bigThreeNftAddress).isApprovedForAll(msg.sender,address(this)), "not approved");
        require(tokenIds.length==swapLimit, "not approved");
        require(teamId>0, "invalid team");
        require(teamId<=12, "invalid team");
        for (uint256 i; i < tokenIds.length; i++) { 
            IERC721(bigThreeNftAddress).safeTransferFrom(
                msg.sender,
                address(this),
                tokenIds[i],
                ''
            );
            mintinfo[_tokenIdCounter.current()] = msg.sender;
            
            
            
            _deposits[msg.sender].add(tokenIds[i]);
        }
        _mint(msg.sender, _tokenIdCounter.current());
        _setTokenURI(_tokenIdCounter.current(), string(abi.encodePacked(Strings.toString(_tokenIdCounter.current()),"/",Strings.toString(teamId))));
        _tokenIdCounter.increment();
    }


    function checkTokenExists(uint256 tokenId) public view returns(bool) 
    {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return true;
    }
    function totalSupply() public view virtual  returns (uint256) {
        return _tokenIdCounter.current();
    }

    function onERC721Received(
        address,
        address,
        uint256,
        bytes calldata
    ) external pure override returns (bytes4) {
        return IERC721Receiver.onERC721Received.selector;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_teamURIs","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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bigThreeNftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkTokenExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256","name":"teamId","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"","type":"uint256"}],"name":"mintinfo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"teamId","type":"uint256"}],"name":"mintowner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyMinted","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"},{"inputs":[{"internalType":"address","name":"bigThreeNftAddress_","type":"address"},{"internalType":"uint256","name":"swapLimit_","type":"uint256"}],"name":"updateNftAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060600160405280603381526020016200428560339139600890805190602001906200003592919062000231565b506005600b55728c69e0c66ebd4b228d27f2162ad54ab1b7dde1600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200009c57600080fd5b506040518060400160405280601881526020017f42494733204f776e6572736869702042727573684669726500000000000000008152506040518060400160405280600981526020017f425255534846495245000000000000000000000000000000000000000000000081525081600090805190602001906200012192919062000231565b5080600190805190602001906200013a92919062000231565b5050506200015d620001516200016360201b60201c565b6200016b60201b60201c565b62000346565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200023f90620002e1565b90600052602060002090601f016020900481019282620002635760008555620002af565b82601f106200027e57805160ff1916838001178555620002af565b82800160010185558215620002af579182015b82811115620002ae57825182559160200191906001019062000291565b5b509050620002be9190620002c2565b5090565b5b80821115620002dd576000816000905550600101620002c3565b5090565b60006002820490506001821680620002fa57607f821691505b6020821081141562000311576200031062000317565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613f2f80620003566000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063b88d4fde11610097578063cfe2b80b11610071578063cfe2b80b14610517578063e985e9c514610533578063f2fde38b14610563578063f7ad084b1461057f576101c4565b8063b88d4fde1461049b578063bfd5621e146104b7578063c87b56dd146104e7576101c4565b8063933e95b2116100d3578063933e95b21461041357806395d89b4114610431578063a22cb4651461044f578063ad3c67a71461046b576101c4565b806370a08231146103bb578063715018a6146103eb5780638da5cb5b146103f5576101c4565b806342842e0e116101665780636352211e116101405780636352211e1461032157806363e83d57146103515780636c0360eb146103815780636e72a43d1461039f576101c4565b806342842e0e146102cd57806355f804b3146102e95780635dc55f2f14610305576101c4565b8063095ea7b3116101a2578063095ea7b314610247578063150b7a021461026357806318160ddd1461029357806323b872dd146102b1576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612c26565b61059d565b6040516101f09190613204565b60405180910390f35b61020161067f565b60405161020e919061323a565b60405180910390f35b610231600480360381019061022c9190612cc9565b610711565b60405161023e919061312a565b60405180910390f35b610261600480360381019061025c9190612b06565b610796565b005b61027d600480360381019061027891906129bb565b6108ae565b60405161028a919061321f565b60405180910390f35b61029b6108c3565b6040516102a891906134dc565b60405180910390f35b6102cb60048036038101906102c69190612968565b6108d4565b005b6102e760048036038101906102e29190612968565b610934565b005b61030360048036038101906102fe9190612c80565b610954565b005b61031f600480360381019061031a9190612b99565b6109ea565b005b61033b60048036038101906103369190612cc9565b610da5565b604051610348919061312a565b60405180910390f35b61036b60048036038101906103669190612cc9565b610e57565b604051610378919061323a565b60405180910390f35b610389610ef7565b604051610396919061323a565b60405180910390f35b6103b960048036038101906103b49190612b06565b610f85565b005b6103d560048036038101906103d091906128fb565b61104d565b6040516103e291906134dc565b60405180910390f35b6103f3611105565b005b6103fd61118d565b60405161040a919061312a565b60405180910390f35b61041b6111b7565b60405161042891906134dc565b60405180910390f35b6104396111c8565b604051610446919061323a565b60405180910390f35b61046960048036038101906104649190612ac6565b61125a565b005b61048560048036038101906104809190612cc9565b611270565b604051610492919061312a565b60405180910390f35b6104b560048036038101906104b09190612a43565b6112a3565b005b6104d160048036038101906104cc9190612cc9565b611305565b6040516104de9190613204565b60405180910390f35b61050160048036038101906104fc9190612cc9565b611358565b60405161050e919061323a565b60405180910390f35b610531600480360381019061052c9190612b46565b6114aa565b005b61054d60048036038101906105489190612928565b6115b4565b60405161055a9190613204565b60405180910390f35b61057d600480360381019061057891906128fb565b611648565b005b610587611740565b604051610594919061312a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610678575061067782611766565b5b9050919050565b60606000805461068e90613732565b80601f01602080910402602001604051908101604052809291908181526020018280546106ba90613732565b80156107075780601f106106dc57610100808354040283529160200191610707565b820191906000526020600020905b8154815290600101906020018083116106ea57829003601f168201915b5050505050905090565b600061071c826117d0565b61075b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610752906133fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a182610da5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108099061347c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661083161183c565b73ffffffffffffffffffffffffffffffffffffffff161480610860575061085f8161085a61183c565b6115b4565b5b61089f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108969061335c565b60405180910390fd5b6108a98383611844565b505050565b600063150b7a0260e01b905095945050505050565b60006108cf60076118fd565b905090565b6108e56108df61183c565b8261190b565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b9061349c565b60405180910390fd5b61092f8383836119e9565b505050565b61094f838383604051806020016040528060008152506112a3565b505050565b61095c61183c565b73ffffffffffffffffffffffffffffffffffffffff1661097a61118d565b73ffffffffffffffffffffffffffffffffffffffff16146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061341c565b60405180910390fd5b80600890805190602001906109e692919061264e565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b8152600401610a47929190613145565b60206040518083038186803b158015610a5f57600080fd5b505afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190612bf9565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906134bc565b60405180910390fd5b600b548383905014610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b14906134bc565b60405180910390fd5b60008111610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b579061343c565b60405180910390fd5b600c811115610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061343c565b60405180910390fd5b60005b83839050811015610d3557600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610c0557610c0461389c565b5b905060200201356040518463ffffffff1660e01b8152600401610c2a939291906131ba565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050505033600a6000610c6b60076118fd565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d21848483818110610ccd57610ccc61389c565b5b90506020020135600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c5090919063ffffffff16565b508080610d2d90613795565b915050610ba7565b50610d4933610d4460076118fd565b611c6a565b610d96610d5660076118fd565b610d68610d6360076118fd565b611e44565b610d7184611e44565b604051602001610d829291906130fb565b604051602081830303815290604052611fa5565b610da06007612019565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061339c565b60405180910390fd5b80915050919050565b60096020528060005260406000206000915090508054610e7690613732565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea290613732565b8015610eef5780601f10610ec457610100808354040283529160200191610eef565b820191906000526020600020905b815481529060010190602001808311610ed257829003601f168201915b505050505081565b60088054610f0490613732565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613732565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081565b610f8d61183c565b73ffffffffffffffffffffffffffffffffffffffff16610fab61118d565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff89061341c565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b819055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061337c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110d61183c565b73ffffffffffffffffffffffffffffffffffffffff1661112b61118d565b73ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111789061341c565b60405180910390fd5b61118b600061202f565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006111c360076118fd565b905090565b6060600180546111d790613732565b80601f016020809104026020016040519081016040528092919081815260200182805461120390613732565b80156112505780601f1061122557610100808354040283529160200191611250565b820191906000526020600020905b81548152906001019060200180831161123357829003601f168201915b5050505050905090565b61126c61126561183c565b83836120f5565b5050565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b46112ae61183c565b8361190b565b6112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea9061349c565b60405180910390fd5b6112ff84848484612262565b50505050565b6000611310826117d0565b61134f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113469061345c565b60405180910390fd5b60019050919050565b6060611363826117d0565b6113a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113999061325c565b60405180910390fd5b60006009600084815260200190815260200160002080546113c290613732565b80601f01602080910402602001604051908101604052809291908181526020018280546113ee90613732565b801561143b5780601f106114105761010080835404028352916020019161143b565b820191906000526020600020905b81548152906001019060200180831161141e57829003601f168201915b50505050509050600061144c6122be565b90506000815114156114625781925050506114a5565b60008251111561149757808260405160200161147f9291906130d7565b604051602081830303815290604052925050506114a5565b6114a084612350565b925050505b919050565b6114b261183c565b73ffffffffffffffffffffffffffffffffffffffff166114d061118d565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d9061341c565b60405180910390fd5b60005b828110156115ae576115448461153f60076118fd565b611c6a565b61159161155160076118fd565b61156361155e60076118fd565b611e44565b61156c85611e44565b60405160200161157d9291906130fb565b604051602081830303815290604052611fa5565b61159b6007612019565b80806115a690613795565b915050611529565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61165061183c565b73ffffffffffffffffffffffffffffffffffffffff1661166e61118d565b73ffffffffffffffffffffffffffffffffffffffff16146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061341c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061329c565b60405180910390fd5b61173d8161202f565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118b783610da5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611916826117d0565b611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c9061333c565b60405180910390fd5b600061196083610da5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119a257506119a181856115b4565b5b806119e057508373ffffffffffffffffffffffffffffffffffffffff166119c884610711565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a0982610da5565b73ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906132fc565b60405180910390fd5b611ada8383836123f7565b611ae5600082611844565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b359190613648565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8c91906135c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c4b8383836123fc565b505050565b6000611c62836000018360001b612401565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906133dc565b60405180910390fd5b611ce3816117d0565b15611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906132dc565b60405180910390fd5b611d2f600083836123f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7f91906135c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e40600083836123fc565b5050565b60606000821415611e8c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fa0565b600082905060005b60008214611ebe578080611ea790613795565b915050600a82611eb79190613617565b9150611e94565b60008167ffffffffffffffff811115611eda57611ed96138cb565b5b6040519080825280601f01601f191660200182016040528015611f0c5781602001600182028036833780820191505090505b5090505b60008514611f9957600182611f259190613648565b9150600a85611f3491906137de565b6030611f4091906135c1565b60f81b818381518110611f5657611f5561389c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f929190613617565b9450611f10565b8093505050505b919050565b611fae826117d0565b611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe4906133bc565b60405180910390fd5b8060096000848152602001908152602001600020908051906020019061201492919061264e565b505050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b9061331c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122559190613204565b60405180910390a3505050565b61226d8484846119e9565b61227984848484612471565b6122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af9061327c565b60405180910390fd5b50505050565b6060600880546122cd90613732565b80601f01602080910402602001604051908101604052809291908181526020018280546122f990613732565b80156123465780601f1061231b57610100808354040283529160200191612346565b820191906000526020600020905b81548152906001019060200180831161232957829003601f168201915b5050505050905090565b606061235b826117d0565b61239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061345c565b60405180910390fd5b60006123a46122be565b905060008151116123c457604051806020016040528060008152506123ef565b806123ce84611e44565b6040516020016123df9291906130d7565b6040516020818303038152906040525b915050919050565b505050565b505050565b600061240d8383612608565b61246657826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061246b565b600090505b92915050565b60006124928473ffffffffffffffffffffffffffffffffffffffff1661262b565b156125fb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124bb61183c565b8786866040518563ffffffff1660e01b81526004016124dd949392919061316e565b602060405180830381600087803b1580156124f757600080fd5b505af192505050801561252857506040513d601f19601f820116820180604052508101906125259190612c53565b60015b6125ab573d8060008114612558576040519150601f19603f3d011682016040523d82523d6000602084013e61255d565b606091505b506000815114156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061327c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612600565b600190505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461265a90613732565b90600052602060002090601f01602090048101928261267c57600085556126c3565b82601f1061269557805160ff19168380011785556126c3565b828001600101855582156126c3579182015b828111156126c25782518255916020019190600101906126a7565b5b5090506126d091906126d4565b5090565b5b808211156126ed5760008160009055506001016126d5565b5090565b60006127046126ff8461351c565b6134f7565b9050828152602081018484840111156127205761271f613909565b5b61272b8482856136f0565b509392505050565b60006127466127418461354d565b6134f7565b90508281526020810184848401111561276257612761613909565b5b61276d8482856136f0565b509392505050565b60008135905061278481613e9d565b92915050565b60008083601f8401126127a05761279f6138ff565b5b8235905067ffffffffffffffff8111156127bd576127bc6138fa565b5b6020830191508360208202830111156127d9576127d8613904565b5b9250929050565b6000813590506127ef81613eb4565b92915050565b60008151905061280481613eb4565b92915050565b60008135905061281981613ecb565b92915050565b60008151905061282e81613ecb565b92915050565b60008083601f84011261284a576128496138ff565b5b8235905067ffffffffffffffff811115612867576128666138fa565b5b60208301915083600182028301111561288357612882613904565b5b9250929050565b600082601f83011261289f5761289e6138ff565b5b81356128af8482602086016126f1565b91505092915050565b600082601f8301126128cd576128cc6138ff565b5b81356128dd848260208601612733565b91505092915050565b6000813590506128f581613ee2565b92915050565b60006020828403121561291157612910613913565b5b600061291f84828501612775565b91505092915050565b6000806040838503121561293f5761293e613913565b5b600061294d85828601612775565b925050602061295e85828601612775565b9150509250929050565b60008060006060848603121561298157612980613913565b5b600061298f86828701612775565b93505060206129a086828701612775565b92505060406129b1868287016128e6565b9150509250925092565b6000806000806000608086880312156129d7576129d6613913565b5b60006129e588828901612775565b95505060206129f688828901612775565b9450506040612a07888289016128e6565b935050606086013567ffffffffffffffff811115612a2857612a2761390e565b5b612a3488828901612834565b92509250509295509295909350565b60008060008060808587031215612a5d57612a5c613913565b5b6000612a6b87828801612775565b9450506020612a7c87828801612775565b9350506040612a8d878288016128e6565b925050606085013567ffffffffffffffff811115612aae57612aad61390e565b5b612aba8782880161288a565b91505092959194509250565b60008060408385031215612add57612adc613913565b5b6000612aeb85828601612775565b9250506020612afc858286016127e0565b9150509250929050565b60008060408385031215612b1d57612b1c613913565b5b6000612b2b85828601612775565b9250506020612b3c858286016128e6565b9150509250929050565b600080600060608486031215612b5f57612b5e613913565b5b6000612b6d86828701612775565b9350506020612b7e868287016128e6565b9250506040612b8f868287016128e6565b9150509250925092565b600080600060408486031215612bb257612bb1613913565b5b600084013567ffffffffffffffff811115612bd057612bcf61390e565b5b612bdc8682870161278a565b93509350506020612bef868287016128e6565b9150509250925092565b600060208284031215612c0f57612c0e613913565b5b6000612c1d848285016127f5565b91505092915050565b600060208284031215612c3c57612c3b613913565b5b6000612c4a8482850161280a565b91505092915050565b600060208284031215612c6957612c68613913565b5b6000612c778482850161281f565b91505092915050565b600060208284031215612c9657612c95613913565b5b600082013567ffffffffffffffff811115612cb457612cb361390e565b5b612cc0848285016128b8565b91505092915050565b600060208284031215612cdf57612cde613913565b5b6000612ced848285016128e6565b91505092915050565b612cff8161367c565b82525050565b612d0e8161368e565b82525050565b612d1d8161369a565b82525050565b6000612d2e8261357e565b612d388185613594565b9350612d488185602086016136ff565b612d5181613918565b840191505092915050565b6000612d6782613589565b612d7181856135a5565b9350612d818185602086016136ff565b612d8a81613918565b840191505092915050565b6000612da082613589565b612daa81856135b6565b9350612dba8185602086016136ff565b80840191505092915050565b6000612dd36021836135a5565b9150612dde82613929565b604082019050919050565b6000612df66032836135a5565b9150612e0182613978565b604082019050919050565b6000612e196026836135a5565b9150612e24826139c7565b604082019050919050565b6000612e3c6025836135a5565b9150612e4782613a16565b604082019050919050565b6000612e5f601c836135a5565b9150612e6a82613a65565b602082019050919050565b6000612e826024836135a5565b9150612e8d82613a8e565b604082019050919050565b6000612ea56019836135a5565b9150612eb082613add565b602082019050919050565b6000612ec8602c836135a5565b9150612ed382613b06565b604082019050919050565b6000612eeb6038836135a5565b9150612ef682613b55565b604082019050919050565b6000612f0e602a836135a5565b9150612f1982613ba4565b604082019050919050565b6000612f316029836135a5565b9150612f3c82613bf3565b604082019050919050565b6000612f54602e836135a5565b9150612f5f82613c42565b604082019050919050565b6000612f776020836135a5565b9150612f8282613c91565b602082019050919050565b6000612f9a602c836135a5565b9150612fa582613cba565b604082019050919050565b6000612fbd6020836135a5565b9150612fc882613d09565b602082019050919050565b6000612fe0600c836135a5565b9150612feb82613d32565b602082019050919050565b6000613003602f836135a5565b915061300e82613d5b565b604082019050919050565b60006130266021836135a5565b915061303182613daa565b604082019050919050565b6000613049600083613594565b915061305482613df9565b600082019050919050565b600061306c6031836135a5565b915061307782613dfc565b604082019050919050565b600061308f600c836135a5565b915061309a82613e4b565b602082019050919050565b60006130b26001836135b6565b91506130bd82613e74565b600182019050919050565b6130d1816136e6565b82525050565b60006130e38285612d95565b91506130ef8284612d95565b91508190509392505050565b60006131078285612d95565b9150613112826130a5565b915061311e8284612d95565b91508190509392505050565b600060208201905061313f6000830184612cf6565b92915050565b600060408201905061315a6000830185612cf6565b6131676020830184612cf6565b9392505050565b60006080820190506131836000830187612cf6565b6131906020830186612cf6565b61319d60408301856130c8565b81810360608301526131af8184612d23565b905095945050505050565b60006080820190506131cf6000830186612cf6565b6131dc6020830185612cf6565b6131e960408301846130c8565b81810360608301526131fa8161303c565b9050949350505050565b60006020820190506132196000830184612d05565b92915050565b60006020820190506132346000830184612d14565b92915050565b600060208201905081810360008301526132548184612d5c565b905092915050565b6000602082019050818103600083015261327581612dc6565b9050919050565b6000602082019050818103600083015261329581612de9565b9050919050565b600060208201905081810360008301526132b581612e0c565b9050919050565b600060208201905081810360008301526132d581612e2f565b9050919050565b600060208201905081810360008301526132f581612e52565b9050919050565b6000602082019050818103600083015261331581612e75565b9050919050565b6000602082019050818103600083015261333581612e98565b9050919050565b6000602082019050818103600083015261335581612ebb565b9050919050565b6000602082019050818103600083015261337581612ede565b9050919050565b6000602082019050818103600083015261339581612f01565b9050919050565b600060208201905081810360008301526133b581612f24565b9050919050565b600060208201905081810360008301526133d581612f47565b9050919050565b600060208201905081810360008301526133f581612f6a565b9050919050565b6000602082019050818103600083015261341581612f8d565b9050919050565b6000602082019050818103600083015261343581612fb0565b9050919050565b6000602082019050818103600083015261345581612fd3565b9050919050565b6000602082019050818103600083015261347581612ff6565b9050919050565b6000602082019050818103600083015261349581613019565b9050919050565b600060208201905081810360008301526134b58161305f565b9050919050565b600060208201905081810360008301526134d581613082565b9050919050565b60006020820190506134f160008301846130c8565b92915050565b6000613501613512565b905061350d8282613764565b919050565b6000604051905090565b600067ffffffffffffffff821115613537576135366138cb565b5b61354082613918565b9050602081019050919050565b600067ffffffffffffffff821115613568576135676138cb565b5b61357182613918565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135cc826136e6565b91506135d7836136e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561360c5761360b61380f565b5b828201905092915050565b6000613622826136e6565b915061362d836136e6565b92508261363d5761363c61383e565b5b828204905092915050565b6000613653826136e6565b915061365e836136e6565b9250828210156136715761367061380f565b5b828203905092915050565b6000613687826136c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561371d578082015181840152602081019050613702565b8381111561372c576000848401525b50505050565b6000600282049050600182168061374a57607f821691505b6020821081141561375e5761375d61386d565b5b50919050565b61376d82613918565b810181811067ffffffffffffffff8211171561378c5761378b6138cb565b5b80604052505050565b60006137a0826136e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137d3576137d261380f565b5b600182019050919050565b60006137e9826136e6565b91506137f4836136e6565b9250826138045761380361383e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e76616c6964207465616d0000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6e6f7420617070726f7665640000000000000000000000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b613ea68161367c565b8114613eb157600080fd5b50565b613ebd8161368e565b8114613ec857600080fd5b50565b613ed48161369a565b8114613edf57600080fd5b50565b613eeb816136e6565b8114613ef657600080fd5b5056fea264697066735822122094a9e6db6da51f53954240bceb7a4c28fd50af4e3b0f2bcf17ffe5272331d6c964736f6c6343000807003368747470733a2f2f6f776e6572736869702e626967332e636f6d2f617069732f70616765732f6272757368666972656e66742f

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101c45760003560e01c806370a08231116100f9578063b88d4fde11610097578063cfe2b80b11610071578063cfe2b80b14610517578063e985e9c514610533578063f2fde38b14610563578063f7ad084b1461057f576101c4565b8063b88d4fde1461049b578063bfd5621e146104b7578063c87b56dd146104e7576101c4565b8063933e95b2116100d3578063933e95b21461041357806395d89b4114610431578063a22cb4651461044f578063ad3c67a71461046b576101c4565b806370a08231146103bb578063715018a6146103eb5780638da5cb5b146103f5576101c4565b806342842e0e116101665780636352211e116101405780636352211e1461032157806363e83d57146103515780636c0360eb146103815780636e72a43d1461039f576101c4565b806342842e0e146102cd57806355f804b3146102e95780635dc55f2f14610305576101c4565b8063095ea7b3116101a2578063095ea7b314610247578063150b7a021461026357806318160ddd1461029357806323b872dd146102b1576101c4565b806301ffc9a7146101c957806306fdde03146101f9578063081812fc14610217575b600080fd5b6101e360048036038101906101de9190612c26565b61059d565b6040516101f09190613204565b60405180910390f35b61020161067f565b60405161020e919061323a565b60405180910390f35b610231600480360381019061022c9190612cc9565b610711565b60405161023e919061312a565b60405180910390f35b610261600480360381019061025c9190612b06565b610796565b005b61027d600480360381019061027891906129bb565b6108ae565b60405161028a919061321f565b60405180910390f35b61029b6108c3565b6040516102a891906134dc565b60405180910390f35b6102cb60048036038101906102c69190612968565b6108d4565b005b6102e760048036038101906102e29190612968565b610934565b005b61030360048036038101906102fe9190612c80565b610954565b005b61031f600480360381019061031a9190612b99565b6109ea565b005b61033b60048036038101906103369190612cc9565b610da5565b604051610348919061312a565b60405180910390f35b61036b60048036038101906103669190612cc9565b610e57565b604051610378919061323a565b60405180910390f35b610389610ef7565b604051610396919061323a565b60405180910390f35b6103b960048036038101906103b49190612b06565b610f85565b005b6103d560048036038101906103d091906128fb565b61104d565b6040516103e291906134dc565b60405180910390f35b6103f3611105565b005b6103fd61118d565b60405161040a919061312a565b60405180910390f35b61041b6111b7565b60405161042891906134dc565b60405180910390f35b6104396111c8565b604051610446919061323a565b60405180910390f35b61046960048036038101906104649190612ac6565b61125a565b005b61048560048036038101906104809190612cc9565b611270565b604051610492919061312a565b60405180910390f35b6104b560048036038101906104b09190612a43565b6112a3565b005b6104d160048036038101906104cc9190612cc9565b611305565b6040516104de9190613204565b60405180910390f35b61050160048036038101906104fc9190612cc9565b611358565b60405161050e919061323a565b60405180910390f35b610531600480360381019061052c9190612b46565b6114aa565b005b61054d60048036038101906105489190612928565b6115b4565b60405161055a9190613204565b60405180910390f35b61057d600480360381019061057891906128fb565b611648565b005b610587611740565b604051610594919061312a565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610678575061067782611766565b5b9050919050565b60606000805461068e90613732565b80601f01602080910402602001604051908101604052809291908181526020018280546106ba90613732565b80156107075780601f106106dc57610100808354040283529160200191610707565b820191906000526020600020905b8154815290600101906020018083116106ea57829003601f168201915b5050505050905090565b600061071c826117d0565b61075b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610752906133fc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a182610da5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108099061347c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661083161183c565b73ffffffffffffffffffffffffffffffffffffffff161480610860575061085f8161085a61183c565b6115b4565b5b61089f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108969061335c565b60405180910390fd5b6108a98383611844565b505050565b600063150b7a0260e01b905095945050505050565b60006108cf60076118fd565b905090565b6108e56108df61183c565b8261190b565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091b9061349c565b60405180910390fd5b61092f8383836119e9565b505050565b61094f838383604051806020016040528060008152506112a3565b505050565b61095c61183c565b73ffffffffffffffffffffffffffffffffffffffff1661097a61118d565b73ffffffffffffffffffffffffffffffffffffffff16146109d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c79061341c565b60405180910390fd5b80600890805190602001906109e692919061264e565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b8152600401610a47929190613145565b60206040518083038186803b158015610a5f57600080fd5b505afa158015610a73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a979190612bf9565b610ad6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acd906134bc565b60405180910390fd5b600b548383905014610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b14906134bc565b60405180910390fd5b60008111610b60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b579061343c565b60405180910390fd5b600c811115610ba4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9b9061343c565b60405180910390fd5b60005b83839050811015610d3557600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b88d4fde3330878786818110610c0557610c0461389c565b5b905060200201356040518463ffffffff1660e01b8152600401610c2a939291906131ba565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050505033600a6000610c6b60076118fd565b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d21848483818110610ccd57610ccc61389c565b5b90506020020135600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c5090919063ffffffff16565b508080610d2d90613795565b915050610ba7565b50610d4933610d4460076118fd565b611c6a565b610d96610d5660076118fd565b610d68610d6360076118fd565b611e44565b610d7184611e44565b604051602001610d829291906130fb565b604051602081830303815290604052611fa5565b610da06007612019565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e459061339c565b60405180910390fd5b80915050919050565b60096020528060005260406000206000915090508054610e7690613732565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea290613732565b8015610eef5780601f10610ec457610100808354040283529160200191610eef565b820191906000526020600020905b815481529060010190602001808311610ed257829003601f168201915b505050505081565b60088054610f0490613732565b80601f0160208091040260200160405190810160405280929190818152602001828054610f3090613732565b8015610f7d5780601f10610f5257610100808354040283529160200191610f7d565b820191906000526020600020905b815481529060010190602001808311610f6057829003601f168201915b505050505081565b610f8d61183c565b73ffffffffffffffffffffffffffffffffffffffff16610fab61118d565b73ffffffffffffffffffffffffffffffffffffffff1614611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff89061341c565b60405180910390fd5b81600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b819055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b59061337c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61110d61183c565b73ffffffffffffffffffffffffffffffffffffffff1661112b61118d565b73ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111789061341c565b60405180910390fd5b61118b600061202f565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006111c360076118fd565b905090565b6060600180546111d790613732565b80601f016020809104026020016040519081016040528092919081815260200182805461120390613732565b80156112505780601f1061122557610100808354040283529160200191611250565b820191906000526020600020905b81548152906001019060200180831161123357829003601f168201915b5050505050905090565b61126c61126561183c565b83836120f5565b5050565b600a6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112b46112ae61183c565b8361190b565b6112f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ea9061349c565b60405180910390fd5b6112ff84848484612262565b50505050565b6000611310826117d0565b61134f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113469061345c565b60405180910390fd5b60019050919050565b6060611363826117d0565b6113a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113999061325c565b60405180910390fd5b60006009600084815260200190815260200160002080546113c290613732565b80601f01602080910402602001604051908101604052809291908181526020018280546113ee90613732565b801561143b5780601f106114105761010080835404028352916020019161143b565b820191906000526020600020905b81548152906001019060200180831161141e57829003601f168201915b50505050509050600061144c6122be565b90506000815114156114625781925050506114a5565b60008251111561149757808260405160200161147f9291906130d7565b604051602081830303815290604052925050506114a5565b6114a084612350565b925050505b919050565b6114b261183c565b73ffffffffffffffffffffffffffffffffffffffff166114d061118d565b73ffffffffffffffffffffffffffffffffffffffff1614611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d9061341c565b60405180910390fd5b60005b828110156115ae576115448461153f60076118fd565b611c6a565b61159161155160076118fd565b61156361155e60076118fd565b611e44565b61156c85611e44565b60405160200161157d9291906130fb565b604051602081830303815290604052611fa5565b61159b6007612019565b80806115a690613795565b915050611529565b50505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61165061183c565b73ffffffffffffffffffffffffffffffffffffffff1661166e61118d565b73ffffffffffffffffffffffffffffffffffffffff16146116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb9061341c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b9061329c565b60405180910390fd5b61173d8161202f565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118b783610da5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611916826117d0565b611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c9061333c565b60405180910390fd5b600061196083610da5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806119a257506119a181856115b4565b5b806119e057508373ffffffffffffffffffffffffffffffffffffffff166119c884610711565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611a0982610da5565b73ffffffffffffffffffffffffffffffffffffffff1614611a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a56906132bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906132fc565b60405180910390fd5b611ada8383836123f7565b611ae5600082611844565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b359190613648565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b8c91906135c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611c4b8383836123fc565b505050565b6000611c62836000018360001b612401565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd1906133dc565b60405180910390fd5b611ce3816117d0565b15611d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1a906132dc565b60405180910390fd5b611d2f600083836123f7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d7f91906135c1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e40600083836123fc565b5050565b60606000821415611e8c576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611fa0565b600082905060005b60008214611ebe578080611ea790613795565b915050600a82611eb79190613617565b9150611e94565b60008167ffffffffffffffff811115611eda57611ed96138cb565b5b6040519080825280601f01601f191660200182016040528015611f0c5781602001600182028036833780820191505090505b5090505b60008514611f9957600182611f259190613648565b9150600a85611f3491906137de565b6030611f4091906135c1565b60f81b818381518110611f5657611f5561389c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f929190613617565b9450611f10565b8093505050505b919050565b611fae826117d0565b611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe4906133bc565b60405180910390fd5b8060096000848152602001908152602001600020908051906020019061201492919061264e565b505050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b9061331c565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122559190613204565b60405180910390a3505050565b61226d8484846119e9565b61227984848484612471565b6122b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122af9061327c565b60405180910390fd5b50505050565b6060600880546122cd90613732565b80601f01602080910402602001604051908101604052809291908181526020018280546122f990613732565b80156123465780601f1061231b57610100808354040283529160200191612346565b820191906000526020600020905b81548152906001019060200180831161232957829003601f168201915b5050505050905090565b606061235b826117d0565b61239a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123919061345c565b60405180910390fd5b60006123a46122be565b905060008151116123c457604051806020016040528060008152506123ef565b806123ce84611e44565b6040516020016123df9291906130d7565b6040516020818303038152906040525b915050919050565b505050565b505050565b600061240d8383612608565b61246657826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905061246b565b600090505b92915050565b60006124928473ffffffffffffffffffffffffffffffffffffffff1661262b565b156125fb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124bb61183c565b8786866040518563ffffffff1660e01b81526004016124dd949392919061316e565b602060405180830381600087803b1580156124f757600080fd5b505af192505050801561252857506040513d601f19601f820116820180604052508101906125259190612c53565b60015b6125ab573d8060008114612558576040519150601f19603f3d011682016040523d82523d6000602084013e61255d565b606091505b506000815114156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a9061327c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612600565b600190505b949350505050565b600080836001016000848152602001908152602001600020541415905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461265a90613732565b90600052602060002090601f01602090048101928261267c57600085556126c3565b82601f1061269557805160ff19168380011785556126c3565b828001600101855582156126c3579182015b828111156126c25782518255916020019190600101906126a7565b5b5090506126d091906126d4565b5090565b5b808211156126ed5760008160009055506001016126d5565b5090565b60006127046126ff8461351c565b6134f7565b9050828152602081018484840111156127205761271f613909565b5b61272b8482856136f0565b509392505050565b60006127466127418461354d565b6134f7565b90508281526020810184848401111561276257612761613909565b5b61276d8482856136f0565b509392505050565b60008135905061278481613e9d565b92915050565b60008083601f8401126127a05761279f6138ff565b5b8235905067ffffffffffffffff8111156127bd576127bc6138fa565b5b6020830191508360208202830111156127d9576127d8613904565b5b9250929050565b6000813590506127ef81613eb4565b92915050565b60008151905061280481613eb4565b92915050565b60008135905061281981613ecb565b92915050565b60008151905061282e81613ecb565b92915050565b60008083601f84011261284a576128496138ff565b5b8235905067ffffffffffffffff811115612867576128666138fa565b5b60208301915083600182028301111561288357612882613904565b5b9250929050565b600082601f83011261289f5761289e6138ff565b5b81356128af8482602086016126f1565b91505092915050565b600082601f8301126128cd576128cc6138ff565b5b81356128dd848260208601612733565b91505092915050565b6000813590506128f581613ee2565b92915050565b60006020828403121561291157612910613913565b5b600061291f84828501612775565b91505092915050565b6000806040838503121561293f5761293e613913565b5b600061294d85828601612775565b925050602061295e85828601612775565b9150509250929050565b60008060006060848603121561298157612980613913565b5b600061298f86828701612775565b93505060206129a086828701612775565b92505060406129b1868287016128e6565b9150509250925092565b6000806000806000608086880312156129d7576129d6613913565b5b60006129e588828901612775565b95505060206129f688828901612775565b9450506040612a07888289016128e6565b935050606086013567ffffffffffffffff811115612a2857612a2761390e565b5b612a3488828901612834565b92509250509295509295909350565b60008060008060808587031215612a5d57612a5c613913565b5b6000612a6b87828801612775565b9450506020612a7c87828801612775565b9350506040612a8d878288016128e6565b925050606085013567ffffffffffffffff811115612aae57612aad61390e565b5b612aba8782880161288a565b91505092959194509250565b60008060408385031215612add57612adc613913565b5b6000612aeb85828601612775565b9250506020612afc858286016127e0565b9150509250929050565b60008060408385031215612b1d57612b1c613913565b5b6000612b2b85828601612775565b9250506020612b3c858286016128e6565b9150509250929050565b600080600060608486031215612b5f57612b5e613913565b5b6000612b6d86828701612775565b9350506020612b7e868287016128e6565b9250506040612b8f868287016128e6565b9150509250925092565b600080600060408486031215612bb257612bb1613913565b5b600084013567ffffffffffffffff811115612bd057612bcf61390e565b5b612bdc8682870161278a565b93509350506020612bef868287016128e6565b9150509250925092565b600060208284031215612c0f57612c0e613913565b5b6000612c1d848285016127f5565b91505092915050565b600060208284031215612c3c57612c3b613913565b5b6000612c4a8482850161280a565b91505092915050565b600060208284031215612c6957612c68613913565b5b6000612c778482850161281f565b91505092915050565b600060208284031215612c9657612c95613913565b5b600082013567ffffffffffffffff811115612cb457612cb361390e565b5b612cc0848285016128b8565b91505092915050565b600060208284031215612cdf57612cde613913565b5b6000612ced848285016128e6565b91505092915050565b612cff8161367c565b82525050565b612d0e8161368e565b82525050565b612d1d8161369a565b82525050565b6000612d2e8261357e565b612d388185613594565b9350612d488185602086016136ff565b612d5181613918565b840191505092915050565b6000612d6782613589565b612d7181856135a5565b9350612d818185602086016136ff565b612d8a81613918565b840191505092915050565b6000612da082613589565b612daa81856135b6565b9350612dba8185602086016136ff565b80840191505092915050565b6000612dd36021836135a5565b9150612dde82613929565b604082019050919050565b6000612df66032836135a5565b9150612e0182613978565b604082019050919050565b6000612e196026836135a5565b9150612e24826139c7565b604082019050919050565b6000612e3c6025836135a5565b9150612e4782613a16565b604082019050919050565b6000612e5f601c836135a5565b9150612e6a82613a65565b602082019050919050565b6000612e826024836135a5565b9150612e8d82613a8e565b604082019050919050565b6000612ea56019836135a5565b9150612eb082613add565b602082019050919050565b6000612ec8602c836135a5565b9150612ed382613b06565b604082019050919050565b6000612eeb6038836135a5565b9150612ef682613b55565b604082019050919050565b6000612f0e602a836135a5565b9150612f1982613ba4565b604082019050919050565b6000612f316029836135a5565b9150612f3c82613bf3565b604082019050919050565b6000612f54602e836135a5565b9150612f5f82613c42565b604082019050919050565b6000612f776020836135a5565b9150612f8282613c91565b602082019050919050565b6000612f9a602c836135a5565b9150612fa582613cba565b604082019050919050565b6000612fbd6020836135a5565b9150612fc882613d09565b602082019050919050565b6000612fe0600c836135a5565b9150612feb82613d32565b602082019050919050565b6000613003602f836135a5565b915061300e82613d5b565b604082019050919050565b60006130266021836135a5565b915061303182613daa565b604082019050919050565b6000613049600083613594565b915061305482613df9565b600082019050919050565b600061306c6031836135a5565b915061307782613dfc565b604082019050919050565b600061308f600c836135a5565b915061309a82613e4b565b602082019050919050565b60006130b26001836135b6565b91506130bd82613e74565b600182019050919050565b6130d1816136e6565b82525050565b60006130e38285612d95565b91506130ef8284612d95565b91508190509392505050565b60006131078285612d95565b9150613112826130a5565b915061311e8284612d95565b91508190509392505050565b600060208201905061313f6000830184612cf6565b92915050565b600060408201905061315a6000830185612cf6565b6131676020830184612cf6565b9392505050565b60006080820190506131836000830187612cf6565b6131906020830186612cf6565b61319d60408301856130c8565b81810360608301526131af8184612d23565b905095945050505050565b60006080820190506131cf6000830186612cf6565b6131dc6020830185612cf6565b6131e960408301846130c8565b81810360608301526131fa8161303c565b9050949350505050565b60006020820190506132196000830184612d05565b92915050565b60006020820190506132346000830184612d14565b92915050565b600060208201905081810360008301526132548184612d5c565b905092915050565b6000602082019050818103600083015261327581612dc6565b9050919050565b6000602082019050818103600083015261329581612de9565b9050919050565b600060208201905081810360008301526132b581612e0c565b9050919050565b600060208201905081810360008301526132d581612e2f565b9050919050565b600060208201905081810360008301526132f581612e52565b9050919050565b6000602082019050818103600083015261331581612e75565b9050919050565b6000602082019050818103600083015261333581612e98565b9050919050565b6000602082019050818103600083015261335581612ebb565b9050919050565b6000602082019050818103600083015261337581612ede565b9050919050565b6000602082019050818103600083015261339581612f01565b9050919050565b600060208201905081810360008301526133b581612f24565b9050919050565b600060208201905081810360008301526133d581612f47565b9050919050565b600060208201905081810360008301526133f581612f6a565b9050919050565b6000602082019050818103600083015261341581612f8d565b9050919050565b6000602082019050818103600083015261343581612fb0565b9050919050565b6000602082019050818103600083015261345581612fd3565b9050919050565b6000602082019050818103600083015261347581612ff6565b9050919050565b6000602082019050818103600083015261349581613019565b9050919050565b600060208201905081810360008301526134b58161305f565b9050919050565b600060208201905081810360008301526134d581613082565b9050919050565b60006020820190506134f160008301846130c8565b92915050565b6000613501613512565b905061350d8282613764565b919050565b6000604051905090565b600067ffffffffffffffff821115613537576135366138cb565b5b61354082613918565b9050602081019050919050565b600067ffffffffffffffff821115613568576135676138cb565b5b61357182613918565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006135cc826136e6565b91506135d7836136e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561360c5761360b61380f565b5b828201905092915050565b6000613622826136e6565b915061362d836136e6565b92508261363d5761363c61383e565b5b828204905092915050565b6000613653826136e6565b915061365e836136e6565b9250828210156136715761367061380f565b5b828203905092915050565b6000613687826136c6565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561371d578082015181840152602081019050613702565b8381111561372c576000848401525b50505050565b6000600282049050600182168061374a57607f821691505b6020821081141561375e5761375d61386d565b5b50919050565b61376d82613918565b810181811067ffffffffffffffff8211171561378c5761378b6138cb565b5b80604052505050565b60006137a0826136e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137d3576137d261380f565b5b600182019050919050565b60006137e9826136e6565b91506137f4836136e6565b9250826138045761380361383e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f696e76616c6964207465616d0000000000000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6e6f7420617070726f7665640000000000000000000000000000000000000000600082015250565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b613ea68161367c565b8114613eb157600080fd5b50565b613ebd8161368e565b8114613ec857600080fd5b50565b613ed48161369a565b8114613edf57600080fd5b50565b613eeb816136e6565b8114613ef657600080fd5b5056fea264697066735822122094a9e6db6da51f53954240bceb7a4c28fd50af4e3b0f2bcf17ffe5272331d6c964736f6c63430008070033

Deployed Bytecode Sourcemap

47714:4174:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20228:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21173:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22733:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22256:411;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51666:219;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51545:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23483:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23893:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48600:102;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50314:1023;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20867:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48007:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47917:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48378:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20597:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34915:103;;;:::i;:::-;;34264:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48834:113;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21342:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23026:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48059:43;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24149:328;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51347:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49212:662;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49904:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23252:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35173:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48137:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20228:305;20330:4;20382:25;20367:40;;;:11;:40;;;;:105;;;;20439:33;20424:48;;;:11;:48;;;;20367:105;:158;;;;20489:36;20513:11;20489:23;:36::i;:::-;20367:158;20347:178;;20228:305;;;:::o;21173:100::-;21227:13;21260:5;21253:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21173:100;:::o;22733:221::-;22809:7;22837:16;22845:7;22837;:16::i;:::-;22829:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22922:15;:24;22938:7;22922:24;;;;;;;;;;;;;;;;;;;;;22915:31;;22733:221;;;:::o;22256:411::-;22337:13;22353:23;22368:7;22353:14;:23::i;:::-;22337:39;;22401:5;22395:11;;:2;:11;;;;22387:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22495:5;22479:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22504:37;22521:5;22528:12;:10;:12::i;:::-;22504:16;:37::i;:::-;22479:62;22457:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22638:21;22647:2;22651:7;22638:8;:21::i;:::-;22326:341;22256:411;;:::o;51666:219::-;51810:6;51836:41;;;51829:48;;51666:219;;;;;;;:::o;51545:113::-;51598:7;51625:25;:15;:23;:25::i;:::-;51618:32;;51545:113;:::o;23483:339::-;23678:41;23697:12;:10;:12::i;:::-;23711:7;23678:18;:41::i;:::-;23670:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23786:28;23796:4;23802:2;23806:7;23786:9;:28::i;:::-;23483:339;;;:::o;23893:185::-;24031:39;24048:4;24054:2;24058:7;24031:39;;;;;;;;;;;;:16;:39::i;:::-;23893:185;;;:::o;48600:102::-;34495:12;:10;:12::i;:::-;34484:23;;:7;:5;:7::i;:::-;:23;;;34476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48685:9:::1;48675:7;:19;;;;;;;;;;;;:::i;:::-;;48600:102:::0;:::o;50314:1023::-;50446:18;;;;;;;;;;;50438:44;;;50483:10;50502:4;50438:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50430:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;50561:9;;50544:8;;:15;;:26;50536:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;50613:1;50606:6;:8;50598:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;50658:2;50650:6;:10;;50642:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;50693:9;50688:399;50708:8;;:15;;50704:1;:19;50688:399;;;50754:18;;;;;;;;;;;50746:44;;;50809:10;50846:4;50870:8;;50879:1;50870:11;;;;;;;:::i;:::-;;;;;;;;50746:171;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50970:10;50932:8;:35;50941:25;:15;:23;:25::i;:::-;50932:35;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;51037:38;51063:8;;51072:1;51063:11;;;;;;;:::i;:::-;;;;;;;;51037:9;:21;51047:10;51037:21;;;;;;;;;;;;;;;:25;;:38;;;;:::i;:::-;;50725:3;;;;;:::i;:::-;;;;50688:399;;;;51097:44;51103:10;51115:25;:15;:23;:25::i;:::-;51097:5;:44::i;:::-;51152:139;51165:25;:15;:23;:25::i;:::-;51216:43;51233:25;:15;:23;:25::i;:::-;51216:16;:43::i;:::-;51264:24;51281:6;51264:16;:24::i;:::-;51199:90;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51152:12;:139::i;:::-;51302:27;:15;:25;:27::i;:::-;50314:1023;;;:::o;20867:239::-;20939:7;20959:13;20975:7;:16;20983:7;20975:16;;;;;;;;;;;;;;;;;;;;;20959:32;;21027:1;21010:19;;:5;:19;;;;21002:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21093:5;21086:12;;;20867:239;;;:::o;48007:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47917:77::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48378:183::-;34495:12;:10;:12::i;:::-;34484:23;;:7;:5;:7::i;:::-;:23;;;34476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48501:19:::1;48480:18;;:40;;;;;;;;;;;;;;;;;;48543:10;48531:9;:22;;;;48378:183:::0;;:::o;20597:208::-;20669:7;20714:1;20697:19;;:5;:19;;;;20689:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20781:9;:16;20791:5;20781:16;;;;;;;;;;;;;;;;20774:23;;20597:208;;;:::o;34915:103::-;34495:12;:10;:12::i;:::-;34484:23;;:7;:5;:7::i;:::-;:23;;;34476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34980:30:::1;35007:1;34980:18;:30::i;:::-;34915:103::o:0;34264:87::-;34310:7;34337:6;;;;;;;;;;;34330:13;;34264:87;:::o;48834:113::-;48885:7;48913:25;:15;:23;:25::i;:::-;48906:32;;48834:113;:::o;21342:104::-;21398:13;21431:7;21424:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21342:104;:::o;23026:155::-;23121:52;23140:12;:10;:12::i;:::-;23154:8;23164;23121:18;:52::i;:::-;23026:155;;:::o;48059:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;24149:328::-;24324:41;24343:12;:10;:12::i;:::-;24357:7;24324:18;:41::i;:::-;24316:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24430:39;24444:4;24450:2;24454:7;24463:5;24430:13;:39::i;:::-;24149:328;;;;:::o;51347:192::-;51410:4;51441:16;51449:7;51441;:16::i;:::-;51433:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;51527:4;51520:11;;51347:192;;;:::o;49212:662::-;49285:13;49319:16;49327:7;49319;:16::i;:::-;49311:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;49386:23;49412:9;:18;49422:7;49412:18;;;;;;;;;;;49386:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49441:18;49462:10;:8;:10::i;:::-;49441:31;;49570:1;49554:4;49548:18;:23;49544:72;;;49595:9;49588:16;;;;;;49544:72;49746:1;49726:9;49720:23;:27;49716:108;;;49795:4;49801:9;49778:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49764:48;;;;;;49716:108;49843:23;49858:7;49843:14;:23::i;:::-;49836:30;;;;49212:662;;;;:::o;49904:402::-;34495:12;:10;:12::i;:::-;34484:23;;:7;:5;:7::i;:::-;:23;;;34476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50007:9:::1;50002:297;50026:8;50022:1;:12;50002:297;;;50056:36;50062:2;50066:25;:15;:23;:25::i;:::-;50056:5;:36::i;:::-;50107:139;50120:25;:15;:23;:25::i;:::-;50171:43;50188:25;:15;:23;:25::i;:::-;50171:16;:43::i;:::-;50219:24;50236:6;50219:16;:24::i;:::-;50154:90;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50107:12;:139::i;:::-;50260:27;:15;:25;:27::i;:::-;50036:3;;;;;:::i;:::-;;;;50002:297;;;;49904:402:::0;;;:::o;23252:164::-;23349:4;23373:18;:25;23392:5;23373:25;;;;;;;;;;;;;;;:35;23399:8;23373:35;;;;;;;;;;;;;;;;;;;;;;;;;23366:42;;23252:164;;;;:::o;35173:201::-;34495:12;:10;:12::i;:::-;34484:23;;:7;:5;:7::i;:::-;:23;;;34476:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35282:1:::1;35262:22;;:8;:22;;;;35254:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35338:28;35357:8;35338:18;:28::i;:::-;35173:201:::0;:::o;48137:78::-;;;;;;;;;;;;;:::o;18823:157::-;18908:4;18947:25;18932:40;;;:11;:40;;;;18925:47;;18823:157;;;:::o;25987:127::-;26052:4;26104:1;26076:30;;:7;:16;26084:7;26076:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26069:37;;25987:127;;;:::o;15916:98::-;15969:7;15996:10;15989:17;;15916:98;:::o;30133:174::-;30235:2;30208:15;:24;30224:7;30208:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30291:7;30287:2;30253:46;;30262:23;30277:7;30262:14;:23::i;:::-;30253:46;;;;;;;;;;;;30133:174;;:::o;36465:114::-;36530:7;36557;:14;;;36550:21;;36465:114;;;:::o;26281:348::-;26374:4;26399:16;26407:7;26399;:16::i;:::-;26391:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26475:13;26491:23;26506:7;26491:14;:23::i;:::-;26475:39;;26544:5;26533:16;;:7;:16;;;:52;;;;26553:32;26570:5;26577:7;26553:16;:32::i;:::-;26533:52;:87;;;;26613:7;26589:31;;:20;26601:7;26589:11;:20::i;:::-;:31;;;26533:87;26525:96;;;26281:348;;;;:::o;29390:625::-;29549:4;29522:31;;:23;29537:7;29522:14;:23::i;:::-;:31;;;29514:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29628:1;29614:16;;:2;:16;;;;29606:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:39;29705:4;29711:2;29715:7;29684:20;:39::i;:::-;29788:29;29805:1;29809:7;29788:8;:29::i;:::-;29849:1;29830:9;:15;29840:4;29830:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29878:1;29861:9;:13;29871:2;29861:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29909:2;29890:7;:16;29898:7;29890:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29948:7;29944:2;29929:27;;29938:4;29929:27;;;;;;;;;;;;29969:38;29989:4;29995:2;29999:7;29969:19;:38::i;:::-;29390:625;;;:::o;46358:131::-;46425:4;46449:32;46454:3;:10;;46474:5;46466:14;;46449:4;:32::i;:::-;46442:39;;46358:131;;;;:::o;27965:439::-;28059:1;28045:16;;:2;:16;;;;28037:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28118:16;28126:7;28118;:16::i;:::-;28117:17;28109:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28180:45;28209:1;28213:2;28217:7;28180:20;:45::i;:::-;28255:1;28238:9;:13;28248:2;28238:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28286:2;28267:7;:16;28275:7;28267:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28331:7;28327:2;28306:33;;28323:1;28306:33;;;;;;;;;;;;28352:44;28380:1;28384:2;28388:7;28352:19;:44::i;:::-;27965:439;;:::o;16362:723::-;16418:13;16648:1;16639:5;:10;16635:53;;;16666:10;;;;;;;;;;;;;;;;;;;;;16635:53;16698:12;16713:5;16698:20;;16729:14;16754:78;16769:1;16761:4;:9;16754:78;;16787:8;;;;;:::i;:::-;;;;16818:2;16810:10;;;;;:::i;:::-;;;16754:78;;;16842:19;16874:6;16864:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16842:39;;16892:154;16908:1;16899:5;:10;16892:154;;16936:1;16926:11;;;;;:::i;:::-;;;17003:2;16995:5;:10;;;;:::i;:::-;16982:2;:24;;;;:::i;:::-;16969:39;;16952:6;16959;16952:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;17032:2;17023:11;;;;;:::i;:::-;;;16892:154;;;17070:6;17056:21;;;;;16362:723;;;;:::o;48992:214::-;49090:16;49098:7;49090;:16::i;:::-;49082:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;49189:9;49168;:18;49178:7;49168:18;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;48992:214;;:::o;36587:127::-;36694:1;36676:7;:14;;;:19;;;;;;;;;;;36587:127;:::o;35534:191::-;35608:16;35627:6;;;;;;;;;;;35608:25;;35653:8;35644:6;;:17;;;;;;;;;;;;;;;;;;35708:8;35677:40;;35698:8;35677:40;;;;;;;;;;;;35597:128;35534:191;:::o;30449:315::-;30604:8;30595:17;;:5;:17;;;;30587:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;30691:8;30653:18;:25;30672:5;30653:25;;;;;;;;;;;;;;;:35;30679:8;30653:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30737:8;30715:41;;30730:5;30715:41;;;30747:8;30715:41;;;;;;:::i;:::-;;;;;;;;30449:315;;;:::o;25359:::-;25516:28;25526:4;25532:2;25536:7;25516:9;:28::i;:::-;25563:48;25586:4;25592:2;25596:7;25605:5;25563:22;:48::i;:::-;25555:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25359:315;;;;:::o;48722:100::-;48774:13;48807:7;48800:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48722:100;:::o;21517:334::-;21590:13;21624:16;21632:7;21624;:16::i;:::-;21616:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21705:21;21729:10;:8;:10::i;:::-;21705:34;;21781:1;21763:7;21757:21;:25;:86;;;;;;;;;;;;;;;;;21809:7;21818:18;:7;:16;:18::i;:::-;21792:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21757:86;21750:93;;;21517:334;;;:::o;32700:126::-;;;;:::o;33211:125::-;;;;:::o;39779:414::-;39842:4;39864:21;39874:3;39879:5;39864:9;:21::i;:::-;39859:327;;39902:3;:11;;39919:5;39902:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40085:3;:11;;:18;;;;40063:3;:12;;:19;40076:5;40063:19;;;;;;;;;;;:40;;;;40125:4;40118:11;;;;39859:327;40169:5;40162:12;;39779:414;;;;;:::o;31329:799::-;31484:4;31505:15;:2;:13;;;:15::i;:::-;31501:620;;;31557:2;31541:36;;;31578:12;:10;:12::i;:::-;31592:4;31598:7;31607:5;31541:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31537:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31800:1;31783:6;:13;:18;31779:272;;;31826:60;;;;;;;;;;:::i;:::-;;;;;;;;31779:272;32001:6;31995:13;31986:6;31982:2;31978:15;31971:38;31537:529;31674:41;;;31664:51;;;:6;:51;;;;31657:58;;;;;31501:620;32105:4;32098:11;;31329:799;;;;;;;:::o;41988:129::-;42061:4;42108:1;42085:3;:12;;:19;42098:5;42085:19;;;;;;;;;;;;:24;;42078:31;;41988:129;;;;:::o;8100:326::-;8160:4;8417:1;8395:7;:19;;;:23;8388:30;;8100:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1770:5;1801:6;1795:13;1786:22;;1817:30;1841:5;1817:30;:::i;:::-;1716:137;;;;:::o;1859:::-;1904:5;1942:6;1929:20;1920:29;;1958:32;1984:5;1958:32;:::i;:::-;1859:137;;;;:::o;2002:141::-;2058:5;2089:6;2083:13;2074:22;;2105:32;2131:5;2105:32;:::i;:::-;2002:141;;;;:::o;2162:552::-;2219:8;2229:6;2279:3;2272:4;2264:6;2260:17;2256:27;2246:122;;2287:79;;:::i;:::-;2246:122;2400:6;2387:20;2377:30;;2430:18;2422:6;2419:30;2416:117;;;2452:79;;:::i;:::-;2416:117;2566:4;2558:6;2554:17;2542:29;;2620:3;2612:4;2604:6;2600:17;2590:8;2586:32;2583:41;2580:128;;;2627:79;;:::i;:::-;2580:128;2162:552;;;;;:::o;2733:338::-;2788:5;2837:3;2830:4;2822:6;2818:17;2814:27;2804:122;;2845:79;;:::i;:::-;2804:122;2962:6;2949:20;2987:78;3061:3;3053:6;3046:4;3038:6;3034:17;2987:78;:::i;:::-;2978:87;;2794:277;2733:338;;;;:::o;3091:340::-;3147:5;3196:3;3189:4;3181:6;3177:17;3173:27;3163:122;;3204:79;;:::i;:::-;3163:122;3321:6;3308:20;3346:79;3421:3;3413:6;3406:4;3398:6;3394:17;3346:79;:::i;:::-;3337:88;;3153:278;3091:340;;;;:::o;3437:139::-;3483:5;3521:6;3508:20;3499:29;;3537:33;3564:5;3537:33;:::i;:::-;3437:139;;;;:::o;3582:329::-;3641:6;3690:2;3678:9;3669:7;3665:23;3661:32;3658:119;;;3696:79;;:::i;:::-;3658:119;3816:1;3841:53;3886:7;3877:6;3866:9;3862:22;3841:53;:::i;:::-;3831:63;;3787:117;3582:329;;;;:::o;3917:474::-;3985:6;3993;4042:2;4030:9;4021:7;4017:23;4013:32;4010:119;;;4048:79;;:::i;:::-;4010:119;4168:1;4193:53;4238:7;4229:6;4218:9;4214:22;4193:53;:::i;:::-;4183:63;;4139:117;4295:2;4321:53;4366:7;4357:6;4346:9;4342:22;4321:53;:::i;:::-;4311:63;;4266:118;3917:474;;;;;:::o;4397:619::-;4474:6;4482;4490;4539:2;4527:9;4518:7;4514:23;4510:32;4507:119;;;4545:79;;:::i;:::-;4507:119;4665:1;4690:53;4735:7;4726:6;4715:9;4711:22;4690:53;:::i;:::-;4680:63;;4636:117;4792:2;4818:53;4863:7;4854:6;4843:9;4839:22;4818:53;:::i;:::-;4808:63;;4763:118;4920:2;4946:53;4991:7;4982:6;4971:9;4967:22;4946:53;:::i;:::-;4936:63;;4891:118;4397:619;;;;;:::o;5022:963::-;5119:6;5127;5135;5143;5151;5200:3;5188:9;5179:7;5175:23;5171:33;5168:120;;;5207:79;;:::i;:::-;5168:120;5327:1;5352:53;5397:7;5388:6;5377:9;5373:22;5352:53;:::i;:::-;5342:63;;5298:117;5454:2;5480:53;5525:7;5516:6;5505:9;5501:22;5480:53;:::i;:::-;5470:63;;5425:118;5582:2;5608:53;5653:7;5644:6;5633:9;5629:22;5608:53;:::i;:::-;5598:63;;5553:118;5738:2;5727:9;5723:18;5710:32;5769:18;5761:6;5758:30;5755:117;;;5791:79;;:::i;:::-;5755:117;5904:64;5960:7;5951:6;5940:9;5936:22;5904:64;:::i;:::-;5886:82;;;;5681:297;5022:963;;;;;;;;:::o;5991:943::-;6086:6;6094;6102;6110;6159:3;6147:9;6138:7;6134:23;6130:33;6127:120;;;6166:79;;:::i;:::-;6127:120;6286:1;6311:53;6356:7;6347:6;6336:9;6332:22;6311:53;:::i;:::-;6301:63;;6257:117;6413:2;6439:53;6484:7;6475:6;6464:9;6460:22;6439:53;:::i;:::-;6429:63;;6384:118;6541:2;6567:53;6612:7;6603:6;6592:9;6588:22;6567:53;:::i;:::-;6557:63;;6512:118;6697:2;6686:9;6682:18;6669:32;6728:18;6720:6;6717:30;6714:117;;;6750:79;;:::i;:::-;6714:117;6855:62;6909:7;6900:6;6889:9;6885:22;6855:62;:::i;:::-;6845:72;;6640:287;5991:943;;;;;;;:::o;6940:468::-;7005:6;7013;7062:2;7050:9;7041:7;7037:23;7033:32;7030:119;;;7068:79;;:::i;:::-;7030:119;7188:1;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7159:117;7315:2;7341:50;7383:7;7374:6;7363:9;7359:22;7341:50;:::i;:::-;7331:60;;7286:115;6940:468;;;;;:::o;7414:474::-;7482:6;7490;7539:2;7527:9;7518:7;7514:23;7510:32;7507:119;;;7545:79;;:::i;:::-;7507:119;7665:1;7690:53;7735:7;7726:6;7715:9;7711:22;7690:53;:::i;:::-;7680:63;;7636:117;7792:2;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7763:118;7414:474;;;;;:::o;7894:619::-;7971:6;7979;7987;8036:2;8024:9;8015:7;8011:23;8007:32;8004:119;;;8042:79;;:::i;:::-;8004:119;8162:1;8187:53;8232:7;8223:6;8212:9;8208:22;8187:53;:::i;:::-;8177:63;;8133:117;8289:2;8315:53;8360:7;8351:6;8340:9;8336:22;8315:53;:::i;:::-;8305:63;;8260:118;8417:2;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8388:118;7894:619;;;;;:::o;8519:704::-;8614:6;8622;8630;8679:2;8667:9;8658:7;8654:23;8650:32;8647:119;;;8685:79;;:::i;:::-;8647:119;8833:1;8822:9;8818:17;8805:31;8863:18;8855:6;8852:30;8849:117;;;8885:79;;:::i;:::-;8849:117;8998:80;9070:7;9061:6;9050:9;9046:22;8998:80;:::i;:::-;8980:98;;;;8776:312;9127:2;9153:53;9198:7;9189:6;9178:9;9174:22;9153:53;:::i;:::-;9143:63;;9098:118;8519:704;;;;;:::o;9229:345::-;9296:6;9345:2;9333:9;9324:7;9320:23;9316:32;9313:119;;;9351:79;;:::i;:::-;9313:119;9471:1;9496:61;9549:7;9540:6;9529:9;9525:22;9496:61;:::i;:::-;9486:71;;9442:125;9229:345;;;;:::o;9580:327::-;9638:6;9687:2;9675:9;9666:7;9662:23;9658:32;9655:119;;;9693:79;;:::i;:::-;9655:119;9813:1;9838:52;9882:7;9873:6;9862:9;9858:22;9838:52;:::i;:::-;9828:62;;9784:116;9580:327;;;;:::o;9913:349::-;9982:6;10031:2;10019:9;10010:7;10006:23;10002:32;9999:119;;;10037:79;;:::i;:::-;9999:119;10157:1;10182:63;10237:7;10228:6;10217:9;10213:22;10182:63;:::i;:::-;10172:73;;10128:127;9913:349;;;;:::o;10268:509::-;10337:6;10386:2;10374:9;10365:7;10361:23;10357:32;10354:119;;;10392:79;;:::i;:::-;10354:119;10540:1;10529:9;10525:17;10512:31;10570:18;10562:6;10559:30;10556:117;;;10592:79;;:::i;:::-;10556:117;10697:63;10752:7;10743:6;10732:9;10728:22;10697:63;:::i;:::-;10687:73;;10483:287;10268:509;;;;:::o;10783:329::-;10842:6;10891:2;10879:9;10870:7;10866:23;10862:32;10859:119;;;10897:79;;:::i;:::-;10859:119;11017:1;11042:53;11087:7;11078:6;11067:9;11063:22;11042:53;:::i;:::-;11032:63;;10988:117;10783:329;;;;:::o;11118:118::-;11205:24;11223:5;11205:24;:::i;:::-;11200:3;11193:37;11118:118;;:::o;11242:109::-;11323:21;11338:5;11323:21;:::i;:::-;11318:3;11311:34;11242:109;;:::o;11357:115::-;11442:23;11459:5;11442:23;:::i;:::-;11437:3;11430:36;11357:115;;:::o;11478:360::-;11564:3;11592:38;11624:5;11592:38;:::i;:::-;11646:70;11709:6;11704:3;11646:70;:::i;:::-;11639:77;;11725:52;11770:6;11765:3;11758:4;11751:5;11747:16;11725:52;:::i;:::-;11802:29;11824:6;11802:29;:::i;:::-;11797:3;11793:39;11786:46;;11568:270;11478:360;;;;:::o;11844:364::-;11932:3;11960:39;11993:5;11960:39;:::i;:::-;12015:71;12079:6;12074:3;12015:71;:::i;:::-;12008:78;;12095:52;12140:6;12135:3;12128:4;12121:5;12117:16;12095:52;:::i;:::-;12172:29;12194:6;12172:29;:::i;:::-;12167:3;12163:39;12156:46;;11936:272;11844:364;;;;:::o;12214:377::-;12320:3;12348:39;12381:5;12348:39;:::i;:::-;12403:89;12485:6;12480:3;12403:89;:::i;:::-;12396:96;;12501:52;12546:6;12541:3;12534:4;12527:5;12523:16;12501:52;:::i;:::-;12578:6;12573:3;12569:16;12562:23;;12324:267;12214:377;;;;:::o;12597:366::-;12739:3;12760:67;12824:2;12819:3;12760:67;:::i;:::-;12753:74;;12836:93;12925:3;12836:93;:::i;:::-;12954:2;12949:3;12945:12;12938:19;;12597:366;;;:::o;12969:::-;13111:3;13132:67;13196:2;13191:3;13132:67;:::i;:::-;13125:74;;13208:93;13297:3;13208:93;:::i;:::-;13326:2;13321:3;13317:12;13310:19;;12969:366;;;:::o;13341:::-;13483:3;13504:67;13568:2;13563:3;13504:67;:::i;:::-;13497:74;;13580:93;13669:3;13580:93;:::i;:::-;13698:2;13693:3;13689:12;13682:19;;13341:366;;;:::o;13713:::-;13855:3;13876:67;13940:2;13935:3;13876:67;:::i;:::-;13869:74;;13952:93;14041:3;13952:93;:::i;:::-;14070:2;14065:3;14061:12;14054:19;;13713:366;;;:::o;14085:::-;14227:3;14248:67;14312:2;14307:3;14248:67;:::i;:::-;14241:74;;14324:93;14413:3;14324:93;:::i;:::-;14442:2;14437:3;14433:12;14426:19;;14085:366;;;:::o;14457:::-;14599:3;14620:67;14684:2;14679:3;14620:67;:::i;:::-;14613:74;;14696:93;14785:3;14696:93;:::i;:::-;14814:2;14809:3;14805:12;14798:19;;14457:366;;;:::o;14829:::-;14971:3;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15068:93;15157:3;15068:93;:::i;:::-;15186:2;15181:3;15177:12;15170:19;;14829:366;;;:::o;15201:::-;15343:3;15364:67;15428:2;15423:3;15364:67;:::i;:::-;15357:74;;15440:93;15529:3;15440:93;:::i;:::-;15558:2;15553:3;15549:12;15542:19;;15201:366;;;:::o;15573:::-;15715:3;15736:67;15800:2;15795:3;15736:67;:::i;:::-;15729:74;;15812:93;15901:3;15812:93;:::i;:::-;15930:2;15925:3;15921:12;15914:19;;15573:366;;;:::o;15945:::-;16087:3;16108:67;16172:2;16167:3;16108:67;:::i;:::-;16101:74;;16184:93;16273:3;16184:93;:::i;:::-;16302:2;16297:3;16293:12;16286:19;;15945:366;;;:::o;16317:::-;16459:3;16480:67;16544:2;16539:3;16480:67;:::i;:::-;16473:74;;16556:93;16645:3;16556:93;:::i;:::-;16674:2;16669:3;16665:12;16658:19;;16317:366;;;:::o;16689:::-;16831:3;16852:67;16916:2;16911:3;16852:67;:::i;:::-;16845:74;;16928:93;17017:3;16928:93;:::i;:::-;17046:2;17041:3;17037:12;17030:19;;16689:366;;;:::o;17061:::-;17203:3;17224:67;17288:2;17283:3;17224:67;:::i;:::-;17217:74;;17300:93;17389:3;17300:93;:::i;:::-;17418:2;17413:3;17409:12;17402:19;;17061:366;;;:::o;17433:::-;17575:3;17596:67;17660:2;17655:3;17596:67;:::i;:::-;17589:74;;17672:93;17761:3;17672:93;:::i;:::-;17790:2;17785:3;17781:12;17774:19;;17433:366;;;:::o;17805:::-;17947:3;17968:67;18032:2;18027:3;17968:67;:::i;:::-;17961:74;;18044:93;18133:3;18044:93;:::i;:::-;18162:2;18157:3;18153:12;18146:19;;17805:366;;;:::o;18177:::-;18319:3;18340:67;18404:2;18399:3;18340:67;:::i;:::-;18333:74;;18416:93;18505:3;18416:93;:::i;:::-;18534:2;18529:3;18525:12;18518:19;;18177:366;;;:::o;18549:::-;18691:3;18712:67;18776:2;18771:3;18712:67;:::i;:::-;18705:74;;18788:93;18877:3;18788:93;:::i;:::-;18906:2;18901:3;18897:12;18890:19;;18549:366;;;:::o;18921:::-;19063:3;19084:67;19148:2;19143:3;19084:67;:::i;:::-;19077:74;;19160:93;19249:3;19160:93;:::i;:::-;19278:2;19273:3;19269:12;19262:19;;18921:366;;;:::o;19293:362::-;19434:3;19455:65;19518:1;19513:3;19455:65;:::i;:::-;19448:72;;19529:93;19618:3;19529:93;:::i;:::-;19647:1;19642:3;19638:11;19631:18;;19293:362;;;:::o;19661:366::-;19803:3;19824:67;19888:2;19883:3;19824:67;:::i;:::-;19817:74;;19900:93;19989:3;19900:93;:::i;:::-;20018:2;20013:3;20009:12;20002:19;;19661:366;;;:::o;20033:::-;20175:3;20196:67;20260:2;20255:3;20196:67;:::i;:::-;20189:74;;20272:93;20361:3;20272:93;:::i;:::-;20390:2;20385:3;20381:12;20374:19;;20033:366;;;:::o;20405:400::-;20565:3;20586:84;20668:1;20663:3;20586:84;:::i;:::-;20579:91;;20679:93;20768:3;20679:93;:::i;:::-;20797:1;20792:3;20788:11;20781:18;;20405:400;;;:::o;20811:118::-;20898:24;20916:5;20898:24;:::i;:::-;20893:3;20886:37;20811:118;;:::o;20935:435::-;21115:3;21137:95;21228:3;21219:6;21137:95;:::i;:::-;21130:102;;21249:95;21340:3;21331:6;21249:95;:::i;:::-;21242:102;;21361:3;21354:10;;20935:435;;;;;:::o;21376:701::-;21657:3;21679:95;21770:3;21761:6;21679:95;:::i;:::-;21672:102;;21791:148;21935:3;21791:148;:::i;:::-;21784:155;;21956:95;22047:3;22038:6;21956:95;:::i;:::-;21949:102;;22068:3;22061:10;;21376:701;;;;;:::o;22083:222::-;22176:4;22214:2;22203:9;22199:18;22191:26;;22227:71;22295:1;22284:9;22280:17;22271:6;22227:71;:::i;:::-;22083:222;;;;:::o;22311:332::-;22432:4;22470:2;22459:9;22455:18;22447:26;;22483:71;22551:1;22540:9;22536:17;22527:6;22483:71;:::i;:::-;22564:72;22632:2;22621:9;22617:18;22608:6;22564:72;:::i;:::-;22311:332;;;;;:::o;22649:640::-;22844:4;22882:3;22871:9;22867:19;22859:27;;22896:71;22964:1;22953:9;22949:17;22940:6;22896:71;:::i;:::-;22977:72;23045:2;23034:9;23030:18;23021:6;22977:72;:::i;:::-;23059;23127:2;23116:9;23112:18;23103:6;23059:72;:::i;:::-;23178:9;23172:4;23168:20;23163:2;23152:9;23148:18;23141:48;23206:76;23277:4;23268:6;23206:76;:::i;:::-;23198:84;;22649:640;;;;;;;:::o;23295:748::-;23544:4;23582:3;23571:9;23567:19;23559:27;;23596:71;23664:1;23653:9;23649:17;23640:6;23596:71;:::i;:::-;23677:72;23745:2;23734:9;23730:18;23721:6;23677:72;:::i;:::-;23759;23827:2;23816:9;23812:18;23803:6;23759:72;:::i;:::-;23878:9;23872:4;23868:20;23863:2;23852:9;23848:18;23841:48;23906:130;24031:4;23906:130;:::i;:::-;23898:138;;23295:748;;;;;;:::o;24049:210::-;24136:4;24174:2;24163:9;24159:18;24151:26;;24187:65;24249:1;24238:9;24234:17;24225:6;24187:65;:::i;:::-;24049:210;;;;:::o;24265:218::-;24356:4;24394:2;24383:9;24379:18;24371:26;;24407:69;24473:1;24462:9;24458:17;24449:6;24407:69;:::i;:::-;24265:218;;;;:::o;24489:313::-;24602:4;24640:2;24629:9;24625:18;24617:26;;24689:9;24683:4;24679:20;24675:1;24664:9;24660:17;24653:47;24717:78;24790:4;24781:6;24717:78;:::i;:::-;24709:86;;24489:313;;;;:::o;24808:419::-;24974:4;25012:2;25001:9;24997:18;24989:26;;25061:9;25055:4;25051:20;25047:1;25036:9;25032:17;25025:47;25089:131;25215:4;25089:131;:::i;:::-;25081:139;;24808:419;;;:::o;25233:::-;25399:4;25437:2;25426:9;25422:18;25414:26;;25486:9;25480:4;25476:20;25472:1;25461:9;25457:17;25450:47;25514:131;25640:4;25514:131;:::i;:::-;25506:139;;25233:419;;;:::o;25658:::-;25824:4;25862:2;25851:9;25847:18;25839:26;;25911:9;25905:4;25901:20;25897:1;25886:9;25882:17;25875:47;25939:131;26065:4;25939:131;:::i;:::-;25931:139;;25658:419;;;:::o;26083:::-;26249:4;26287:2;26276:9;26272:18;26264:26;;26336:9;26330:4;26326:20;26322:1;26311:9;26307:17;26300:47;26364:131;26490:4;26364:131;:::i;:::-;26356:139;;26083:419;;;:::o;26508:::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26508:419;;;:::o;26933:::-;27099:4;27137:2;27126:9;27122:18;27114:26;;27186:9;27180:4;27176:20;27172:1;27161:9;27157:17;27150:47;27214:131;27340:4;27214:131;:::i;:::-;27206:139;;26933:419;;;:::o;27358:::-;27524:4;27562:2;27551:9;27547:18;27539:26;;27611:9;27605:4;27601:20;27597:1;27586:9;27582:17;27575:47;27639:131;27765:4;27639:131;:::i;:::-;27631:139;;27358:419;;;:::o;27783:::-;27949:4;27987:2;27976:9;27972:18;27964:26;;28036:9;28030:4;28026:20;28022:1;28011:9;28007:17;28000:47;28064:131;28190:4;28064:131;:::i;:::-;28056:139;;27783:419;;;:::o;28208:::-;28374:4;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28208:419;;;:::o;28633:::-;28799:4;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28633:419;;;:::o;29058:::-;29224:4;29262:2;29251:9;29247:18;29239:26;;29311:9;29305:4;29301:20;29297:1;29286:9;29282:17;29275:47;29339:131;29465:4;29339:131;:::i;:::-;29331:139;;29058:419;;;:::o;29483:::-;29649:4;29687:2;29676:9;29672:18;29664:26;;29736:9;29730:4;29726:20;29722:1;29711:9;29707:17;29700:47;29764:131;29890:4;29764:131;:::i;:::-;29756:139;;29483:419;;;:::o;29908:::-;30074:4;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;29908:419;;;:::o;30333:::-;30499:4;30537:2;30526:9;30522:18;30514:26;;30586:9;30580:4;30576:20;30572:1;30561:9;30557:17;30550:47;30614:131;30740:4;30614:131;:::i;:::-;30606:139;;30333:419;;;:::o;30758:::-;30924:4;30962:2;30951:9;30947:18;30939:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31039:131;31165:4;31039:131;:::i;:::-;31031:139;;30758:419;;;:::o;31183:::-;31349:4;31387:2;31376:9;31372:18;31364:26;;31436:9;31430:4;31426:20;31422:1;31411:9;31407:17;31400:47;31464:131;31590:4;31464:131;:::i;:::-;31456:139;;31183:419;;;:::o;31608:::-;31774:4;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31608:419;;;:::o;32033:::-;32199:4;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32033:419;;;:::o;32458:::-;32624:4;32662:2;32651:9;32647:18;32639:26;;32711:9;32705:4;32701:20;32697:1;32686:9;32682:17;32675:47;32739:131;32865:4;32739:131;:::i;:::-;32731:139;;32458:419;;;:::o;32883:::-;33049:4;33087:2;33076:9;33072:18;33064:26;;33136:9;33130:4;33126:20;33122:1;33111:9;33107:17;33100:47;33164:131;33290:4;33164:131;:::i;:::-;33156:139;;32883:419;;;:::o;33308:222::-;33401:4;33439:2;33428:9;33424:18;33416:26;;33452:71;33520:1;33509:9;33505:17;33496:6;33452:71;:::i;:::-;33308:222;;;;:::o;33536:129::-;33570:6;33597:20;;:::i;:::-;33587:30;;33626:33;33654:4;33646:6;33626:33;:::i;:::-;33536:129;;;:::o;33671:75::-;33704:6;33737:2;33731:9;33721:19;;33671:75;:::o;33752:307::-;33813:4;33903:18;33895:6;33892:30;33889:56;;;33925:18;;:::i;:::-;33889:56;33963:29;33985:6;33963:29;:::i;:::-;33955:37;;34047:4;34041;34037:15;34029:23;;33752:307;;;:::o;34065:308::-;34127:4;34217:18;34209:6;34206:30;34203:56;;;34239:18;;:::i;:::-;34203:56;34277:29;34299:6;34277:29;:::i;:::-;34269:37;;34361:4;34355;34351:15;34343:23;;34065:308;;;:::o;34379:98::-;34430:6;34464:5;34458:12;34448:22;;34379:98;;;:::o;34483:99::-;34535:6;34569:5;34563:12;34553:22;;34483:99;;;:::o;34588:168::-;34671:11;34705:6;34700:3;34693:19;34745:4;34740:3;34736:14;34721:29;;34588:168;;;;:::o;34762:169::-;34846:11;34880:6;34875:3;34868:19;34920:4;34915:3;34911:14;34896:29;;34762:169;;;;:::o;34937:148::-;35039:11;35076:3;35061:18;;34937:148;;;;:::o;35091:305::-;35131:3;35150:20;35168:1;35150:20;:::i;:::-;35145:25;;35184:20;35202:1;35184:20;:::i;:::-;35179:25;;35338:1;35270:66;35266:74;35263:1;35260:81;35257:107;;;35344:18;;:::i;:::-;35257:107;35388:1;35385;35381:9;35374:16;;35091:305;;;;:::o;35402:185::-;35442:1;35459:20;35477:1;35459:20;:::i;:::-;35454:25;;35493:20;35511:1;35493:20;:::i;:::-;35488:25;;35532:1;35522:35;;35537:18;;:::i;:::-;35522:35;35579:1;35576;35572:9;35567:14;;35402:185;;;;:::o;35593:191::-;35633:4;35653:20;35671:1;35653:20;:::i;:::-;35648:25;;35687:20;35705:1;35687:20;:::i;:::-;35682:25;;35726:1;35723;35720:8;35717:34;;;35731:18;;:::i;:::-;35717:34;35776:1;35773;35769:9;35761:17;;35593:191;;;;:::o;35790:96::-;35827:7;35856:24;35874:5;35856:24;:::i;:::-;35845:35;;35790:96;;;:::o;35892:90::-;35926:7;35969:5;35962:13;35955:21;35944:32;;35892:90;;;:::o;35988:149::-;36024:7;36064:66;36057:5;36053:78;36042:89;;35988:149;;;:::o;36143:126::-;36180:7;36220:42;36213:5;36209:54;36198:65;;36143:126;;;:::o;36275:77::-;36312:7;36341:5;36330:16;;36275:77;;;:::o;36358:154::-;36442:6;36437:3;36432;36419:30;36504:1;36495:6;36490:3;36486:16;36479:27;36358:154;;;:::o;36518:307::-;36586:1;36596:113;36610:6;36607:1;36604:13;36596:113;;;36695:1;36690:3;36686:11;36680:18;36676:1;36671:3;36667:11;36660:39;36632:2;36629:1;36625:10;36620:15;;36596:113;;;36727:6;36724:1;36721:13;36718:101;;;36807:1;36798:6;36793:3;36789:16;36782:27;36718:101;36567:258;36518:307;;;:::o;36831:320::-;36875:6;36912:1;36906:4;36902:12;36892:22;;36959:1;36953:4;36949:12;36980:18;36970:81;;37036:4;37028:6;37024:17;37014:27;;36970:81;37098:2;37090:6;37087:14;37067:18;37064:38;37061:84;;;37117:18;;:::i;:::-;37061:84;36882:269;36831:320;;;:::o;37157:281::-;37240:27;37262:4;37240:27;:::i;:::-;37232:6;37228:40;37370:6;37358:10;37355:22;37334:18;37322:10;37319:34;37316:62;37313:88;;;37381:18;;:::i;:::-;37313:88;37421:10;37417:2;37410:22;37200:238;37157:281;;:::o;37444:233::-;37483:3;37506:24;37524:5;37506:24;:::i;:::-;37497:33;;37552:66;37545:5;37542:77;37539:103;;;37622:18;;:::i;:::-;37539:103;37669:1;37662:5;37658:13;37651:20;;37444:233;;;:::o;37683:176::-;37715:1;37732:20;37750:1;37732:20;:::i;:::-;37727:25;;37766:20;37784:1;37766:20;:::i;:::-;37761:25;;37805:1;37795:35;;37810:18;;:::i;:::-;37795:35;37851:1;37848;37844:9;37839:14;;37683:176;;;;:::o;37865:180::-;37913:77;37910:1;37903:88;38010:4;38007:1;38000:15;38034:4;38031:1;38024:15;38051:180;38099:77;38096:1;38089:88;38196:4;38193:1;38186:15;38220:4;38217:1;38210:15;38237:180;38285:77;38282:1;38275:88;38382:4;38379:1;38372:15;38406:4;38403:1;38396:15;38423:180;38471:77;38468:1;38461:88;38568:4;38565:1;38558:15;38592:4;38589:1;38582:15;38609:180;38657:77;38654:1;38647:88;38754:4;38751:1;38744:15;38778:4;38775:1;38768:15;38795:117;38904:1;38901;38894:12;38918:117;39027:1;39024;39017:12;39041:117;39150:1;39147;39140:12;39164:117;39273:1;39270;39263:12;39287:117;39396:1;39393;39386:12;39410:117;39519:1;39516;39509:12;39533:102;39574:6;39625:2;39621:7;39616:2;39609:5;39605:14;39601:28;39591:38;;39533:102;;;:::o;39641:220::-;39781:34;39777:1;39769:6;39765:14;39758:58;39850:3;39845:2;39837:6;39833:15;39826:28;39641:220;:::o;39867:237::-;40007:34;40003:1;39995:6;39991:14;39984:58;40076:20;40071:2;40063:6;40059:15;40052:45;39867:237;:::o;40110:225::-;40250:34;40246:1;40238:6;40234:14;40227:58;40319:8;40314:2;40306:6;40302:15;40295:33;40110:225;:::o;40341:224::-;40481:34;40477:1;40469:6;40465:14;40458:58;40550:7;40545:2;40537:6;40533:15;40526:32;40341:224;:::o;40571:178::-;40711:30;40707:1;40699:6;40695:14;40688:54;40571:178;:::o;40755:223::-;40895:34;40891:1;40883:6;40879:14;40872:58;40964:6;40959:2;40951:6;40947:15;40940:31;40755:223;:::o;40984:175::-;41124:27;41120:1;41112:6;41108:14;41101:51;40984:175;:::o;41165:231::-;41305:34;41301:1;41293:6;41289:14;41282:58;41374:14;41369:2;41361:6;41357:15;41350:39;41165:231;:::o;41402:243::-;41542:34;41538:1;41530:6;41526:14;41519:58;41611:26;41606:2;41598:6;41594:15;41587:51;41402:243;:::o;41651:229::-;41791:34;41787:1;41779:6;41775:14;41768:58;41860:12;41855:2;41847:6;41843:15;41836:37;41651:229;:::o;41886:228::-;42026:34;42022:1;42014:6;42010:14;42003:58;42095:11;42090:2;42082:6;42078:15;42071:36;41886:228;:::o;42120:233::-;42260:34;42256:1;42248:6;42244:14;42237:58;42329:16;42324:2;42316:6;42312:15;42305:41;42120:233;:::o;42359:182::-;42499:34;42495:1;42487:6;42483:14;42476:58;42359:182;:::o;42547:231::-;42687:34;42683:1;42675:6;42671:14;42664:58;42756:14;42751:2;42743:6;42739:15;42732:39;42547:231;:::o;42784:182::-;42924:34;42920:1;42912:6;42908:14;42901:58;42784:182;:::o;42972:162::-;43112:14;43108:1;43100:6;43096:14;43089:38;42972:162;:::o;43140:234::-;43280:34;43276:1;43268:6;43264:14;43257:58;43349:17;43344:2;43336:6;43332:15;43325:42;43140:234;:::o;43380:220::-;43520:34;43516:1;43508:6;43504:14;43497:58;43589:3;43584:2;43576:6;43572:15;43565:28;43380:220;:::o;43606:114::-;;:::o;43726:236::-;43866:34;43862:1;43854:6;43850:14;43843:58;43935:19;43930:2;43922:6;43918:15;43911:44;43726:236;:::o;43968:162::-;44108:14;44104:1;44096:6;44092:14;44085:38;43968:162;:::o;44136:151::-;44276:3;44272:1;44264:6;44260:14;44253:27;44136:151;:::o;44293:122::-;44366:24;44384:5;44366:24;:::i;:::-;44359:5;44356:35;44346:63;;44405:1;44402;44395:12;44346:63;44293:122;:::o;44421:116::-;44491:21;44506:5;44491:21;:::i;:::-;44484:5;44481:32;44471:60;;44527:1;44524;44517:12;44471:60;44421:116;:::o;44543:120::-;44615:23;44632:5;44615:23;:::i;:::-;44608:5;44605:34;44595:62;;44653:1;44650;44643:12;44595:62;44543:120;:::o;44669:122::-;44742:24;44760:5;44742:24;:::i;:::-;44735:5;44732:35;44722:63;;44781:1;44778;44771:12;44722:63;44669:122;:::o

Swarm Source

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