ETH Price: $2,483.08 (+0.25%)

Token

Sweetyard Dogs (SYD)
 

Overview

Max Total Supply

10,000 SYD

Holders

287

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 SYD
0x6390e8a47393b9ce48572770a743a20ae454077e
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:
SweetyardDog

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-20
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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


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

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

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

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

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

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

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

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

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

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

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

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


pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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


pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

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

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


pragma solidity ^0.8.0;

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

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

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

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

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

/**
 * @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 overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.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 ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[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);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


pragma solidity ^0.8.0;

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
	}

	function logUint(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint)", p0, p1));
	}

	function log(uint p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string)", p0, p1));
	}

	function log(uint p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool)", p0, p1));
	}

	function log(uint p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address)", p0, p1));
	}

	function log(string memory p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint)", p0, p1, p2));
	}

	function log(uint p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string)", p0, p1, p2));
	}

	function log(uint p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool)", p0, p1, p2));
	}

	function log(uint p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool)", p0, p1, p2));
	}

	function log(uint p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address)", p0, p1, p2));
	}

	function log(uint p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint)", p0, p1, p2));
	}

	function log(uint p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string)", p0, p1, p2));
	}

	function log(uint p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool)", p0, p1, p2));
	}

	function log(uint p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address)", p0, p1, p2));
	}

	function log(uint p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint)", p0, p1, p2));
	}

	function log(uint p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string)", p0, p1, p2));
	}

	function log(uint p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool)", p0, p1, p2));
	}

	function log(uint p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint)", p0, p1, p2));
	}

	function log(bool p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string)", p0, p1, p2));
	}

	function log(bool p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool)", p0, p1, p2));
	}

	function log(bool p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint)", p0, p1, p2));
	}

	function log(address p0, uint p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string)", p0, p1, p2));
	}

	function log(address p0, uint p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool)", p0, p1, p2));
	}

	function log(address p0, uint p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,uint,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,uint,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,uint)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

pragma solidity ^0.8.4;

contract SweetyardDog is ERC721URIStorage, Ownable {
    using SafeMath for uint256;

    string private baseURI;
    uint256 private constant Supply = 10000;
    uint256 private constant TOKEN_LIMIT = 9750;
    
    uint256 private Once_Max_Mint = 10;
    uint256 public constant shareValue = 500;
    
    address private constant TECH_ADDRESS = 0x6Fd792cbfc83aCCDfadBc41dFA6e1C7783F2af98;
    uint256 private constant TECH_FEE_PERCENT = 5;
    
    address private constant CREATOR_ADDRESS = 0xc714c774a86f87721Bbe78b7Cd5F49a543abe975;
    uint256 private constant CREATOR_FEE_PERCENT = 50;
    
    address private constant SHARE_ADDRESS = 0x69b40b7Eb1FA0601b2E9A68fcDE1899d0Ef177E3;
    uint256 private constant SHARE_FEE_PERCENT = 40;
    
    uint256 public fee;

    uint256[] private first_generation_tokenIds;
    uint256[] private gift_generation_tokenIds;

    uint256[TOKEN_LIMIT] private indices;
    uint256 private nonce;

    mapping(address=>bool) public whiteList;

    bool private isStart;
     
    event MintMulti(address indexed user, uint256[] tokenIds);
    event MintOne(address indexed user, uint256 tokenId);
    event MintOneOfOwner(address indexed user, uint256 len);

    constructor(uint256 _fee) ERC721("Sweetyard Dogs", "SYD") {
        fee = _fee;
        isStart = false;
    }

    function mint(uint256 _quantity) external payable returns (uint256[] memory) {
        require(_quantity > 0,"error: min quantity 1");
        require(_quantity <= Once_Max_Mint,"error: max quantity");

        require(
            first_generation_tokenIds.length + _quantity <= TOKEN_LIMIT,
            "error: out of stock"
        );

        require(isStart == true || whiteList[msg.sender] == true,"error: not start");

        uint256[] memory ids = new uint256[](_quantity);
        if(isStart == true || whiteList[msg.sender] == true){
            uint total =  fee.mul(_quantity);
            require(msg.value == total, "error: fee value");
            uint256 creator ;
            uint newTotal;
            
            if(first_generation_tokenIds.length<shareValue && first_generation_tokenIds.length.add(_quantity)>shareValue){
                // creator & share
                uint shareQuantity = first_generation_tokenIds.length.add(_quantity).sub(shareValue);
                newTotal = fee.mul(shareQuantity);
                payShare(newTotal);

                creator = total.sub(newTotal);
                payInternal(creator);

            }else if(first_generation_tokenIds.length.add(_quantity)<=shareValue){
                // creator
                newTotal = 0;
                creator = total;
                payInternal(creator);
            }else {
                // share
                newTotal = total;
                creator=0;
                 payShare(newTotal);
            }
           
            for (uint256 index = 0; index < _quantity; index++) {
                uint256 tokenId = _random();
                _safeMint(address(msg.sender), tokenId);
                first_generation_tokenIds.push(tokenId);
                ids[index] = tokenId;
            }
            
            emit MintMulti(msg.sender, ids);
          
        }
        return ids;
    }

    function payInternal(uint total) internal {
        uint256 tech = total.mul(TECH_FEE_PERCENT).div(100);
        uint256 creator = total.sub(tech);

        (bool techBo,) = payable(TECH_ADDRESS).call{
            value: tech
        }("");
        require(techBo, "Failed to send Eth");

        (bool creatorBo,) = payable(CREATOR_ADDRESS).call{
            value: creator
        }("");
        require(creatorBo, "Failed to send Eth");
    }

    function payShare(uint total) internal {
            uint256 tech = total.mul(TECH_FEE_PERCENT).div(100);
            uint256 creator = total.mul(CREATOR_FEE_PERCENT).div(100);
            uint256 share = total.mul(SHARE_FEE_PERCENT).div(100);
            uint256 proj = total.sub(tech).sub(creator).sub(share);
             require(proj>0, "error: payEnable");

            (bool techBo,) = payable(TECH_ADDRESS).call{
                value: tech
            }("");
            require(techBo, "Failed to send Eth");
            
            (bool creatorBo,) = payable(CREATOR_ADDRESS).call{
                value: creator
            }("");
            require(creatorBo, "Failed to send Eth");

             (bool shareBo,) = payable(SHARE_ADDRESS).call{
                value: share
            }("");
            require(shareBo, "Failed to send Eth");

            (bool projBo,) = payable(address(this)).call{
                value: proj
            }("");
            require(projBo, "Failed to send Eth");
    }

    function mintOfOwner(address _to, uint256 _tokenId) external onlyOwner {
        require(_tokenId > TOKEN_LIMIT, "error: tokenId or gift_min_id ");
        require(_tokenId <= Supply, "error: tokenId or gift_max_id");
        require(
            gift_generation_tokenIds.length < Supply - TOKEN_LIMIT,
            "out of stock"
        );

        uint256 tokenId = _tokenId;
        _safeMint(address(_to), tokenId);
        gift_generation_tokenIds.push(tokenId);
        emit MintOne(_to, tokenId);
    }

    function mintMulOfOwner(address _to, uint256[] memory _tokenIds) external onlyOwner {
        // require(_tokenIds.length <= Once_Max_Mint, "error: max quantity");
        for (uint256 index = 0; index < _tokenIds.length; index++) {
            uint256 _tokenId = _tokenIds[index];
            require(_tokenId > TOKEN_LIMIT, "error: tokenId or gift_min_id ");
            require(_tokenId <= Supply, "error: tokenId or gift_max_id");
            require(
                gift_generation_tokenIds.length < Supply - TOKEN_LIMIT,
                "out of stock"
            );

            uint256 tokenId = _tokenId;
            _safeMint(address(_to), tokenId);
            gift_generation_tokenIds.push(tokenId);
        }
        emit MintOneOfOwner(_to, _tokenIds.length);
    }

    function setStart(bool _start) external onlyOwner {
        isStart = _start;
    }

    function setFee(uint _fee) external onlyOwner {
        fee = _fee;
    }
    
    function setOnceMaxMint(uint _value) external onlyOwner {
        Once_Max_Mint = _value;
    }

    function addWhiteList(address[]memory _addr) external onlyOwner {
        for (uint256 index = 0; index < _addr.length; index++) {
            whiteList[_addr[index]] = true;
        }
    }

    function rmWhiteList(address[]memory _addr) external onlyOwner {
        for (uint256 index = 0; index < _addr.length; index++) {
            whiteList[_addr[index]] = false;
        }
    }

    function setBaseURI(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }

    function _random() internal returns (uint256) {
        uint256 totalSize = TOKEN_LIMIT - nonce;
        uint256 index = uint256(
            keccak256(
                abi.encodePacked(
                    nonce,
                    msg.sender,
                    block.difficulty,
                    block.timestamp
                )
            )
        ) % totalSize;
        uint256 value = 0;
        if (indices[index] != 0) {
            value = indices[index];
        } else {
            value = index;
        }

        // Move last value to selected position
        if (indices[totalSize - 1] == 0) {
            // Array position not initialized, so use position
            indices[index] = totalSize - 1;
        } else {
            // Array position holds a value so use that
            indices[index] = indices[totalSize - 1];
        }
        nonce++;
        // Don't allow a zero index, start counting at 1
        return value + 1;
    }

    function getBalance() public view returns (uint256) {
        return address(this).balance;
    }

    function withdraw() external onlyOwner {
        require(address(this).balance > 0, "balance zero");
        payable(owner()).transfer(address(this).balance);
    }

    function tokenIdsLength() external view returns(uint256){
        return first_generation_tokenIds.length + gift_generation_tokenIds.length;
    }

    function firstIdsLength() external view returns(uint256){
        return first_generation_tokenIds.length;
    }

    function totalSupply() public pure returns(uint256){
        return Supply;
    }

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    receive() external payable {}

    fallback() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"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":"user","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"MintMulti","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"MintOne","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"len","type":"uint256"}],"name":"MintOneOfOwner","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"}],"name":"addWhiteList","outputs":[],"stateMutability":"nonpayable","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":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"firstIdsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"mintMulOfOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mintOfOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addr","type":"address[]"}],"name":"rmWhiteList","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":"_uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_fee","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setOnceMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_start","type":"bool"}],"name":"setStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenIdsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a6009553480156200001657600080fd5b506040516200572c3803806200572c83398181016040528101906200003c9190620002bb565b6040518060400160405280600e81526020017f53776565747961726420446f67730000000000000000000000000000000000008152506040518060400160405280600381526020017f53594400000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000c0929190620001f4565b508060019080519060200190620000d9929190620001f4565b505050620000fc620000f06200012660201b60201c565b6200012e60201b60201c565b80600a81905550600061262560006101000a81548160ff0219169083151502179055505062000370565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020290620002f1565b90600052602060002090601f01602090048101928262000226576000855562000272565b82601f106200024157805160ff191683800117855562000272565b8280016001018555821562000272579182015b828111156200027157825182559160200191906001019062000254565b5b50905062000281919062000285565b5090565b5b80821115620002a057600081600090555060010162000286565b5090565b600081519050620002b58162000356565b92915050565b600060208284031215620002ce57600080fd5b6000620002de84828501620002a4565b91505092915050565b6000819050919050565b600060028204905060018216806200030a57607f821691505b6020821081141562000321576200032062000327565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6200036181620002e7565b81146200036d57600080fd5b50565b6153ac80620003806000396000f3fe6080604052600436106101f25760003560e01c80636352211e1161010d578063a22cb465116100a0578063ddca3f431161006f578063ddca3f43146106e0578063e6b7ad791461070b578063e985e9c514610736578063ef003e5a14610773578063f2fde38b1461079c576101f9565b8063a22cb46514610628578063ad14fa7f14610651578063b88d4fde1461067a578063c87b56dd146106a3576101f9565b8063715018a6116100dc578063715018a61461058b5780638da5cb5b146105a257806395d89b41146105cd578063a0712d68146105f8576101f9565b80636352211e146104bf57806368e24327146104fc57806369fe0e2d1461052557806370a082311461054e576101f9565b8063372c12b11161018557806355f804b31161015457806355f804b3146104195780635d70bf45146104425780635e1045ec1461046d5780635eca879414610496576101f9565b8063372c12b1146103715780633ccfd60b146103ae57806342842e0e146103c5578063447b15f4146103ee576101f9565b806312065fe0116101c157806312065fe0146102c957806318160ddd146102f457806323b872dd1461031f578063259422b514610348576101f9565b806301ffc9a7146101fb57806306fdde0314610238578063081812fc14610263578063095ea7b3146102a0576101f9565b366101f957005b005b34801561020757600080fd5b50610222600480360381019061021d9190613c79565b6107c5565b60405161022f91906143bf565b60405180910390f35b34801561024457600080fd5b5061024d6108a7565b60405161025a91906143da565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190613d0c565b610939565b6040516102979190614336565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190613bd3565b6109be565b005b3480156102d557600080fd5b506102de610ad6565b6040516102eb919061477c565b60405180910390f35b34801561030057600080fd5b50610309610ade565b604051610316919061477c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613a79565b610ae8565b005b34801561035457600080fd5b5061036f600480360381019061036a9190613c0f565b610b48565b005b34801561037d57600080fd5b5061039860048036038101906103939190613a14565b610c80565b6040516103a591906143bf565b60405180910390f35b3480156103ba57600080fd5b506103c3610ca1565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190613a79565b610db0565b005b3480156103fa57600080fd5b50610403610dd0565b604051610410919061477c565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613ccb565b610dd6565b005b34801561044e57600080fd5b50610457610e6c565b604051610464919061477c565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613c0f565b610e79565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613bd3565b610fb1565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190613d0c565b611197565b6040516104f39190614336565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613c50565b611249565b005b34801561053157600080fd5b5061054c60048036038101906105479190613d0c565b6112e3565b005b34801561055a57600080fd5b5061057560048036038101906105709190613a14565b611369565b604051610582919061477c565b60405180910390f35b34801561059757600080fd5b506105a0611421565b005b3480156105ae57600080fd5b506105b76114a9565b6040516105c49190614336565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906143da565b60405180910390f35b610612600480360381019061060d9190613d0c565b611565565b60405161061f919061439d565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613b97565b611a2f565b005b34801561065d57600080fd5b5061067860048036038101906106739190613b43565b611bb0565b005b34801561068657600080fd5b506106a1600480360381019061069c9190613ac8565b611dfd565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613d0c565b611e5f565b6040516106d791906143da565b60405180910390f35b3480156106ec57600080fd5b506106f5611fb1565b604051610702919061477c565b60405180910390f35b34801561071757600080fd5b50610720611fb7565b60405161072d919061477c565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190613a3d565b611fd4565b60405161076a91906143bf565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190613d0c565b612068565b005b3480156107a857600080fd5b506107c360048036038101906107be9190613a14565b6120ee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a0575061089f826121e6565b5b9050919050565b6060600080546108b690614ac8565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290614ac8565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b5050505050905090565b600061094482612250565b610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a906145dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c982611197565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a319061469c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a596122bc565b73ffffffffffffffffffffffffffffffffffffffff161480610a885750610a8781610a826122bc565b611fd4565b5b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe9061453c565b60405180910390fd5b610ad183836122c4565b505050565b600047905090565b6000612710905090565b610af9610af36122bc565b8261237d565b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f906146bc565b60405180910390fd5b610b4383838361245b565b505050565b610b506122bc565b73ffffffffffffffffffffffffffffffffffffffff16610b6e6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906145fc565b60405180910390fd5b60005b8151811015610c7c5760006126246000848481518110610c10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c7490614b2b565b915050610bc7565b5050565b6126246020528060005260406000206000915054906101000a900460ff1681565b610ca96122bc565b73ffffffffffffffffffffffffffffffffffffffff16610cc76114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906145fc565b60405180910390fd5b60004711610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d579061467c565b60405180910390fd5b610d686114a9565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dad573d6000803e3d6000fd5b50565b610dcb83838360405180602001604052806000815250611dfd565b505050565b6101f481565b610dde6122bc565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e49906145fc565b60405180910390fd5b8060089080519060200190610e6892919061370c565b5050565b6000600b80549050905090565b610e816122bc565b73ffffffffffffffffffffffffffffffffffffffff16610e9f6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec906145fc565b60405180910390fd5b60005b8151811015610fad5760016126246000848481518110610f41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fa590614b2b565b915050610ef8565b5050565b610fb96122bc565b73ffffffffffffffffffffffffffffffffffffffff16610fd76114a9565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906145fc565b60405180910390fd5b6126168111611071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611068906143fc565b60405180910390fd5b6127108111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061473c565b60405180910390fd5b6126166127106110c691906149de565b600c805490501061110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061475c565b60405180910390fd5b600081905061111b83826126b7565b600c8190806001815401808255809150506001900390600052602060002001600090919091909150558273ffffffffffffffffffffffffffffffffffffffff167f50945eac086e4b309898a7a477f908debe57075da46d6b1c24c431533a79ac428260405161118a919061477c565b60405180910390a2505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112379061457c565b60405180910390fd5b80915050919050565b6112516122bc565b73ffffffffffffffffffffffffffffffffffffffff1661126f6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906145fc565b60405180910390fd5b8061262560006101000a81548160ff02191690831515021790555050565b6112eb6122bc565b73ffffffffffffffffffffffffffffffffffffffff166113096114a9565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906145fc565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d19061455c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114296122bc565b73ffffffffffffffffffffffffffffffffffffffff166114476114a9565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611494906145fc565b60405180910390fd5b6114a760006126d5565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546114e290614ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461150e90614ac8565b801561155b5780601f106115305761010080835404028352916020019161155b565b820191906000526020600020905b81548152906001019060200180831161153e57829003601f168201915b5050505050905090565b6060600082116115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a19061451c565b60405180910390fd5b6009548211156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906146dc565b60405180910390fd5b61261682600b8054905061160391906148fd565b1115611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906146fc565b60405180910390fd5b6001151561262560009054906101000a900460ff16151514806116b857506001151561262460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061449c565b60405180910390fd5b60008267ffffffffffffffff811115611739577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117675781602001602082028036833780820191505090505b5090506001151561262560009054906101000a900460ff16151514806117de57506001151561262460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15611a265760006117fa84600a5461279b90919063ffffffff16565b905080341461183e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118359061447c565b60405180910390fd5b6000806101f4600b8054905010801561186f57506101f461186d87600b805490506127b190919063ffffffff16565b115b156118e85760006118a26101f461189489600b805490506127b190919063ffffffff16565b6127c790919063ffffffff16565b90506118b981600a5461279b90919063ffffffff16565b91506118c4826127dd565b6118d782856127c790919063ffffffff16565b92506118e283612bd3565b5061192f565b6101f461190387600b805490506127b190919063ffffffff16565b1161191d576000905082915061191882612bd3565b61192e565b8290506000915061192d816127dd565b5b5b60005b868110156119d3576000611944612d9c565b905061195033826126b7565b600b819080600181540180825580915050600190039060005260206000200160009091909190915055808683815181106119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505080806119cb90614b2b565b915050611932565b503373ffffffffffffffffffffffffffffffffffffffff167f161e97548145c597ae5c1588066ef89887bfed5b0a1d280de8303005890c258385604051611a1a919061439d565b60405180910390a25050505b80915050919050565b611a376122bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906144dc565b60405180910390fd5b8060056000611ab26122bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b5f6122bc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ba491906143bf565b60405180910390a35050565b611bb86122bc565b73ffffffffffffffffffffffffffffffffffffffff16611bd66114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c23906145fc565b60405180910390fd5b60005b8151811015611da9576000828281518110611c73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506126168111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906143fc565b60405180910390fd5b612710811115611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd9061473c565b60405180910390fd5b612616612710611d1691906149de565b600c8054905010611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539061475c565b60405180910390fd5b6000819050611d6b85826126b7565b600c81908060018154018082558091505060019003906000526020600020016000909190919091505550508080611da190614b2b565b915050611c2f565b508173ffffffffffffffffffffffffffffffffffffffff167f11746f8c422942929358475a982f830d26a4b359df206f749512c9fc80207d538251604051611df1919061477c565b60405180910390a25050565b611e0e611e086122bc565b8361237d565b611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e44906146bc565b60405180910390fd5b611e5984848484612fdc565b50505050565b6060611e6a82612250565b611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906145bc565b60405180910390fd5b6000600660008481526020019081526020016000208054611ec990614ac8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef590614ac8565b8015611f425780601f10611f1757610100808354040283529160200191611f42565b820191906000526020600020905b815481529060010190602001808311611f2557829003601f168201915b505050505090506000611f53613038565b9050600081511415611f69578192505050611fac565b600082511115611f9e578082604051602001611f869291906142af565b60405160208183030381529060405292505050611fac565b611fa7846130ca565b925050505b919050565b600a5481565b6000600c80549050600b80549050611fcf91906148fd565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120706122bc565b73ffffffffffffffffffffffffffffffffffffffff1661208e6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db906145fc565b60405180910390fd5b8060098190555050565b6120f66122bc565b73ffffffffffffffffffffffffffffffffffffffff166121146114a9565b73ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906145fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d19061443c565b60405180910390fd5b6121e3816126d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661233783611197565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061238882612250565b6123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be906144fc565b60405180910390fd5b60006123d283611197565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244157508373ffffffffffffffffffffffffffffffffffffffff1661242984610939565b73ffffffffffffffffffffffffffffffffffffffff16145b8061245257506124518185611fd4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661247b82611197565b73ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061461c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612538906144bc565b60405180910390fd5b61254c838383613171565b6125576000826122c4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a791906149de565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fe91906148fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126d1828260405180602001604052806000815250613176565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836127a99190614984565b905092915050565b600081836127bf91906148fd565b905092915050565b600081836127d591906149de565b905092915050565b600061280660646127f860058561279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612831606461282360328661279b90919063ffffffff16565b6131d190919063ffffffff16565b9050600061285c606461284e60288761279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612897826128898561287b888a6127c790919063ffffffff16565b6127c790919063ffffffff16565b6127c790919063ffffffff16565b9050600081116128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d39061471c565b60405180910390fd5b6000736fd792cbfc83accdfadbc41dfa6e1c7783f2af9873ffffffffffffffffffffffffffffffffffffffff1685604051612916906142d3565b60006040518083038185875af1925050503d8060008114612953576040519150601f19603f3d011682016040523d82523d6000602084013e612958565b606091505b505090508061299c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129939061463c565b60405180910390fd5b600073c714c774a86f87721bbe78b7cd5f49a543abe97573ffffffffffffffffffffffffffffffffffffffff16856040516129d6906142d3565b60006040518083038185875af1925050503d8060008114612a13576040519150601f19603f3d011682016040523d82523d6000602084013e612a18565b606091505b5050905080612a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a539061463c565b60405180910390fd5b60007369b40b7eb1fa0601b2e9a68fcde1899d0ef177e373ffffffffffffffffffffffffffffffffffffffff1685604051612a96906142d3565b60006040518083038185875af1925050503d8060008114612ad3576040519150601f19603f3d011682016040523d82523d6000602084013e612ad8565b606091505b5050905080612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b139061463c565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff1685604051612b42906142d3565b60006040518083038185875af1925050503d8060008114612b7f576040519150601f19603f3d011682016040523d82523d6000602084013e612b84565b606091505b5050905080612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf9061463c565b60405180910390fd5b505050505050505050565b6000612bfc6064612bee60058561279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612c1382846127c790919063ffffffff16565b90506000736fd792cbfc83accdfadbc41dfa6e1c7783f2af9873ffffffffffffffffffffffffffffffffffffffff1683604051612c4f906142d3565b60006040518083038185875af1925050503d8060008114612c8c576040519150601f19603f3d011682016040523d82523d6000602084013e612c91565b606091505b5050905080612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc9061463c565b60405180910390fd5b600073c714c774a86f87721bbe78b7cd5f49a543abe97573ffffffffffffffffffffffffffffffffffffffff1683604051612d0f906142d3565b60006040518083038185875af1925050503d8060008114612d4c576040519150601f19603f3d011682016040523d82523d6000602084013e612d51565b606091505b5050905080612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c9061463c565b60405180910390fd5b5050505050565b60008061262354612616612db091906149de565b905060008161262354334442604051602001612dcf94939291906142e8565b6040516020818303038152906040528051906020012060001c612df29190614ba2565b9050600080600d836126168110612e32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015414612e7d57600d826126168110612e74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01549050612e81565b8190505b6000600d600185612e9291906149de565b6126168110612eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01541415612f2457600183612edf91906149de565b600d836126168110612f1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0181905550612fae565b600d600184612f3391906149de565b6126168110612f6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154600d836126168110612fa8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055505b6126236000815480929190612fc290614b2b565b9190505550600181612fd491906148fd565b935050505090565b612fe784848461245b565b612ff3848484846131e7565b613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130299061441c565b60405180910390fd5b50505050565b60606008805461304790614ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461307390614ac8565b80156130c05780601f10613095576101008083540402835291602001916130c0565b820191906000526020600020905b8154815290600101906020018083116130a357829003601f168201915b5050505050905090565b60606130d582612250565b613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b9061465c565b60405180910390fd5b600061311e613038565b9050600081511161313e5760405180602001604052806000815250613169565b806131488461337e565b6040516020016131599291906142af565b6040516020818303038152906040525b915050919050565b505050565b613180838361352b565b61318d60008484846131e7565b6131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c39061441c565b60405180910390fd5b505050565b600081836131df9190614953565b905092915050565b60006132088473ffffffffffffffffffffffffffffffffffffffff166136f9565b15613371578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132316122bc565b8786866040518563ffffffff1660e01b81526004016132539493929190614351565b602060405180830381600087803b15801561326d57600080fd5b505af192505050801561329e57506040513d601f19601f8201168201806040525081019061329b9190613ca2565b60015b613321573d80600081146132ce576040519150601f19603f3d011682016040523d82523d6000602084013e6132d3565b606091505b50600081511415613319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133109061441c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613376565b600190505b949350505050565b606060008214156133c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613526565b600082905060005b600082146133f85780806133e190614b2b565b915050600a826133f19190614953565b91506133ce565b60008167ffffffffffffffff81111561343a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561346c5781602001600182028036833780820191505090505b5090505b6000851461351f5760018261348591906149de565b9150600a856134949190614ba2565b60306134a091906148fd565b60f81b8183815181106134dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135189190614953565b9450613470565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561359b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135929061459c565b60405180910390fd5b6135a481612250565b156135e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135db9061445c565b60405180910390fd5b6135f060008383613171565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461364091906148fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461371890614ac8565b90600052602060002090601f01602090048101928261373a5760008555613781565b82601f1061375357805160ff1916838001178555613781565b82800160010185558215613781579182015b82811115613780578251825591602001919060010190613765565b5b50905061378e9190613792565b5090565b5b808211156137ab576000816000905550600101613793565b5090565b60006137c26137bd846147bc565b614797565b905080838252602082019050828560208602820111156137e157600080fd5b60005b8581101561381157816137f78882613903565b8452602084019350602083019250506001810190506137e4565b5050509392505050565b600061382e613829846147e8565b614797565b9050808382526020820190508285602086028201111561384d57600080fd5b60005b8581101561387d578161386388826139ff565b845260208401935060208301925050600181019050613850565b5050509392505050565b600061389a61389584614814565b614797565b9050828152602081018484840111156138b257600080fd5b6138bd848285614a86565b509392505050565b60006138d86138d384614845565b614797565b9050828152602081018484840111156138f057600080fd5b6138fb848285614a86565b509392505050565b6000813590506139128161531a565b92915050565b600082601f83011261392957600080fd5b81356139398482602086016137af565b91505092915050565b600082601f83011261395357600080fd5b813561396384826020860161381b565b91505092915050565b60008135905061397b81615331565b92915050565b60008135905061399081615348565b92915050565b6000815190506139a581615348565b92915050565b600082601f8301126139bc57600080fd5b81356139cc848260208601613887565b91505092915050565b600082601f8301126139e657600080fd5b81356139f68482602086016138c5565b91505092915050565b600081359050613a0e8161535f565b92915050565b600060208284031215613a2657600080fd5b6000613a3484828501613903565b91505092915050565b60008060408385031215613a5057600080fd5b6000613a5e85828601613903565b9250506020613a6f85828601613903565b9150509250929050565b600080600060608486031215613a8e57600080fd5b6000613a9c86828701613903565b9350506020613aad86828701613903565b9250506040613abe868287016139ff565b9150509250925092565b60008060008060808587031215613ade57600080fd5b6000613aec87828801613903565b9450506020613afd87828801613903565b9350506040613b0e878288016139ff565b925050606085013567ffffffffffffffff811115613b2b57600080fd5b613b37878288016139ab565b91505092959194509250565b60008060408385031215613b5657600080fd5b6000613b6485828601613903565b925050602083013567ffffffffffffffff811115613b8157600080fd5b613b8d85828601613942565b9150509250929050565b60008060408385031215613baa57600080fd5b6000613bb885828601613903565b9250506020613bc98582860161396c565b9150509250929050565b60008060408385031215613be657600080fd5b6000613bf485828601613903565b9250506020613c05858286016139ff565b9150509250929050565b600060208284031215613c2157600080fd5b600082013567ffffffffffffffff811115613c3b57600080fd5b613c4784828501613918565b91505092915050565b600060208284031215613c6257600080fd5b6000613c708482850161396c565b91505092915050565b600060208284031215613c8b57600080fd5b6000613c9984828501613981565b91505092915050565b600060208284031215613cb457600080fd5b6000613cc284828501613996565b91505092915050565b600060208284031215613cdd57600080fd5b600082013567ffffffffffffffff811115613cf757600080fd5b613d03848285016139d5565b91505092915050565b600060208284031215613d1e57600080fd5b6000613d2c848285016139ff565b91505092915050565b6000613d41838361427a565b60208301905092915050565b613d5681614a12565b82525050565b613d6d613d6882614a12565b614b74565b82525050565b6000613d7e82614886565b613d8881856148b4565b9350613d9383614876565b8060005b83811015613dc4578151613dab8882613d35565b9750613db6836148a7565b925050600181019050613d97565b5085935050505092915050565b613dda81614a24565b82525050565b6000613deb82614891565b613df581856148c5565b9350613e05818560208601614a95565b613e0e81614c8f565b840191505092915050565b6000613e248261489c565b613e2e81856148e1565b9350613e3e818560208601614a95565b613e4781614c8f565b840191505092915050565b6000613e5d8261489c565b613e6781856148f2565b9350613e77818560208601614a95565b80840191505092915050565b6000613e90601e836148e1565b9150613e9b82614cad565b602082019050919050565b6000613eb36032836148e1565b9150613ebe82614cd6565b604082019050919050565b6000613ed66026836148e1565b9150613ee182614d25565b604082019050919050565b6000613ef9601c836148e1565b9150613f0482614d74565b602082019050919050565b6000613f1c6010836148e1565b9150613f2782614d9d565b602082019050919050565b6000613f3f6010836148e1565b9150613f4a82614dc6565b602082019050919050565b6000613f626024836148e1565b9150613f6d82614def565b604082019050919050565b6000613f856019836148e1565b9150613f9082614e3e565b602082019050919050565b6000613fa8602c836148e1565b9150613fb382614e67565b604082019050919050565b6000613fcb6015836148e1565b9150613fd682614eb6565b602082019050919050565b6000613fee6038836148e1565b9150613ff982614edf565b604082019050919050565b6000614011602a836148e1565b915061401c82614f2e565b604082019050919050565b60006140346029836148e1565b915061403f82614f7d565b604082019050919050565b60006140576020836148e1565b915061406282614fcc565b602082019050919050565b600061407a6031836148e1565b915061408582614ff5565b604082019050919050565b600061409d602c836148e1565b91506140a882615044565b604082019050919050565b60006140c06020836148e1565b91506140cb82615093565b602082019050919050565b60006140e36029836148e1565b91506140ee826150bc565b604082019050919050565b60006141066012836148e1565b91506141118261510b565b602082019050919050565b6000614129602f836148e1565b915061413482615134565b604082019050919050565b600061414c600c836148e1565b915061415782615183565b602082019050919050565b600061416f6021836148e1565b915061417a826151ac565b604082019050919050565b60006141926000836148d6565b915061419d826151fb565b600082019050919050565b60006141b56031836148e1565b91506141c0826151fe565b604082019050919050565b60006141d86013836148e1565b91506141e38261524d565b602082019050919050565b60006141fb6013836148e1565b915061420682615276565b602082019050919050565b600061421e6010836148e1565b91506142298261529f565b602082019050919050565b6000614241601d836148e1565b915061424c826152c8565b602082019050919050565b6000614264600c836148e1565b915061426f826152f1565b602082019050919050565b61428381614a7c565b82525050565b61429281614a7c565b82525050565b6142a96142a482614a7c565b614b98565b82525050565b60006142bb8285613e52565b91506142c78284613e52565b91508190509392505050565b60006142de82614185565b9150819050919050565b60006142f48287614298565b6020820191506143048286613d5c565b6014820191506143148285614298565b6020820191506143248284614298565b60208201915081905095945050505050565b600060208201905061434b6000830184613d4d565b92915050565b60006080820190506143666000830187613d4d565b6143736020830186613d4d565b6143806040830185614289565b81810360608301526143928184613de0565b905095945050505050565b600060208201905081810360008301526143b78184613d73565b905092915050565b60006020820190506143d46000830184613dd1565b92915050565b600060208201905081810360008301526143f48184613e19565b905092915050565b6000602082019050818103600083015261441581613e83565b9050919050565b6000602082019050818103600083015261443581613ea6565b9050919050565b6000602082019050818103600083015261445581613ec9565b9050919050565b6000602082019050818103600083015261447581613eec565b9050919050565b6000602082019050818103600083015261449581613f0f565b9050919050565b600060208201905081810360008301526144b581613f32565b9050919050565b600060208201905081810360008301526144d581613f55565b9050919050565b600060208201905081810360008301526144f581613f78565b9050919050565b6000602082019050818103600083015261451581613f9b565b9050919050565b6000602082019050818103600083015261453581613fbe565b9050919050565b6000602082019050818103600083015261455581613fe1565b9050919050565b6000602082019050818103600083015261457581614004565b9050919050565b6000602082019050818103600083015261459581614027565b9050919050565b600060208201905081810360008301526145b58161404a565b9050919050565b600060208201905081810360008301526145d58161406d565b9050919050565b600060208201905081810360008301526145f581614090565b9050919050565b60006020820190508181036000830152614615816140b3565b9050919050565b60006020820190508181036000830152614635816140d6565b9050919050565b60006020820190508181036000830152614655816140f9565b9050919050565b600060208201905081810360008301526146758161411c565b9050919050565b600060208201905081810360008301526146958161413f565b9050919050565b600060208201905081810360008301526146b581614162565b9050919050565b600060208201905081810360008301526146d5816141a8565b9050919050565b600060208201905081810360008301526146f5816141cb565b9050919050565b60006020820190508181036000830152614715816141ee565b9050919050565b6000602082019050818103600083015261473581614211565b9050919050565b6000602082019050818103600083015261475581614234565b9050919050565b6000602082019050818103600083015261477581614257565b9050919050565b60006020820190506147916000830184614289565b92915050565b60006147a16147b2565b90506147ad8282614afa565b919050565b6000604051905090565b600067ffffffffffffffff8211156147d7576147d6614c60565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561480357614802614c60565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561482f5761482e614c60565b5b61483882614c8f565b9050602081019050919050565b600067ffffffffffffffff8211156148605761485f614c60565b5b61486982614c8f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490882614a7c565b915061491383614a7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561494857614947614bd3565b5b828201905092915050565b600061495e82614a7c565b915061496983614a7c565b92508261497957614978614c02565b5b828204905092915050565b600061498f82614a7c565b915061499a83614a7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149d3576149d2614bd3565b5b828202905092915050565b60006149e982614a7c565b91506149f483614a7c565b925082821015614a0757614a06614bd3565b5b828203905092915050565b6000614a1d82614a5c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b60006002820490506001821680614ae057607f821691505b60208210811415614af457614af3614c31565b5b50919050565b614b0382614c8f565b810181811067ffffffffffffffff82111715614b2257614b21614c60565b5b80604052505050565b6000614b3682614a7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b6957614b68614bd3565b5b600182019050919050565b6000614b7f82614b86565b9050919050565b6000614b9182614ca0565b9050919050565b6000819050919050565b6000614bad82614a7c565b9150614bb883614a7c565b925082614bc857614bc7614c02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f6572726f723a20746f6b656e4964206f7220676966745f6d696e5f6964200000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6572726f723a206665652076616c756500000000000000000000000000000000600082015250565b7f6572726f723a206e6f7420737461727400000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6572726f723a206d696e207175616e7469747920310000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574680000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f62616c616e6365207a65726f0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6572726f723a206d6178207175616e7469747900000000000000000000000000600082015250565b7f6572726f723a206f7574206f662073746f636b00000000000000000000000000600082015250565b7f6572726f723a20706179456e61626c6500000000000000000000000000000000600082015250565b7f6572726f723a20746f6b656e4964206f7220676966745f6d61785f6964000000600082015250565b7f6f7574206f662073746f636b0000000000000000000000000000000000000000600082015250565b61532381614a12565b811461532e57600080fd5b50565b61533a81614a24565b811461534557600080fd5b50565b61535181614a30565b811461535c57600080fd5b50565b61536881614a7c565b811461537357600080fd5b5056fea26469706673582212201daed8916b62e57691406c617f92ac0c59b4966fb30f22dbf6b569d9c753a99e64736f6c6343000804003300000000000000000000000000000000000000000000000000b1a2bc2ec50000

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80636352211e1161010d578063a22cb465116100a0578063ddca3f431161006f578063ddca3f43146106e0578063e6b7ad791461070b578063e985e9c514610736578063ef003e5a14610773578063f2fde38b1461079c576101f9565b8063a22cb46514610628578063ad14fa7f14610651578063b88d4fde1461067a578063c87b56dd146106a3576101f9565b8063715018a6116100dc578063715018a61461058b5780638da5cb5b146105a257806395d89b41146105cd578063a0712d68146105f8576101f9565b80636352211e146104bf57806368e24327146104fc57806369fe0e2d1461052557806370a082311461054e576101f9565b8063372c12b11161018557806355f804b31161015457806355f804b3146104195780635d70bf45146104425780635e1045ec1461046d5780635eca879414610496576101f9565b8063372c12b1146103715780633ccfd60b146103ae57806342842e0e146103c5578063447b15f4146103ee576101f9565b806312065fe0116101c157806312065fe0146102c957806318160ddd146102f457806323b872dd1461031f578063259422b514610348576101f9565b806301ffc9a7146101fb57806306fdde0314610238578063081812fc14610263578063095ea7b3146102a0576101f9565b366101f957005b005b34801561020757600080fd5b50610222600480360381019061021d9190613c79565b6107c5565b60405161022f91906143bf565b60405180910390f35b34801561024457600080fd5b5061024d6108a7565b60405161025a91906143da565b60405180910390f35b34801561026f57600080fd5b5061028a60048036038101906102859190613d0c565b610939565b6040516102979190614336565b60405180910390f35b3480156102ac57600080fd5b506102c760048036038101906102c29190613bd3565b6109be565b005b3480156102d557600080fd5b506102de610ad6565b6040516102eb919061477c565b60405180910390f35b34801561030057600080fd5b50610309610ade565b604051610316919061477c565b60405180910390f35b34801561032b57600080fd5b5061034660048036038101906103419190613a79565b610ae8565b005b34801561035457600080fd5b5061036f600480360381019061036a9190613c0f565b610b48565b005b34801561037d57600080fd5b5061039860048036038101906103939190613a14565b610c80565b6040516103a591906143bf565b60405180910390f35b3480156103ba57600080fd5b506103c3610ca1565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190613a79565b610db0565b005b3480156103fa57600080fd5b50610403610dd0565b604051610410919061477c565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190613ccb565b610dd6565b005b34801561044e57600080fd5b50610457610e6c565b604051610464919061477c565b60405180910390f35b34801561047957600080fd5b50610494600480360381019061048f9190613c0f565b610e79565b005b3480156104a257600080fd5b506104bd60048036038101906104b89190613bd3565b610fb1565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190613d0c565b611197565b6040516104f39190614336565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190613c50565b611249565b005b34801561053157600080fd5b5061054c60048036038101906105479190613d0c565b6112e3565b005b34801561055a57600080fd5b5061057560048036038101906105709190613a14565b611369565b604051610582919061477c565b60405180910390f35b34801561059757600080fd5b506105a0611421565b005b3480156105ae57600080fd5b506105b76114a9565b6040516105c49190614336565b60405180910390f35b3480156105d957600080fd5b506105e26114d3565b6040516105ef91906143da565b60405180910390f35b610612600480360381019061060d9190613d0c565b611565565b60405161061f919061439d565b60405180910390f35b34801561063457600080fd5b5061064f600480360381019061064a9190613b97565b611a2f565b005b34801561065d57600080fd5b5061067860048036038101906106739190613b43565b611bb0565b005b34801561068657600080fd5b506106a1600480360381019061069c9190613ac8565b611dfd565b005b3480156106af57600080fd5b506106ca60048036038101906106c59190613d0c565b611e5f565b6040516106d791906143da565b60405180910390f35b3480156106ec57600080fd5b506106f5611fb1565b604051610702919061477c565b60405180910390f35b34801561071757600080fd5b50610720611fb7565b60405161072d919061477c565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190613a3d565b611fd4565b60405161076a91906143bf565b60405180910390f35b34801561077f57600080fd5b5061079a60048036038101906107959190613d0c565b612068565b005b3480156107a857600080fd5b506107c360048036038101906107be9190613a14565b6120ee565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061089057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108a0575061089f826121e6565b5b9050919050565b6060600080546108b690614ac8565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290614ac8565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b5050505050905090565b600061094482612250565b610983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097a906145dc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109c982611197565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a319061469c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a596122bc565b73ffffffffffffffffffffffffffffffffffffffff161480610a885750610a8781610a826122bc565b611fd4565b5b610ac7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610abe9061453c565b60405180910390fd5b610ad183836122c4565b505050565b600047905090565b6000612710905090565b610af9610af36122bc565b8261237d565b610b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2f906146bc565b60405180910390fd5b610b4383838361245b565b505050565b610b506122bc565b73ffffffffffffffffffffffffffffffffffffffff16610b6e6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbb906145fc565b60405180910390fd5b60005b8151811015610c7c5760006126246000848481518110610c10577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c7490614b2b565b915050610bc7565b5050565b6126246020528060005260406000206000915054906101000a900460ff1681565b610ca96122bc565b73ffffffffffffffffffffffffffffffffffffffff16610cc76114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d14906145fc565b60405180910390fd5b60004711610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d579061467c565b60405180910390fd5b610d686114a9565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610dad573d6000803e3d6000fd5b50565b610dcb83838360405180602001604052806000815250611dfd565b505050565b6101f481565b610dde6122bc565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e49906145fc565b60405180910390fd5b8060089080519060200190610e6892919061370c565b5050565b6000600b80549050905090565b610e816122bc565b73ffffffffffffffffffffffffffffffffffffffff16610e9f6114a9565b73ffffffffffffffffffffffffffffffffffffffff1614610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec906145fc565b60405180910390fd5b60005b8151811015610fad5760016126246000848481518110610f41577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610fa590614b2b565b915050610ef8565b5050565b610fb96122bc565b73ffffffffffffffffffffffffffffffffffffffff16610fd76114a9565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906145fc565b60405180910390fd5b6126168111611071576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611068906143fc565b60405180910390fd5b6127108111156110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad9061473c565b60405180910390fd5b6126166127106110c691906149de565b600c805490501061110c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111039061475c565b60405180910390fd5b600081905061111b83826126b7565b600c8190806001815401808255809150506001900390600052602060002001600090919091909150558273ffffffffffffffffffffffffffffffffffffffff167f50945eac086e4b309898a7a477f908debe57075da46d6b1c24c431533a79ac428260405161118a919061477c565b60405180910390a2505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112379061457c565b60405180910390fd5b80915050919050565b6112516122bc565b73ffffffffffffffffffffffffffffffffffffffff1661126f6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906145fc565b60405180910390fd5b8061262560006101000a81548160ff02191690831515021790555050565b6112eb6122bc565b73ffffffffffffffffffffffffffffffffffffffff166113096114a9565b73ffffffffffffffffffffffffffffffffffffffff161461135f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611356906145fc565b60405180910390fd5b80600a8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d19061455c565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114296122bc565b73ffffffffffffffffffffffffffffffffffffffff166114476114a9565b73ffffffffffffffffffffffffffffffffffffffff161461149d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611494906145fc565b60405180910390fd5b6114a760006126d5565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546114e290614ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461150e90614ac8565b801561155b5780601f106115305761010080835404028352916020019161155b565b820191906000526020600020905b81548152906001019060200180831161153e57829003601f168201915b5050505050905090565b6060600082116115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a19061451c565b60405180910390fd5b6009548211156115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906146dc565b60405180910390fd5b61261682600b8054905061160391906148fd565b1115611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b906146fc565b60405180910390fd5b6001151561262560009054906101000a900460ff16151514806116b857506001151561262460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b6116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061449c565b60405180910390fd5b60008267ffffffffffffffff811115611739577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156117675781602001602082028036833780820191505090505b5090506001151561262560009054906101000a900460ff16151514806117de57506001151561262460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515145b15611a265760006117fa84600a5461279b90919063ffffffff16565b905080341461183e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118359061447c565b60405180910390fd5b6000806101f4600b8054905010801561186f57506101f461186d87600b805490506127b190919063ffffffff16565b115b156118e85760006118a26101f461189489600b805490506127b190919063ffffffff16565b6127c790919063ffffffff16565b90506118b981600a5461279b90919063ffffffff16565b91506118c4826127dd565b6118d782856127c790919063ffffffff16565b92506118e283612bd3565b5061192f565b6101f461190387600b805490506127b190919063ffffffff16565b1161191d576000905082915061191882612bd3565b61192e565b8290506000915061192d816127dd565b5b5b60005b868110156119d3576000611944612d9c565b905061195033826126b7565b600b819080600181540180825580915050600190039060005260206000200160009091909190915055808683815181106119b3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250505080806119cb90614b2b565b915050611932565b503373ffffffffffffffffffffffffffffffffffffffff167f161e97548145c597ae5c1588066ef89887bfed5b0a1d280de8303005890c258385604051611a1a919061439d565b60405180910390a25050505b80915050919050565b611a376122bc565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9c906144dc565b60405180910390fd5b8060056000611ab26122bc565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611b5f6122bc565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ba491906143bf565b60405180910390a35050565b611bb86122bc565b73ffffffffffffffffffffffffffffffffffffffff16611bd66114a9565b73ffffffffffffffffffffffffffffffffffffffff1614611c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c23906145fc565b60405180910390fd5b60005b8151811015611da9576000828281518110611c73577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015190506126168111611cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb8906143fc565b60405180910390fd5b612710811115611d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cfd9061473c565b60405180910390fd5b612616612710611d1691906149de565b600c8054905010611d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d539061475c565b60405180910390fd5b6000819050611d6b85826126b7565b600c81908060018154018082558091505060019003906000526020600020016000909190919091505550508080611da190614b2b565b915050611c2f565b508173ffffffffffffffffffffffffffffffffffffffff167f11746f8c422942929358475a982f830d26a4b359df206f749512c9fc80207d538251604051611df1919061477c565b60405180910390a25050565b611e0e611e086122bc565b8361237d565b611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e44906146bc565b60405180910390fd5b611e5984848484612fdc565b50505050565b6060611e6a82612250565b611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea0906145bc565b60405180910390fd5b6000600660008481526020019081526020016000208054611ec990614ac8565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef590614ac8565b8015611f425780601f10611f1757610100808354040283529160200191611f42565b820191906000526020600020905b815481529060010190602001808311611f2557829003601f168201915b505050505090506000611f53613038565b9050600081511415611f69578192505050611fac565b600082511115611f9e578082604051602001611f869291906142af565b60405160208183030381529060405292505050611fac565b611fa7846130ca565b925050505b919050565b600a5481565b6000600c80549050600b80549050611fcf91906148fd565b905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120706122bc565b73ffffffffffffffffffffffffffffffffffffffff1661208e6114a9565b73ffffffffffffffffffffffffffffffffffffffff16146120e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120db906145fc565b60405180910390fd5b8060098190555050565b6120f66122bc565b73ffffffffffffffffffffffffffffffffffffffff166121146114a9565b73ffffffffffffffffffffffffffffffffffffffff161461216a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612161906145fc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d19061443c565b60405180910390fd5b6121e3816126d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661233783611197565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061238882612250565b6123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be906144fc565b60405180910390fd5b60006123d283611197565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061244157508373ffffffffffffffffffffffffffffffffffffffff1661242984610939565b73ffffffffffffffffffffffffffffffffffffffff16145b8061245257506124518185611fd4565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661247b82611197565b73ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c89061461c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612541576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612538906144bc565b60405180910390fd5b61254c838383613171565b6125576000826122c4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125a791906149de565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125fe91906148fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6126d1828260405180602001604052806000815250613176565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836127a99190614984565b905092915050565b600081836127bf91906148fd565b905092915050565b600081836127d591906149de565b905092915050565b600061280660646127f860058561279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612831606461282360328661279b90919063ffffffff16565b6131d190919063ffffffff16565b9050600061285c606461284e60288761279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612897826128898561287b888a6127c790919063ffffffff16565b6127c790919063ffffffff16565b6127c790919063ffffffff16565b9050600081116128dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d39061471c565b60405180910390fd5b6000736fd792cbfc83accdfadbc41dfa6e1c7783f2af9873ffffffffffffffffffffffffffffffffffffffff1685604051612916906142d3565b60006040518083038185875af1925050503d8060008114612953576040519150601f19603f3d011682016040523d82523d6000602084013e612958565b606091505b505090508061299c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129939061463c565b60405180910390fd5b600073c714c774a86f87721bbe78b7cd5f49a543abe97573ffffffffffffffffffffffffffffffffffffffff16856040516129d6906142d3565b60006040518083038185875af1925050503d8060008114612a13576040519150601f19603f3d011682016040523d82523d6000602084013e612a18565b606091505b5050905080612a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a539061463c565b60405180910390fd5b60007369b40b7eb1fa0601b2e9a68fcde1899d0ef177e373ffffffffffffffffffffffffffffffffffffffff1685604051612a96906142d3565b60006040518083038185875af1925050503d8060008114612ad3576040519150601f19603f3d011682016040523d82523d6000602084013e612ad8565b606091505b5050905080612b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b139061463c565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff1685604051612b42906142d3565b60006040518083038185875af1925050503d8060008114612b7f576040519150601f19603f3d011682016040523d82523d6000602084013e612b84565b606091505b5050905080612bc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbf9061463c565b60405180910390fd5b505050505050505050565b6000612bfc6064612bee60058561279b90919063ffffffff16565b6131d190919063ffffffff16565b90506000612c1382846127c790919063ffffffff16565b90506000736fd792cbfc83accdfadbc41dfa6e1c7783f2af9873ffffffffffffffffffffffffffffffffffffffff1683604051612c4f906142d3565b60006040518083038185875af1925050503d8060008114612c8c576040519150601f19603f3d011682016040523d82523d6000602084013e612c91565b606091505b5050905080612cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccc9061463c565b60405180910390fd5b600073c714c774a86f87721bbe78b7cd5f49a543abe97573ffffffffffffffffffffffffffffffffffffffff1683604051612d0f906142d3565b60006040518083038185875af1925050503d8060008114612d4c576040519150601f19603f3d011682016040523d82523d6000602084013e612d51565b606091505b5050905080612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c9061463c565b60405180910390fd5b5050505050565b60008061262354612616612db091906149de565b905060008161262354334442604051602001612dcf94939291906142e8565b6040516020818303038152906040528051906020012060001c612df29190614ba2565b9050600080600d836126168110612e32577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b015414612e7d57600d826126168110612e74577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01549050612e81565b8190505b6000600d600185612e9291906149de565b6126168110612eca577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01541415612f2457600183612edf91906149de565b600d836126168110612f1a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0181905550612fae565b600d600184612f3391906149de565b6126168110612f6b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b0154600d836126168110612fa8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b01819055505b6126236000815480929190612fc290614b2b565b9190505550600181612fd491906148fd565b935050505090565b612fe784848461245b565b612ff3848484846131e7565b613032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130299061441c565b60405180910390fd5b50505050565b60606008805461304790614ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461307390614ac8565b80156130c05780601f10613095576101008083540402835291602001916130c0565b820191906000526020600020905b8154815290600101906020018083116130a357829003601f168201915b5050505050905090565b60606130d582612250565b613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b9061465c565b60405180910390fd5b600061311e613038565b9050600081511161313e5760405180602001604052806000815250613169565b806131488461337e565b6040516020016131599291906142af565b6040516020818303038152906040525b915050919050565b505050565b613180838361352b565b61318d60008484846131e7565b6131cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c39061441c565b60405180910390fd5b505050565b600081836131df9190614953565b905092915050565b60006132088473ffffffffffffffffffffffffffffffffffffffff166136f9565b15613371578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026132316122bc565b8786866040518563ffffffff1660e01b81526004016132539493929190614351565b602060405180830381600087803b15801561326d57600080fd5b505af192505050801561329e57506040513d601f19601f8201168201806040525081019061329b9190613ca2565b60015b613321573d80600081146132ce576040519150601f19603f3d011682016040523d82523d6000602084013e6132d3565b606091505b50600081511415613319576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133109061441c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613376565b600190505b949350505050565b606060008214156133c6576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613526565b600082905060005b600082146133f85780806133e190614b2b565b915050600a826133f19190614953565b91506133ce565b60008167ffffffffffffffff81111561343a577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f19166020018201604052801561346c5781602001600182028036833780820191505090505b5090505b6000851461351f5760018261348591906149de565b9150600a856134949190614ba2565b60306134a091906148fd565b60f81b8183815181106134dc577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135189190614953565b9450613470565b8093505050505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561359b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135929061459c565b60405180910390fd5b6135a481612250565b156135e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135db9061445c565b60405180910390fd5b6135f060008383613171565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461364091906148fd565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461371890614ac8565b90600052602060002090601f01602090048101928261373a5760008555613781565b82601f1061375357805160ff1916838001178555613781565b82800160010185558215613781579182015b82811115613780578251825591602001919060010190613765565b5b50905061378e9190613792565b5090565b5b808211156137ab576000816000905550600101613793565b5090565b60006137c26137bd846147bc565b614797565b905080838252602082019050828560208602820111156137e157600080fd5b60005b8581101561381157816137f78882613903565b8452602084019350602083019250506001810190506137e4565b5050509392505050565b600061382e613829846147e8565b614797565b9050808382526020820190508285602086028201111561384d57600080fd5b60005b8581101561387d578161386388826139ff565b845260208401935060208301925050600181019050613850565b5050509392505050565b600061389a61389584614814565b614797565b9050828152602081018484840111156138b257600080fd5b6138bd848285614a86565b509392505050565b60006138d86138d384614845565b614797565b9050828152602081018484840111156138f057600080fd5b6138fb848285614a86565b509392505050565b6000813590506139128161531a565b92915050565b600082601f83011261392957600080fd5b81356139398482602086016137af565b91505092915050565b600082601f83011261395357600080fd5b813561396384826020860161381b565b91505092915050565b60008135905061397b81615331565b92915050565b60008135905061399081615348565b92915050565b6000815190506139a581615348565b92915050565b600082601f8301126139bc57600080fd5b81356139cc848260208601613887565b91505092915050565b600082601f8301126139e657600080fd5b81356139f68482602086016138c5565b91505092915050565b600081359050613a0e8161535f565b92915050565b600060208284031215613a2657600080fd5b6000613a3484828501613903565b91505092915050565b60008060408385031215613a5057600080fd5b6000613a5e85828601613903565b9250506020613a6f85828601613903565b9150509250929050565b600080600060608486031215613a8e57600080fd5b6000613a9c86828701613903565b9350506020613aad86828701613903565b9250506040613abe868287016139ff565b9150509250925092565b60008060008060808587031215613ade57600080fd5b6000613aec87828801613903565b9450506020613afd87828801613903565b9350506040613b0e878288016139ff565b925050606085013567ffffffffffffffff811115613b2b57600080fd5b613b37878288016139ab565b91505092959194509250565b60008060408385031215613b5657600080fd5b6000613b6485828601613903565b925050602083013567ffffffffffffffff811115613b8157600080fd5b613b8d85828601613942565b9150509250929050565b60008060408385031215613baa57600080fd5b6000613bb885828601613903565b9250506020613bc98582860161396c565b9150509250929050565b60008060408385031215613be657600080fd5b6000613bf485828601613903565b9250506020613c05858286016139ff565b9150509250929050565b600060208284031215613c2157600080fd5b600082013567ffffffffffffffff811115613c3b57600080fd5b613c4784828501613918565b91505092915050565b600060208284031215613c6257600080fd5b6000613c708482850161396c565b91505092915050565b600060208284031215613c8b57600080fd5b6000613c9984828501613981565b91505092915050565b600060208284031215613cb457600080fd5b6000613cc284828501613996565b91505092915050565b600060208284031215613cdd57600080fd5b600082013567ffffffffffffffff811115613cf757600080fd5b613d03848285016139d5565b91505092915050565b600060208284031215613d1e57600080fd5b6000613d2c848285016139ff565b91505092915050565b6000613d41838361427a565b60208301905092915050565b613d5681614a12565b82525050565b613d6d613d6882614a12565b614b74565b82525050565b6000613d7e82614886565b613d8881856148b4565b9350613d9383614876565b8060005b83811015613dc4578151613dab8882613d35565b9750613db6836148a7565b925050600181019050613d97565b5085935050505092915050565b613dda81614a24565b82525050565b6000613deb82614891565b613df581856148c5565b9350613e05818560208601614a95565b613e0e81614c8f565b840191505092915050565b6000613e248261489c565b613e2e81856148e1565b9350613e3e818560208601614a95565b613e4781614c8f565b840191505092915050565b6000613e5d8261489c565b613e6781856148f2565b9350613e77818560208601614a95565b80840191505092915050565b6000613e90601e836148e1565b9150613e9b82614cad565b602082019050919050565b6000613eb36032836148e1565b9150613ebe82614cd6565b604082019050919050565b6000613ed66026836148e1565b9150613ee182614d25565b604082019050919050565b6000613ef9601c836148e1565b9150613f0482614d74565b602082019050919050565b6000613f1c6010836148e1565b9150613f2782614d9d565b602082019050919050565b6000613f3f6010836148e1565b9150613f4a82614dc6565b602082019050919050565b6000613f626024836148e1565b9150613f6d82614def565b604082019050919050565b6000613f856019836148e1565b9150613f9082614e3e565b602082019050919050565b6000613fa8602c836148e1565b9150613fb382614e67565b604082019050919050565b6000613fcb6015836148e1565b9150613fd682614eb6565b602082019050919050565b6000613fee6038836148e1565b9150613ff982614edf565b604082019050919050565b6000614011602a836148e1565b915061401c82614f2e565b604082019050919050565b60006140346029836148e1565b915061403f82614f7d565b604082019050919050565b60006140576020836148e1565b915061406282614fcc565b602082019050919050565b600061407a6031836148e1565b915061408582614ff5565b604082019050919050565b600061409d602c836148e1565b91506140a882615044565b604082019050919050565b60006140c06020836148e1565b91506140cb82615093565b602082019050919050565b60006140e36029836148e1565b91506140ee826150bc565b604082019050919050565b60006141066012836148e1565b91506141118261510b565b602082019050919050565b6000614129602f836148e1565b915061413482615134565b604082019050919050565b600061414c600c836148e1565b915061415782615183565b602082019050919050565b600061416f6021836148e1565b915061417a826151ac565b604082019050919050565b60006141926000836148d6565b915061419d826151fb565b600082019050919050565b60006141b56031836148e1565b91506141c0826151fe565b604082019050919050565b60006141d86013836148e1565b91506141e38261524d565b602082019050919050565b60006141fb6013836148e1565b915061420682615276565b602082019050919050565b600061421e6010836148e1565b91506142298261529f565b602082019050919050565b6000614241601d836148e1565b915061424c826152c8565b602082019050919050565b6000614264600c836148e1565b915061426f826152f1565b602082019050919050565b61428381614a7c565b82525050565b61429281614a7c565b82525050565b6142a96142a482614a7c565b614b98565b82525050565b60006142bb8285613e52565b91506142c78284613e52565b91508190509392505050565b60006142de82614185565b9150819050919050565b60006142f48287614298565b6020820191506143048286613d5c565b6014820191506143148285614298565b6020820191506143248284614298565b60208201915081905095945050505050565b600060208201905061434b6000830184613d4d565b92915050565b60006080820190506143666000830187613d4d565b6143736020830186613d4d565b6143806040830185614289565b81810360608301526143928184613de0565b905095945050505050565b600060208201905081810360008301526143b78184613d73565b905092915050565b60006020820190506143d46000830184613dd1565b92915050565b600060208201905081810360008301526143f48184613e19565b905092915050565b6000602082019050818103600083015261441581613e83565b9050919050565b6000602082019050818103600083015261443581613ea6565b9050919050565b6000602082019050818103600083015261445581613ec9565b9050919050565b6000602082019050818103600083015261447581613eec565b9050919050565b6000602082019050818103600083015261449581613f0f565b9050919050565b600060208201905081810360008301526144b581613f32565b9050919050565b600060208201905081810360008301526144d581613f55565b9050919050565b600060208201905081810360008301526144f581613f78565b9050919050565b6000602082019050818103600083015261451581613f9b565b9050919050565b6000602082019050818103600083015261453581613fbe565b9050919050565b6000602082019050818103600083015261455581613fe1565b9050919050565b6000602082019050818103600083015261457581614004565b9050919050565b6000602082019050818103600083015261459581614027565b9050919050565b600060208201905081810360008301526145b58161404a565b9050919050565b600060208201905081810360008301526145d58161406d565b9050919050565b600060208201905081810360008301526145f581614090565b9050919050565b60006020820190508181036000830152614615816140b3565b9050919050565b60006020820190508181036000830152614635816140d6565b9050919050565b60006020820190508181036000830152614655816140f9565b9050919050565b600060208201905081810360008301526146758161411c565b9050919050565b600060208201905081810360008301526146958161413f565b9050919050565b600060208201905081810360008301526146b581614162565b9050919050565b600060208201905081810360008301526146d5816141a8565b9050919050565b600060208201905081810360008301526146f5816141cb565b9050919050565b60006020820190508181036000830152614715816141ee565b9050919050565b6000602082019050818103600083015261473581614211565b9050919050565b6000602082019050818103600083015261475581614234565b9050919050565b6000602082019050818103600083015261477581614257565b9050919050565b60006020820190506147916000830184614289565b92915050565b60006147a16147b2565b90506147ad8282614afa565b919050565b6000604051905090565b600067ffffffffffffffff8211156147d7576147d6614c60565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561480357614802614c60565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561482f5761482e614c60565b5b61483882614c8f565b9050602081019050919050565b600067ffffffffffffffff8211156148605761485f614c60565b5b61486982614c8f565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061490882614a7c565b915061491383614a7c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561494857614947614bd3565b5b828201905092915050565b600061495e82614a7c565b915061496983614a7c565b92508261497957614978614c02565b5b828204905092915050565b600061498f82614a7c565b915061499a83614a7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149d3576149d2614bd3565b5b828202905092915050565b60006149e982614a7c565b91506149f483614a7c565b925082821015614a0757614a06614bd3565b5b828203905092915050565b6000614a1d82614a5c565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ab3578082015181840152602081019050614a98565b83811115614ac2576000848401525b50505050565b60006002820490506001821680614ae057607f821691505b60208210811415614af457614af3614c31565b5b50919050565b614b0382614c8f565b810181811067ffffffffffffffff82111715614b2257614b21614c60565b5b80604052505050565b6000614b3682614a7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b6957614b68614bd3565b5b600182019050919050565b6000614b7f82614b86565b9050919050565b6000614b9182614ca0565b9050919050565b6000819050919050565b6000614bad82614a7c565b9150614bb883614a7c565b925082614bc857614bc7614c02565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f6572726f723a20746f6b656e4964206f7220676966745f6d696e5f6964200000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6572726f723a206665652076616c756500000000000000000000000000000000600082015250565b7f6572726f723a206e6f7420737461727400000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f6572726f723a206d696e207175616e7469747920310000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f2073656e64204574680000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f62616c616e6365207a65726f0000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6572726f723a206d6178207175616e7469747900000000000000000000000000600082015250565b7f6572726f723a206f7574206f662073746f636b00000000000000000000000000600082015250565b7f6572726f723a20706179456e61626c6500000000000000000000000000000000600082015250565b7f6572726f723a20746f6b656e4964206f7220676966745f6d61785f6964000000600082015250565b7f6f7574206f662073746f636b0000000000000000000000000000000000000000600082015250565b61532381614a12565b811461532e57600080fd5b50565b61533a81614a24565b811461534557600080fd5b50565b61535181614a30565b811461535c57600080fd5b50565b61536881614a7c565b811461537357600080fd5b5056fea26469706673582212201daed8916b62e57691406c617f92ac0c59b4966fb30f22dbf6b569d9c753a99e64736f6c63430008040033

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

00000000000000000000000000000000000000000000000000b1a2bc2ec50000

-----Decoded View---------------
Arg [0] : _fee (uint256): 50000000000000000

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000b1a2bc2ec50000


Deployed Bytecode Sourcemap

108031:8812:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20057:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21002:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22561:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22084:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;116014:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116574:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23451:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;114707:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;109001:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116121:167;;;;;;;;;;;;;:::i;:::-;;23861:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;108296:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;114909:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;116452:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;114505:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;112887:521;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20696:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;114220:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;114313:75;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20426:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43824:94;;;;;;;;;;;;;:::i;:::-;;43173:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21171:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;109391:1967;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22854:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;113416:796;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24117:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32496:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;108800:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;116296:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23220:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;114400:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44073:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20057:305;20159:4;20211:25;20196:40;;;:11;:40;;;;:105;;;;20268:33;20253:48;;;:11;:48;;;;20196:105;:158;;;;20318:36;20342:11;20318:23;:36::i;:::-;20196:158;20176:178;;20057:305;;;:::o;21002:100::-;21056:13;21089:5;21082:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21002:100;:::o;22561:221::-;22637:7;22665:16;22673:7;22665;:16::i;:::-;22657:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22750:15;:24;22766:7;22750:24;;;;;;;;;;;;;;;;;;;;;22743:31;;22561:221;;;:::o;22084:411::-;22165:13;22181:23;22196:7;22181:14;:23::i;:::-;22165:39;;22229:5;22223:11;;:2;:11;;;;22215:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22323:5;22307:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22332:37;22349:5;22356:12;:10;:12::i;:::-;22332:16;:37::i;:::-;22307:62;22285:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;22466:21;22475:2;22479:7;22466:8;:21::i;:::-;22084:411;;;:::o;116014:99::-;116057:7;116084:21;116077:28;;116014:99;:::o;116574:83::-;116617:7;108187:5;116636:13;;116574:83;:::o;23451:339::-;23646:41;23665:12;:10;:12::i;:::-;23679:7;23646:18;:41::i;:::-;23638:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;23754:28;23764:4;23770:2;23774:7;23754:9;:28::i;:::-;23451:339;;;:::o;114707:194::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114786:13:::1;114781:113;114813:5;:12;114805:5;:20;114781:113;;;114877:5;114851:9;:23;114861:5;114867;114861:12;;;;;;;;;;;;;;;;;;;;;;114851:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;114827:7;;;;;:::i;:::-;;;;114781:113;;;;114707:194:::0;:::o;109001:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;116121:167::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;116203:1:::1;116179:21;:25;116171:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;116240:7;:5;:7::i;:::-;116232:25;;:48;116258:21;116232:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;116121:167::o:0;23861:185::-;23999:39;24016:4;24022:2;24026:7;23999:39;;;;;;;;;;;;:16;:39::i;:::-;23861:185;;;:::o;108296:40::-;108333:3;108296:40;:::o;114909:92::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114989:4:::1;114979:7;:14;;;;;;;;;;;;:::i;:::-;;114909:92:::0;:::o;116452:114::-;116500:7;116526:25;:32;;;;116519:39;;116452:114;:::o;114505:194::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114585:13:::1;114580:112;114612:5;:12;114604:5;:20;114580:112;;;114676:4;114650:9;:23;114660:5;114666;114660:12;;;;;;;;;;;;;;;;;;;;;;114650:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;114626:7;;;;;:::i;:::-;;;;114580:112;;;;114505:194:::0;:::o;112887:521::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;108238:4:::1;112977:8;:22;112969:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;108187:5;113053:8;:18;;113045:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;108238:4;108187:5;113172:20;;;;:::i;:::-;113138:24;:31;;;;:54;113116:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;113245:15;113263:8;113245:26;;113282:32;113300:3;113306:7;113282:9;:32::i;:::-;113325:24;113355:7;113325:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;113387:3;113379:21;;;113392:7;113379:21;;;;;;:::i;:::-;;;;;;;;43464:1;112887:521:::0;;:::o;20696:239::-;20768:7;20788:13;20804:7;:16;20812:7;20804:16;;;;;;;;;;;;;;;;;;;;;20788:32;;20856:1;20839:19;;:5;:19;;;;20831:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20922:5;20915:12;;;20696:239;;;:::o;114220:85::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114291:6:::1;114281:7;;:16;;;;;;;;;;;;;;;;;;114220:85:::0;:::o;114313:75::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114376:4:::1;114370:3;:10;;;;114313:75:::0;:::o;20426:208::-;20498:7;20543:1;20526:19;;:5;:19;;;;20518:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;20610:9;:16;20620:5;20610:16;;;;;;;;;;;;;;;;20603:23;;20426:208;;;:::o;43824:94::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43889:21:::1;43907:1;43889:9;:21::i;:::-;43824:94::o:0;43173:87::-;43219:7;43246:6;;;;;;;;;;;43239:13;;43173:87;:::o;21171:104::-;21227:13;21260:7;21253:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21171:104;:::o;109391:1967::-;109450:16;109499:1;109487:9;:13;109479:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;109557:13;;109544:9;:26;;109536:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;108238:4;109663:9;109628:25;:32;;;;:44;;;;:::i;:::-;:59;;109606:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;109766:4;109755:15;;:7;;;;;;;;;;;:15;;;:48;;;;109799:4;109774:29;;:9;:21;109784:10;109774:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;109755:48;109747:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;109836:20;109873:9;109859:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109836:47;;109908:4;109897:15;;:7;;;;;;;;;;;:15;;;:48;;;;109941:4;109916:29;;:9;:21;109926:10;109916:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;109897:48;109894:1436;;;109961:10;109975:18;109983:9;109975:3;;:7;;:18;;;;:::i;:::-;109961:32;;110029:5;110016:9;:18;110008:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;110070:15;110101:13;108333:3;110146:25;:32;;;;:43;:105;;;;;108333:3;110193:47;110230:9;110193:25;:32;;;;:36;;:47;;;;:::i;:::-;:58;110146:105;110143:808;;;110307:18;110328:63;108333:3;110328:47;110365:9;110328:25;:32;;;;:36;;:47;;;;:::i;:::-;:51;;:63;;;;:::i;:::-;110307:84;;110421:22;110429:13;110421:3;;:7;;:22;;;;:::i;:::-;110410:33;;110462:18;110471:8;110462;:18::i;:::-;110511:19;110521:8;110511:5;:9;;:19;;;;:::i;:::-;110501:29;;110549:20;110561:7;110549:11;:20::i;:::-;110143:808;;;;108333:3;110595:47;110632:9;110595:25;:32;;;;:36;;:47;;;;:::i;:::-;:59;110592:359;;110713:1;110702:12;;110743:5;110733:15;;110767:20;110779:7;110767:11;:20::i;:::-;110592:359;;;110864:5;110853:16;;110896:1;110888:9;;110917:18;110926:8;110917;:18::i;:::-;110592:359;110143:808;110983:13;110978:269;111010:9;111002:5;:17;110978:269;;;111049:15;111067:9;:7;:9::i;:::-;111049:27;;111095:39;111113:10;111126:7;111095:9;:39::i;:::-;111153:25;111184:7;111153:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111224:7;111211:3;111215:5;111211:10;;;;;;;;;;;;;;;;;;;;;:20;;;;;110978:269;111021:7;;;;;:::i;:::-;;;;110978:269;;;;111290:10;111280:26;;;111302:3;111280:26;;;;;;:::i;:::-;;;;;;;;109894:1436;;;;111347:3;111340:10;;;109391:1967;;;:::o;22854:295::-;22969:12;:10;:12::i;:::-;22957:24;;:8;:24;;;;22949:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23069:8;23024:18;:32;23043:12;:10;:12::i;:::-;23024:32;;;;;;;;;;;;;;;:42;23057:8;23024:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23122:8;23093:48;;23108:12;:10;:12::i;:::-;23093:48;;;23132:8;23093:48;;;;;;:::i;:::-;;;;;;;;22854:295;;:::o;113416:796::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;113595:13:::1;113590:562;113622:9;:16;113614:5;:24;113590:562;;;113664:16;113683:9;113693:5;113683:16;;;;;;;;;;;;;;;;;;;;;;113664:35;;108238:4;113722:8;:22;113714:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;108187:5;113802:8;:18;;113794:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;108238:4;108187:5;113929:20;;;;:::i;:::-;113895:24;:31;;;;:54;113869:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;114014:15;114032:8;114014:26;;114055:32;114073:3;114079:7;114055:9;:32::i;:::-;114102:24;114132:7;114102:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;113590:562;;113640:7;;;;;:::i;:::-;;;;113590:562;;;;114182:3;114167:37;;;114187:9;:16;114167:37;;;;;;:::i;:::-;;;;;;;;113416:796:::0;;:::o;24117:328::-;24292:41;24311:12;:10;:12::i;:::-;24325:7;24292:18;:41::i;:::-;24284:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24398:39;24412:4;24418:2;24422:7;24431:5;24398:13;:39::i;:::-;24117:328;;;;:::o;32496:679::-;32569:13;32603:16;32611:7;32603;:16::i;:::-;32595:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;32686:23;32712:10;:19;32723:7;32712:19;;;;;;;;;;;32686:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32742:18;32763:10;:8;:10::i;:::-;32742:31;;32871:1;32855:4;32849:18;:23;32845:72;;;32896:9;32889:16;;;;;;32845:72;33047:1;33027:9;33021:23;:27;33017:108;;;33096:4;33102:9;33079:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33065:48;;;;;;33017:108;33144:23;33159:7;33144:14;:23::i;:::-;33137:30;;;;32496:679;;;;:::o;108800:18::-;;;;:::o;116296:148::-;116344:7;116405:24;:31;;;;116370:25;:32;;;;:66;;;;:::i;:::-;116363:73;;116296:148;:::o;23220:164::-;23317:4;23341:18;:25;23360:5;23341:25;;;;;;;;;;;;;;;:35;23367:8;23341:35;;;;;;;;;;;;;;;;;;;;;;;;;23334:42;;23220:164;;;;:::o;114400:97::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;114483:6:::1;114467:13;:22;;;;114400:97:::0;:::o;44073:192::-;43404:12;:10;:12::i;:::-;43393:23;;:7;:5;:7::i;:::-;:23;;;43385:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44182:1:::1;44162:22;;:8;:22;;;;44154:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44238:19;44248:8;44238:9;:19::i;:::-;44073:192:::0;:::o;18664:157::-;18749:4;18788:25;18773:40;;;:11;:40;;;;18766:47;;18664:157;;;:::o;25955:127::-;26020:4;26072:1;26044:30;;:7;:16;26052:7;26044:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26037:37;;25955:127;;;:::o;15738:98::-;15791:7;15818:10;15811:17;;15738:98;:::o;29937:174::-;30039:2;30012:15;:24;30028:7;30012:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30095:7;30091:2;30057:46;;30066:23;30081:7;30066:14;:23::i;:::-;30057:46;;;;;;;;;;;;29937:174;;:::o;26249:348::-;26342:4;26367:16;26375:7;26367;:16::i;:::-;26359:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26443:13;26459:23;26474:7;26459:14;:23::i;:::-;26443:39;;26512:5;26501:16;;:7;:16;;;:51;;;;26545:7;26521:31;;:20;26533:7;26521:11;:20::i;:::-;:31;;;26501:51;:87;;;;26556:32;26573:5;26580:7;26556:16;:32::i;:::-;26501:87;26493:96;;;26249:348;;;;:::o;29241:578::-;29400:4;29373:31;;:23;29388:7;29373:14;:23::i;:::-;:31;;;29365:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;29483:1;29469:16;;:2;:16;;;;29461:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;29539:39;29560:4;29566:2;29570:7;29539:20;:39::i;:::-;29643:29;29660:1;29664:7;29643:8;:29::i;:::-;29704:1;29685:9;:15;29695:4;29685:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;29733:1;29716:9;:13;29726:2;29716:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29764:2;29745:7;:16;29753:7;29745:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29803:7;29799:2;29784:27;;29793:4;29784:27;;;;;;;;;;;;29241:578;;;:::o;26939:110::-;27015:26;27025:2;27029:7;27015:26;;;;;;;;;;;;:9;:26::i;:::-;26939:110;;:::o;44273:173::-;44329:16;44348:6;;;;;;;;;;;44329:25;;44374:8;44365:6;;:17;;;;;;;;;;;;;;;;;;44429:8;44398:40;;44419:8;44398:40;;;;;;;;;;;;44273:173;;:::o;37456:98::-;37514:7;37545:1;37541;:5;;;;:::i;:::-;37534:12;;37456:98;;;;:::o;36718:::-;36776:7;36807:1;36803;:5;;;;:::i;:::-;36796:12;;36718:98;;;;:::o;37099:::-;37157:7;37188:1;37184;:5;;;;:::i;:::-;37177:12;;37099:98;;;;:::o;111832:1047::-;111886:12;111901:36;111933:3;111901:27;108482:1;111901:5;:9;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;111886:51;;111952:15;111970:39;112005:3;111970:30;108635:2;111970:5;:9;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;111952:57;;112024:13;112040:37;112073:3;112040:28;108785:2;112040:5;:9;;:28;;;;:::i;:::-;:32;;:37;;;;:::i;:::-;112024:53;;112092:12;112107:39;112140:5;112107:28;112127:7;112107:15;112117:4;112107:5;:9;;:15;;;;:::i;:::-;:19;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;112092:54;;112175:1;112170:4;:6;112162:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;112215:11;108389:42;112231:26;;112283:4;112231:75;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112214:92;;;112329:6;112321:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;112388:14;108539:42;112407:29;;112462:7;112407:81;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112387:101;;;112511:9;112503:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;112562:12;108691:42;112579:27;;112632:5;112579:77;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112561:95;;;112679:7;112671:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;112727:11;112759:4;112743:27;;112796:4;112743:76;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112726:93;;;112842:6;112834:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;111832:1047;;;;;;;;;:::o;111366:458::-;111419:12;111434:36;111466:3;111434:27;108482:1;111434:5;:9;;:27;;;;:::i;:::-;:31;;:36;;;;:::i;:::-;111419:51;;111481:15;111499;111509:4;111499:5;:9;;:15;;;;:::i;:::-;111481:33;;111528:11;108389:42;111544:26;;111592:4;111544:67;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111527:84;;;111630:6;111622:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;111673:14;108539:42;111692:29;;111743:7;111692:73;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;111672:93;;;111784:9;111776:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;111366:458;;;;;:::o;115009:997::-;115046:7;115066:17;115100:5;;108238:4;115086:19;;;;:::i;:::-;115066:39;;115116:13;115384:9;115221:5;;115249:10;115282:16;115321:15;115182:173;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;115154:216;;;;;;115132:249;;:261;;;;:::i;:::-;115116:277;;115404:13;115454:1;115436:7;115444:5;115436:14;;;;;;;;;;;;;;;;;:19;115432:120;;115480:7;115488:5;115480:14;;;;;;;;;;;;;;;;;115472:22;;115432:120;;;115535:5;115527:13;;115432:120;115643:1;115617:7;115637:1;115625:9;:13;;;;:::i;:::-;115617:22;;;;;;;;;;;;;;;;;:27;115613:283;;;115754:1;115742:9;:13;;;;:::i;:::-;115725:7;115733:5;115725:14;;;;;;;;;;;;;;;;:30;;;;115613:283;;;115862:7;115882:1;115870:9;:13;;;;:::i;:::-;115862:22;;;;;;;;;;;;;;;;;115845:7;115853:5;115845:14;;;;;;;;;;;;;;;;:39;;;;115613:283;115906:5;;:7;;;;;;;;;:::i;:::-;;;;;;115997:1;115989:5;:9;;;;:::i;:::-;115982:16;;;;;115009:997;:::o;25327:315::-;25484:28;25494:4;25500:2;25504:7;25484:9;:28::i;:::-;25531:48;25554:4;25560:2;25564:7;25573:5;25531:22;:48::i;:::-;25523:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25327:315;;;;:::o;116665:100::-;116717:13;116750:7;116743:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;116665:100;:::o;21346:334::-;21419:13;21453:16;21461:7;21453;:16::i;:::-;21445:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;21534:21;21558:10;:8;:10::i;:::-;21534:34;;21610:1;21592:7;21586:21;:25;:86;;;;;;;;;;;;;;;;;21638:7;21647:18;:7;:16;:18::i;:::-;21621:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21586:86;21579:93;;;21346:334;;;:::o;32047:126::-;;;;:::o;27276:321::-;27406:18;27412:2;27416:7;27406:5;:18::i;:::-;27457:54;27488:1;27492:2;27496:7;27505:5;27457:22;:54::i;:::-;27435:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;27276:321;;;:::o;37855:98::-;37913:7;37944:1;37940;:5;;;;:::i;:::-;37933:12;;37855:98;;;;:::o;30676:799::-;30831:4;30852:15;:2;:13;;;:15::i;:::-;30848:620;;;30904:2;30888:36;;;30925:12;:10;:12::i;:::-;30939:4;30945:7;30954:5;30888:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30884:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31147:1;31130:6;:13;:18;31126:272;;;31173:60;;;;;;;;;;:::i;:::-;;;;;;;;31126:272;31348:6;31342:13;31333:6;31329:2;31325:15;31318:38;30884:529;31021:41;;;31011:51;;;:6;:51;;;;31004:58;;;;;30848:620;31452:4;31445:11;;30676:799;;;;;;;:::o;16207:723::-;16263:13;16493:1;16484:5;:10;16480:53;;;16511:10;;;;;;;;;;;;;;;;;;;;;16480:53;16543:12;16558:5;16543:20;;16574:14;16599:78;16614:1;16606:4;:9;16599:78;;16632:8;;;;;:::i;:::-;;;;16663:2;16655:10;;;;;:::i;:::-;;;16599:78;;;16687:19;16719:6;16709:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16687:39;;16737:154;16753:1;16744:5;:10;16737:154;;16781:1;16771:11;;;;;:::i;:::-;;;16848:2;16840:5;:10;;;;:::i;:::-;16827:2;:24;;;;:::i;:::-;16814:39;;16797:6;16804;16797:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;16877:2;16868:11;;;;;:::i;:::-;;;16737:154;;;16915:6;16901:21;;;;;16207:723;;;;:::o;27933:382::-;28027:1;28013:16;;:2;:16;;;;28005:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;28086:16;28094:7;28086;:16::i;:::-;28085:17;28077:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28148:45;28177:1;28181:2;28185:7;28148:20;:45::i;:::-;28223:1;28206:9;:13;28216:2;28206:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;28254:2;28235:7;:16;28243:7;28235:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28299:7;28295:2;28274:33;;28291:1;28274:33;;;;;;;;;;;;27933:382;;:::o;7840:387::-;7900:4;8108:12;8175:7;8163:20;8155:28;;8218:1;8211:4;:8;8204:15;;;7840:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:137::-;3044:5;3082:6;3069:20;3060:29;;3098:32;3124:5;3098:32;:::i;:::-;3050:86;;;;:::o;3142:141::-;3198:5;3229:6;3223:13;3214:22;;3245:32;3271:5;3245:32;:::i;:::-;3204:79;;;;:::o;3302:271::-;3357:5;3406:3;3399:4;3391:6;3387:17;3383:27;3373:2;;3424:1;3421;3414:12;3373:2;3464:6;3451:20;3489:78;3563:3;3555:6;3548:4;3540:6;3536:17;3489:78;:::i;:::-;3480:87;;3363:210;;;;;:::o;3593:273::-;3649:5;3698:3;3691:4;3683:6;3679:17;3675:27;3665:2;;3716:1;3713;3706:12;3665:2;3756:6;3743:20;3781:79;3856:3;3848:6;3841:4;3833:6;3829:17;3781:79;:::i;:::-;3772:88;;3655:211;;;;;:::o;3872:139::-;3918:5;3956:6;3943:20;3934:29;;3972:33;3999:5;3972:33;:::i;:::-;3924:87;;;;:::o;4017:262::-;4076:6;4125:2;4113:9;4104:7;4100:23;4096:32;4093:2;;;4141:1;4138;4131:12;4093:2;4184:1;4209:53;4254:7;4245:6;4234:9;4230:22;4209:53;:::i;:::-;4199:63;;4155:117;4083:196;;;;:::o;4285:407::-;4353:6;4361;4410:2;4398:9;4389:7;4385:23;4381:32;4378:2;;;4426:1;4423;4416:12;4378:2;4469:1;4494:53;4539:7;4530:6;4519:9;4515:22;4494:53;:::i;:::-;4484:63;;4440:117;4596:2;4622:53;4667:7;4658:6;4647:9;4643:22;4622:53;:::i;:::-;4612:63;;4567:118;4368:324;;;;;:::o;4698:552::-;4775:6;4783;4791;4840:2;4828:9;4819:7;4815:23;4811:32;4808:2;;;4856:1;4853;4846:12;4808:2;4899:1;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4870:117;5026:2;5052:53;5097:7;5088:6;5077:9;5073:22;5052:53;:::i;:::-;5042:63;;4997:118;5154:2;5180:53;5225:7;5216:6;5205:9;5201:22;5180:53;:::i;:::-;5170:63;;5125:118;4798:452;;;;;:::o;5256:809::-;5351:6;5359;5367;5375;5424:3;5412:9;5403:7;5399:23;5395:33;5392:2;;;5441:1;5438;5431:12;5392:2;5484:1;5509:53;5554:7;5545:6;5534:9;5530:22;5509:53;:::i;:::-;5499:63;;5455:117;5611:2;5637:53;5682:7;5673:6;5662:9;5658:22;5637:53;:::i;:::-;5627:63;;5582:118;5739:2;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5710:118;5895:2;5884:9;5880:18;5867:32;5926:18;5918:6;5915:30;5912:2;;;5958:1;5955;5948:12;5912:2;5986:62;6040:7;6031:6;6020:9;6016:22;5986:62;:::i;:::-;5976:72;;5838:220;5382:683;;;;;;;:::o;6071:550::-;6164:6;6172;6221:2;6209:9;6200:7;6196:23;6192:32;6189:2;;;6237:1;6234;6227:12;6189:2;6280:1;6305:53;6350:7;6341:6;6330:9;6326:22;6305:53;:::i;:::-;6295:63;;6251:117;6435:2;6424:9;6420:18;6407:32;6466:18;6458:6;6455:30;6452:2;;;6498:1;6495;6488:12;6452:2;6526:78;6596:7;6587:6;6576:9;6572:22;6526:78;:::i;:::-;6516:88;;6378:236;6179:442;;;;;:::o;6627:401::-;6692:6;6700;6749:2;6737:9;6728:7;6724:23;6720:32;6717:2;;;6765:1;6762;6755:12;6717:2;6808:1;6833:53;6878:7;6869:6;6858:9;6854:22;6833:53;:::i;:::-;6823:63;;6779:117;6935:2;6961:50;7003:7;6994:6;6983:9;6979:22;6961:50;:::i;:::-;6951:60;;6906:115;6707:321;;;;;:::o;7034:407::-;7102:6;7110;7159:2;7147:9;7138:7;7134:23;7130:32;7127:2;;;7175:1;7172;7165:12;7127:2;7218:1;7243:53;7288:7;7279:6;7268:9;7264:22;7243:53;:::i;:::-;7233:63;;7189:117;7345:2;7371:53;7416:7;7407:6;7396:9;7392:22;7371:53;:::i;:::-;7361:63;;7316:118;7117:324;;;;;:::o;7447:405::-;7531:6;7580:2;7568:9;7559:7;7555:23;7551:32;7548:2;;;7596:1;7593;7586:12;7548:2;7667:1;7656:9;7652:17;7639:31;7697:18;7689:6;7686:30;7683:2;;;7729:1;7726;7719:12;7683:2;7757:78;7827:7;7818:6;7807:9;7803:22;7757:78;:::i;:::-;7747:88;;7610:235;7538:314;;;;:::o;7858:256::-;7914:6;7963:2;7951:9;7942:7;7938:23;7934:32;7931:2;;;7979:1;7976;7969:12;7931:2;8022:1;8047:50;8089:7;8080:6;8069:9;8065:22;8047:50;:::i;:::-;8037:60;;7993:114;7921:193;;;;:::o;8120:260::-;8178:6;8227:2;8215:9;8206:7;8202:23;8198:32;8195:2;;;8243:1;8240;8233:12;8195:2;8286:1;8311:52;8355:7;8346:6;8335:9;8331:22;8311:52;:::i;:::-;8301:62;;8257:116;8185:195;;;;:::o;8386:282::-;8455:6;8504:2;8492:9;8483:7;8479:23;8475:32;8472:2;;;8520:1;8517;8510:12;8472:2;8563:1;8588:63;8643:7;8634:6;8623:9;8619:22;8588:63;:::i;:::-;8578:73;;8534:127;8462:206;;;;:::o;8674:375::-;8743:6;8792:2;8780:9;8771:7;8767:23;8763:32;8760:2;;;8808:1;8805;8798:12;8760:2;8879:1;8868:9;8864:17;8851:31;8909:18;8901:6;8898:30;8895:2;;;8941:1;8938;8931:12;8895:2;8969:63;9024:7;9015:6;9004:9;9000:22;8969:63;:::i;:::-;8959:73;;8822:220;8750:299;;;;:::o;9055:262::-;9114:6;9163:2;9151:9;9142:7;9138:23;9134:32;9131:2;;;9179:1;9176;9169:12;9131:2;9222:1;9247:53;9292:7;9283:6;9272:9;9268:22;9247:53;:::i;:::-;9237:63;;9193:117;9121:196;;;;:::o;9323:179::-;9392:10;9413:46;9455:3;9447:6;9413:46;:::i;:::-;9491:4;9486:3;9482:14;9468:28;;9403:99;;;;:::o;9508:118::-;9595:24;9613:5;9595:24;:::i;:::-;9590:3;9583:37;9573:53;;:::o;9632:157::-;9737:45;9757:24;9775:5;9757:24;:::i;:::-;9737:45;:::i;:::-;9732:3;9725:58;9715:74;;:::o;9825:732::-;9944:3;9973:54;10021:5;9973:54;:::i;:::-;10043:86;10122:6;10117:3;10043:86;:::i;:::-;10036:93;;10153:56;10203:5;10153:56;:::i;:::-;10232:7;10263:1;10248:284;10273:6;10270:1;10267:13;10248:284;;;10349:6;10343:13;10376:63;10435:3;10420:13;10376:63;:::i;:::-;10369:70;;10462:60;10515:6;10462:60;:::i;:::-;10452:70;;10308:224;10295:1;10292;10288:9;10283:14;;10248:284;;;10252:14;10548:3;10541:10;;9949:608;;;;;;;:::o;10563:109::-;10644:21;10659:5;10644:21;:::i;:::-;10639:3;10632:34;10622:50;;:::o;10678:360::-;10764:3;10792:38;10824:5;10792:38;:::i;:::-;10846:70;10909:6;10904:3;10846:70;:::i;:::-;10839:77;;10925:52;10970:6;10965:3;10958:4;10951:5;10947:16;10925:52;:::i;:::-;11002:29;11024:6;11002:29;:::i;:::-;10997:3;10993:39;10986:46;;10768:270;;;;;:::o;11044:364::-;11132:3;11160:39;11193:5;11160:39;:::i;:::-;11215:71;11279:6;11274:3;11215:71;:::i;:::-;11208:78;;11295:52;11340:6;11335:3;11328:4;11321:5;11317:16;11295:52;:::i;:::-;11372:29;11394:6;11372:29;:::i;:::-;11367:3;11363:39;11356:46;;11136:272;;;;;:::o;11414:377::-;11520:3;11548:39;11581:5;11548:39;:::i;:::-;11603:89;11685:6;11680:3;11603:89;:::i;:::-;11596:96;;11701:52;11746:6;11741:3;11734:4;11727:5;11723:16;11701:52;:::i;:::-;11778:6;11773:3;11769:16;11762:23;;11524:267;;;;;:::o;11797:366::-;11939:3;11960:67;12024:2;12019:3;11960:67;:::i;:::-;11953:74;;12036:93;12125:3;12036:93;:::i;:::-;12154:2;12149:3;12145:12;12138:19;;11943:220;;;:::o;12169:366::-;12311:3;12332:67;12396:2;12391:3;12332:67;:::i;:::-;12325:74;;12408:93;12497:3;12408:93;:::i;:::-;12526:2;12521:3;12517:12;12510:19;;12315:220;;;:::o;12541:366::-;12683:3;12704:67;12768:2;12763:3;12704:67;:::i;:::-;12697:74;;12780:93;12869:3;12780:93;:::i;:::-;12898:2;12893:3;12889:12;12882:19;;12687:220;;;:::o;12913:366::-;13055:3;13076:67;13140:2;13135:3;13076:67;:::i;:::-;13069:74;;13152:93;13241:3;13152:93;:::i;:::-;13270:2;13265:3;13261:12;13254:19;;13059:220;;;:::o;13285:366::-;13427:3;13448:67;13512:2;13507:3;13448:67;:::i;:::-;13441:74;;13524:93;13613:3;13524:93;:::i;:::-;13642:2;13637:3;13633:12;13626:19;;13431:220;;;:::o;13657:366::-;13799:3;13820:67;13884:2;13879:3;13820:67;:::i;:::-;13813:74;;13896:93;13985:3;13896:93;:::i;:::-;14014:2;14009:3;14005:12;13998:19;;13803:220;;;:::o;14029:366::-;14171:3;14192:67;14256:2;14251:3;14192:67;:::i;:::-;14185:74;;14268:93;14357:3;14268:93;:::i;:::-;14386:2;14381:3;14377:12;14370:19;;14175:220;;;:::o;14401:366::-;14543:3;14564:67;14628:2;14623:3;14564:67;:::i;:::-;14557:74;;14640:93;14729:3;14640:93;:::i;:::-;14758:2;14753:3;14749:12;14742:19;;14547:220;;;:::o;14773:366::-;14915:3;14936:67;15000:2;14995:3;14936:67;:::i;:::-;14929:74;;15012:93;15101:3;15012:93;:::i;:::-;15130:2;15125:3;15121:12;15114:19;;14919:220;;;:::o;15145:366::-;15287:3;15308:67;15372:2;15367:3;15308:67;:::i;:::-;15301:74;;15384:93;15473:3;15384:93;:::i;:::-;15502:2;15497:3;15493:12;15486:19;;15291:220;;;:::o;15517:366::-;15659:3;15680:67;15744:2;15739:3;15680:67;:::i;:::-;15673:74;;15756:93;15845:3;15756:93;:::i;:::-;15874:2;15869:3;15865:12;15858:19;;15663:220;;;:::o;15889:366::-;16031:3;16052:67;16116:2;16111:3;16052:67;:::i;:::-;16045:74;;16128:93;16217:3;16128:93;:::i;:::-;16246:2;16241:3;16237:12;16230:19;;16035:220;;;:::o;16261:366::-;16403:3;16424:67;16488:2;16483:3;16424:67;:::i;:::-;16417:74;;16500:93;16589:3;16500:93;:::i;:::-;16618:2;16613:3;16609:12;16602:19;;16407:220;;;:::o;16633:366::-;16775:3;16796:67;16860:2;16855:3;16796:67;:::i;:::-;16789:74;;16872:93;16961:3;16872:93;:::i;:::-;16990:2;16985:3;16981:12;16974:19;;16779:220;;;:::o;17005:366::-;17147:3;17168:67;17232:2;17227:3;17168:67;:::i;:::-;17161:74;;17244:93;17333:3;17244:93;:::i;:::-;17362:2;17357:3;17353:12;17346:19;;17151:220;;;:::o;17377:366::-;17519:3;17540:67;17604:2;17599:3;17540:67;:::i;:::-;17533:74;;17616:93;17705:3;17616:93;:::i;:::-;17734:2;17729:3;17725:12;17718:19;;17523:220;;;:::o;17749:366::-;17891:3;17912:67;17976:2;17971:3;17912:67;:::i;:::-;17905:74;;17988:93;18077:3;17988:93;:::i;:::-;18106:2;18101:3;18097:12;18090:19;;17895:220;;;:::o;18121:366::-;18263:3;18284:67;18348:2;18343:3;18284:67;:::i;:::-;18277:74;;18360:93;18449:3;18360:93;:::i;:::-;18478:2;18473:3;18469:12;18462:19;;18267:220;;;:::o;18493:366::-;18635:3;18656:67;18720:2;18715:3;18656:67;:::i;:::-;18649:74;;18732:93;18821:3;18732:93;:::i;:::-;18850:2;18845:3;18841:12;18834:19;;18639:220;;;:::o;18865:366::-;19007:3;19028:67;19092:2;19087:3;19028:67;:::i;:::-;19021:74;;19104:93;19193:3;19104:93;:::i;:::-;19222:2;19217:3;19213:12;19206:19;;19011:220;;;:::o;19237:366::-;19379:3;19400:67;19464:2;19459:3;19400:67;:::i;:::-;19393:74;;19476:93;19565:3;19476:93;:::i;:::-;19594:2;19589:3;19585:12;19578:19;;19383:220;;;:::o;19609:366::-;19751:3;19772:67;19836:2;19831:3;19772:67;:::i;:::-;19765:74;;19848:93;19937:3;19848:93;:::i;:::-;19966:2;19961:3;19957:12;19950:19;;19755:220;;;:::o;19981:398::-;20140:3;20161:83;20242:1;20237:3;20161:83;:::i;:::-;20154:90;;20253:93;20342:3;20253:93;:::i;:::-;20371:1;20366:3;20362:11;20355:18;;20144:235;;;:::o;20385:366::-;20527:3;20548:67;20612:2;20607:3;20548:67;:::i;:::-;20541:74;;20624:93;20713:3;20624:93;:::i;:::-;20742:2;20737:3;20733:12;20726:19;;20531:220;;;:::o;20757:366::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20903:220;;;:::o;21129:366::-;21271:3;21292:67;21356:2;21351:3;21292:67;:::i;:::-;21285:74;;21368:93;21457:3;21368:93;:::i;:::-;21486:2;21481:3;21477:12;21470:19;;21275:220;;;:::o;21501:366::-;21643:3;21664:67;21728:2;21723:3;21664:67;:::i;:::-;21657:74;;21740:93;21829:3;21740:93;:::i;:::-;21858:2;21853:3;21849:12;21842:19;;21647:220;;;:::o;21873:366::-;22015:3;22036:67;22100:2;22095:3;22036:67;:::i;:::-;22029:74;;22112:93;22201:3;22112:93;:::i;:::-;22230:2;22225:3;22221:12;22214:19;;22019:220;;;:::o;22245:366::-;22387:3;22408:67;22472:2;22467:3;22408:67;:::i;:::-;22401:74;;22484:93;22573:3;22484:93;:::i;:::-;22602:2;22597:3;22593:12;22586:19;;22391:220;;;:::o;22617:108::-;22694:24;22712:5;22694:24;:::i;:::-;22689:3;22682:37;22672:53;;:::o;22731:118::-;22818:24;22836:5;22818:24;:::i;:::-;22813:3;22806:37;22796:53;;:::o;22855:157::-;22960:45;22980:24;22998:5;22980:24;:::i;:::-;22960:45;:::i;:::-;22955:3;22948:58;22938:74;;:::o;23018:435::-;23198:3;23220:95;23311:3;23302:6;23220:95;:::i;:::-;23213:102;;23332:95;23423:3;23414:6;23332:95;:::i;:::-;23325:102;;23444:3;23437:10;;23202:251;;;;;:::o;23459:379::-;23643:3;23665:147;23808:3;23665:147;:::i;:::-;23658:154;;23829:3;23822:10;;23647:191;;;:::o;23844:679::-;24040:3;24055:75;24126:3;24117:6;24055:75;:::i;:::-;24155:2;24150:3;24146:12;24139:19;;24168:75;24239:3;24230:6;24168:75;:::i;:::-;24268:2;24263:3;24259:12;24252:19;;24281:75;24352:3;24343:6;24281:75;:::i;:::-;24381:2;24376:3;24372:12;24365:19;;24394:75;24465:3;24456:6;24394:75;:::i;:::-;24494:2;24489:3;24485:12;24478:19;;24514:3;24507:10;;24044:479;;;;;;;:::o;24529:222::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24673:71;24741:1;24730:9;24726:17;24717:6;24673:71;:::i;:::-;24627:124;;;;:::o;24757:640::-;24952:4;24990:3;24979:9;24975:19;24967:27;;25004:71;25072:1;25061:9;25057:17;25048:6;25004:71;:::i;:::-;25085:72;25153:2;25142:9;25138:18;25129:6;25085:72;:::i;:::-;25167;25235:2;25224:9;25220:18;25211:6;25167:72;:::i;:::-;25286:9;25280:4;25276:20;25271:2;25260:9;25256:18;25249:48;25314:76;25385:4;25376:6;25314:76;:::i;:::-;25306:84;;24957:440;;;;;;;:::o;25403:373::-;25546:4;25584:2;25573:9;25569:18;25561:26;;25633:9;25627:4;25623:20;25619:1;25608:9;25604:17;25597:47;25661:108;25764:4;25755:6;25661:108;:::i;:::-;25653:116;;25551:225;;;;:::o;25782:210::-;25869:4;25907:2;25896:9;25892:18;25884:26;;25920:65;25982:1;25971:9;25967:17;25958:6;25920:65;:::i;:::-;25874:118;;;;:::o;25998:313::-;26111:4;26149:2;26138:9;26134:18;26126:26;;26198:9;26192:4;26188:20;26184:1;26173:9;26169:17;26162:47;26226:78;26299:4;26290:6;26226:78;:::i;:::-;26218:86;;26116:195;;;;:::o;26317:419::-;26483:4;26521:2;26510:9;26506:18;26498:26;;26570:9;26564:4;26560:20;26556:1;26545:9;26541:17;26534:47;26598:131;26724:4;26598:131;:::i;:::-;26590:139;;26488:248;;;:::o;26742:419::-;26908:4;26946:2;26935:9;26931:18;26923:26;;26995:9;26989:4;26985:20;26981:1;26970:9;26966:17;26959:47;27023:131;27149:4;27023:131;:::i;:::-;27015:139;;26913:248;;;:::o;27167:419::-;27333:4;27371:2;27360:9;27356:18;27348:26;;27420:9;27414:4;27410:20;27406:1;27395:9;27391:17;27384:47;27448:131;27574:4;27448:131;:::i;:::-;27440:139;;27338:248;;;:::o;27592:419::-;27758:4;27796:2;27785:9;27781:18;27773:26;;27845:9;27839:4;27835:20;27831:1;27820:9;27816:17;27809:47;27873:131;27999:4;27873:131;:::i;:::-;27865:139;;27763:248;;;:::o;28017:419::-;28183:4;28221:2;28210:9;28206:18;28198:26;;28270:9;28264:4;28260:20;28256:1;28245:9;28241:17;28234:47;28298:131;28424:4;28298:131;:::i;:::-;28290:139;;28188:248;;;:::o;28442:419::-;28608:4;28646:2;28635:9;28631:18;28623:26;;28695:9;28689:4;28685:20;28681:1;28670:9;28666:17;28659:47;28723:131;28849:4;28723:131;:::i;:::-;28715:139;;28613:248;;;:::o;28867:419::-;29033:4;29071:2;29060:9;29056:18;29048:26;;29120:9;29114:4;29110:20;29106:1;29095:9;29091:17;29084:47;29148:131;29274:4;29148:131;:::i;:::-;29140:139;;29038:248;;;:::o;29292:419::-;29458:4;29496:2;29485:9;29481:18;29473:26;;29545:9;29539:4;29535:20;29531:1;29520:9;29516:17;29509:47;29573:131;29699:4;29573:131;:::i;:::-;29565:139;;29463:248;;;:::o;29717:419::-;29883:4;29921:2;29910:9;29906:18;29898:26;;29970:9;29964:4;29960:20;29956:1;29945:9;29941:17;29934:47;29998:131;30124:4;29998:131;:::i;:::-;29990:139;;29888:248;;;:::o;30142:419::-;30308:4;30346:2;30335:9;30331:18;30323:26;;30395:9;30389:4;30385:20;30381:1;30370:9;30366:17;30359:47;30423:131;30549:4;30423:131;:::i;:::-;30415:139;;30313:248;;;:::o;30567:419::-;30733:4;30771:2;30760:9;30756:18;30748:26;;30820:9;30814:4;30810:20;30806:1;30795:9;30791:17;30784:47;30848:131;30974:4;30848:131;:::i;:::-;30840:139;;30738:248;;;:::o;30992:419::-;31158:4;31196:2;31185:9;31181:18;31173:26;;31245:9;31239:4;31235:20;31231:1;31220:9;31216:17;31209:47;31273:131;31399:4;31273:131;:::i;:::-;31265:139;;31163:248;;;:::o;31417:419::-;31583:4;31621:2;31610:9;31606:18;31598:26;;31670:9;31664:4;31660:20;31656:1;31645:9;31641:17;31634:47;31698:131;31824:4;31698:131;:::i;:::-;31690:139;;31588:248;;;:::o;31842:419::-;32008:4;32046:2;32035:9;32031:18;32023:26;;32095:9;32089:4;32085:20;32081:1;32070:9;32066:17;32059:47;32123:131;32249:4;32123:131;:::i;:::-;32115:139;;32013:248;;;:::o;32267:419::-;32433:4;32471:2;32460:9;32456:18;32448:26;;32520:9;32514:4;32510:20;32506:1;32495:9;32491:17;32484:47;32548:131;32674:4;32548:131;:::i;:::-;32540:139;;32438:248;;;:::o;32692:419::-;32858:4;32896:2;32885:9;32881:18;32873:26;;32945:9;32939:4;32935:20;32931:1;32920:9;32916:17;32909:47;32973:131;33099:4;32973:131;:::i;:::-;32965:139;;32863:248;;;:::o;33117:419::-;33283:4;33321:2;33310:9;33306:18;33298:26;;33370:9;33364:4;33360:20;33356:1;33345:9;33341:17;33334:47;33398:131;33524:4;33398:131;:::i;:::-;33390:139;;33288:248;;;:::o;33542:419::-;33708:4;33746:2;33735:9;33731:18;33723:26;;33795:9;33789:4;33785:20;33781:1;33770:9;33766:17;33759:47;33823:131;33949:4;33823:131;:::i;:::-;33815:139;;33713:248;;;:::o;33967:419::-;34133:4;34171:2;34160:9;34156:18;34148:26;;34220:9;34214:4;34210:20;34206:1;34195:9;34191:17;34184:47;34248:131;34374:4;34248:131;:::i;:::-;34240:139;;34138:248;;;:::o;34392:419::-;34558:4;34596:2;34585:9;34581:18;34573:26;;34645:9;34639:4;34635:20;34631:1;34620:9;34616:17;34609:47;34673:131;34799:4;34673:131;:::i;:::-;34665:139;;34563:248;;;:::o;34817:419::-;34983:4;35021:2;35010:9;35006:18;34998:26;;35070:9;35064:4;35060:20;35056:1;35045:9;35041:17;35034:47;35098:131;35224:4;35098:131;:::i;:::-;35090:139;;34988:248;;;:::o;35242:419::-;35408:4;35446:2;35435:9;35431:18;35423:26;;35495:9;35489:4;35485:20;35481:1;35470:9;35466:17;35459:47;35523:131;35649:4;35523:131;:::i;:::-;35515:139;;35413:248;;;:::o;35667:419::-;35833:4;35871:2;35860:9;35856:18;35848:26;;35920:9;35914:4;35910:20;35906:1;35895:9;35891:17;35884:47;35948:131;36074:4;35948:131;:::i;:::-;35940:139;;35838:248;;;:::o;36092:419::-;36258:4;36296:2;36285:9;36281:18;36273:26;;36345:9;36339:4;36335:20;36331:1;36320:9;36316:17;36309:47;36373:131;36499:4;36373:131;:::i;:::-;36365:139;;36263:248;;;:::o;36517:419::-;36683:4;36721:2;36710:9;36706:18;36698:26;;36770:9;36764:4;36760:20;36756:1;36745:9;36741:17;36734:47;36798:131;36924:4;36798:131;:::i;:::-;36790:139;;36688:248;;;:::o;36942:419::-;37108:4;37146:2;37135:9;37131:18;37123:26;;37195:9;37189:4;37185:20;37181:1;37170:9;37166:17;37159:47;37223:131;37349:4;37223:131;:::i;:::-;37215:139;;37113:248;;;:::o;37367:419::-;37533:4;37571:2;37560:9;37556:18;37548:26;;37620:9;37614:4;37610:20;37606:1;37595:9;37591:17;37584:47;37648:131;37774:4;37648:131;:::i;:::-;37640:139;;37538:248;;;:::o;37792:419::-;37958:4;37996:2;37985:9;37981:18;37973:26;;38045:9;38039:4;38035:20;38031:1;38020:9;38016:17;38009:47;38073:131;38199:4;38073:131;:::i;:::-;38065:139;;37963:248;;;:::o;38217:222::-;38310:4;38348:2;38337:9;38333:18;38325:26;;38361:71;38429:1;38418:9;38414:17;38405:6;38361:71;:::i;:::-;38315:124;;;;:::o;38445:129::-;38479:6;38506:20;;:::i;:::-;38496:30;;38535:33;38563:4;38555:6;38535:33;:::i;:::-;38486:88;;;:::o;38580:75::-;38613:6;38646:2;38640:9;38630:19;;38620:35;:::o;38661:311::-;38738:4;38828:18;38820:6;38817:30;38814:2;;;38850:18;;:::i;:::-;38814:2;38900:4;38892:6;38888:17;38880:25;;38960:4;38954;38950:15;38942:23;;38743:229;;;:::o;38978:311::-;39055:4;39145:18;39137:6;39134:30;39131:2;;;39167:18;;:::i;:::-;39131:2;39217:4;39209:6;39205:17;39197:25;;39277:4;39271;39267:15;39259:23;;39060:229;;;:::o;39295:307::-;39356:4;39446:18;39438:6;39435:30;39432:2;;;39468:18;;:::i;:::-;39432:2;39506:29;39528:6;39506:29;:::i;:::-;39498:37;;39590:4;39584;39580:15;39572:23;;39361:241;;;:::o;39608:308::-;39670:4;39760:18;39752:6;39749:30;39746:2;;;39782:18;;:::i;:::-;39746:2;39820:29;39842:6;39820:29;:::i;:::-;39812:37;;39904:4;39898;39894:15;39886:23;;39675:241;;;:::o;39922:132::-;39989:4;40012:3;40004:11;;40042:4;40037:3;40033:14;40025:22;;39994:60;;;:::o;40060:114::-;40127:6;40161:5;40155:12;40145:22;;40134:40;;;:::o;40180:98::-;40231:6;40265:5;40259:12;40249:22;;40238:40;;;:::o;40284:99::-;40336:6;40370:5;40364:12;40354:22;;40343:40;;;:::o;40389:113::-;40459:4;40491;40486:3;40482:14;40474:22;;40464:38;;;:::o;40508:184::-;40607:11;40641:6;40636:3;40629:19;40681:4;40676:3;40672:14;40657:29;;40619:73;;;;:::o;40698:168::-;40781:11;40815:6;40810:3;40803:19;40855:4;40850:3;40846:14;40831:29;;40793:73;;;;:::o;40872:147::-;40973:11;41010:3;40995:18;;40985:34;;;;:::o;41025:169::-;41109:11;41143:6;41138:3;41131:19;41183:4;41178:3;41174:14;41159:29;;41121:73;;;;:::o;41200:148::-;41302:11;41339:3;41324:18;;41314:34;;;;:::o;41354:305::-;41394:3;41413:20;41431:1;41413:20;:::i;:::-;41408:25;;41447:20;41465:1;41447:20;:::i;:::-;41442:25;;41601:1;41533:66;41529:74;41526:1;41523:81;41520:2;;;41607:18;;:::i;:::-;41520:2;41651:1;41648;41644:9;41637:16;;41398:261;;;;:::o;41665:185::-;41705:1;41722:20;41740:1;41722:20;:::i;:::-;41717:25;;41756:20;41774:1;41756:20;:::i;:::-;41751:25;;41795:1;41785:2;;41800:18;;:::i;:::-;41785:2;41842:1;41839;41835:9;41830:14;;41707:143;;;;:::o;41856:348::-;41896:7;41919:20;41937:1;41919:20;:::i;:::-;41914:25;;41953:20;41971:1;41953:20;:::i;:::-;41948:25;;42141:1;42073:66;42069:74;42066:1;42063:81;42058:1;42051:9;42044:17;42040:105;42037:2;;;42148:18;;:::i;:::-;42037:2;42196:1;42193;42189:9;42178:20;;41904:300;;;;:::o;42210:191::-;42250:4;42270:20;42288:1;42270:20;:::i;:::-;42265:25;;42304:20;42322:1;42304:20;:::i;:::-;42299:25;;42343:1;42340;42337:8;42334:2;;;42348:18;;:::i;:::-;42334:2;42393:1;42390;42386:9;42378:17;;42255:146;;;;:::o;42407:96::-;42444:7;42473:24;42491:5;42473:24;:::i;:::-;42462:35;;42452:51;;;:::o;42509:90::-;42543:7;42586:5;42579:13;42572:21;42561:32;;42551:48;;;:::o;42605:149::-;42641:7;42681:66;42674:5;42670:78;42659:89;;42649:105;;;:::o;42760:126::-;42797:7;42837:42;42830:5;42826:54;42815:65;;42805:81;;;:::o;42892:77::-;42929:7;42958:5;42947:16;;42937:32;;;:::o;42975:154::-;43059:6;43054:3;43049;43036:30;43121:1;43112:6;43107:3;43103:16;43096:27;43026:103;;;:::o;43135:307::-;43203:1;43213:113;43227:6;43224:1;43221:13;43213:113;;;43312:1;43307:3;43303:11;43297:18;43293:1;43288:3;43284:11;43277:39;43249:2;43246:1;43242:10;43237:15;;43213:113;;;43344:6;43341:1;43338:13;43335:2;;;43424:1;43415:6;43410:3;43406:16;43399:27;43335:2;43184:258;;;;:::o;43448:320::-;43492:6;43529:1;43523:4;43519:12;43509:22;;43576:1;43570:4;43566:12;43597:18;43587:2;;43653:4;43645:6;43641:17;43631:27;;43587:2;43715;43707:6;43704:14;43684:18;43681:38;43678:2;;;43734:18;;:::i;:::-;43678:2;43499:269;;;;:::o;43774:281::-;43857:27;43879:4;43857:27;:::i;:::-;43849:6;43845:40;43987:6;43975:10;43972:22;43951:18;43939:10;43936:34;43933:62;43930:2;;;43998:18;;:::i;:::-;43930:2;44038:10;44034:2;44027:22;43817:238;;;:::o;44061:233::-;44100:3;44123:24;44141:5;44123:24;:::i;:::-;44114:33;;44169:66;44162:5;44159:77;44156:2;;;44239:18;;:::i;:::-;44156:2;44286:1;44279:5;44275:13;44268:20;;44104:190;;;:::o;44300:100::-;44339:7;44368:26;44388:5;44368:26;:::i;:::-;44357:37;;44347:53;;;:::o;44406:94::-;44445:7;44474:20;44488:5;44474:20;:::i;:::-;44463:31;;44453:47;;;:::o;44506:79::-;44545:7;44574:5;44563:16;;44553:32;;;:::o;44591:176::-;44623:1;44640:20;44658:1;44640:20;:::i;:::-;44635:25;;44674:20;44692:1;44674:20;:::i;:::-;44669:25;;44713:1;44703:2;;44718:18;;:::i;:::-;44703:2;44759:1;44756;44752:9;44747:14;;44625:142;;;;:::o;44773:180::-;44821:77;44818:1;44811:88;44918:4;44915:1;44908:15;44942:4;44939:1;44932:15;44959:180;45007:77;45004:1;44997:88;45104:4;45101:1;45094:15;45128:4;45125:1;45118:15;45145:180;45193:77;45190:1;45183:88;45290:4;45287:1;45280:15;45314:4;45311:1;45304:15;45331:180;45379:77;45376:1;45369:88;45476:4;45473:1;45466:15;45500:4;45497:1;45490:15;45517:102;45558:6;45609:2;45605:7;45600:2;45593:5;45589:14;45585:28;45575:38;;45565:54;;;:::o;45625:94::-;45658:8;45706:5;45702:2;45698:14;45677:35;;45667:52;;;:::o;45725:180::-;45865:32;45861:1;45853:6;45849:14;45842:56;45831:74;:::o;45911:237::-;46051:34;46047:1;46039:6;46035:14;46028:58;46120:20;46115:2;46107:6;46103:15;46096:45;46017:131;:::o;46154:225::-;46294:34;46290:1;46282:6;46278:14;46271:58;46363:8;46358:2;46350:6;46346:15;46339:33;46260:119;:::o;46385:178::-;46525:30;46521:1;46513:6;46509:14;46502:54;46491:72;:::o;46569:166::-;46709:18;46705:1;46697:6;46693:14;46686:42;46675:60;:::o;46741:166::-;46881:18;46877:1;46869:6;46865:14;46858:42;46847:60;:::o;46913:223::-;47053:34;47049:1;47041:6;47037:14;47030:58;47122:6;47117:2;47109:6;47105:15;47098:31;47019:117;:::o;47142:175::-;47282:27;47278:1;47270:6;47266:14;47259:51;47248:69;:::o;47323:231::-;47463:34;47459:1;47451:6;47447:14;47440:58;47532:14;47527:2;47519:6;47515:15;47508:39;47429:125;:::o;47560:171::-;47700:23;47696:1;47688:6;47684:14;47677:47;47666:65;:::o;47737:243::-;47877:34;47873:1;47865:6;47861:14;47854:58;47946:26;47941:2;47933:6;47929:15;47922:51;47843:137;:::o;47986:229::-;48126:34;48122:1;48114:6;48110:14;48103:58;48195:12;48190:2;48182:6;48178:15;48171:37;48092:123;:::o;48221:228::-;48361:34;48357:1;48349:6;48345:14;48338:58;48430:11;48425:2;48417:6;48413:15;48406:36;48327:122;:::o;48455:182::-;48595:34;48591:1;48583:6;48579:14;48572:58;48561:76;:::o;48643:236::-;48783:34;48779:1;48771:6;48767:14;48760:58;48852:19;48847:2;48839:6;48835:15;48828:44;48749:130;:::o;48885:231::-;49025:34;49021:1;49013:6;49009:14;49002:58;49094:14;49089:2;49081:6;49077:15;49070:39;48991:125;:::o;49122:182::-;49262:34;49258:1;49250:6;49246:14;49239:58;49228:76;:::o;49310:228::-;49450:34;49446:1;49438:6;49434:14;49427:58;49519:11;49514:2;49506:6;49502:15;49495:36;49416:122;:::o;49544:168::-;49684:20;49680:1;49672:6;49668:14;49661:44;49650:62;:::o;49718:234::-;49858:34;49854:1;49846:6;49842:14;49835:58;49927:17;49922:2;49914:6;49910:15;49903:42;49824:128;:::o;49958:162::-;50098:14;50094:1;50086:6;50082:14;50075:38;50064:56;:::o;50126:220::-;50266:34;50262:1;50254:6;50250:14;50243:58;50335:3;50330:2;50322:6;50318:15;50311:28;50232:114;:::o;50352:::-;50458:8;:::o;50472:236::-;50612:34;50608:1;50600:6;50596:14;50589:58;50681:19;50676:2;50668:6;50664:15;50657:44;50578:130;:::o;50714:169::-;50854:21;50850:1;50842:6;50838:14;50831:45;50820:63;:::o;50889:169::-;51029:21;51025:1;51017:6;51013:14;51006:45;50995:63;:::o;51064:166::-;51204:18;51200:1;51192:6;51188:14;51181:42;51170:60;:::o;51236:179::-;51376:31;51372:1;51364:6;51360:14;51353:55;51342:73;:::o;51421:162::-;51561:14;51557:1;51549:6;51545:14;51538:38;51527:56;:::o;51589:122::-;51662:24;51680:5;51662:24;:::i;:::-;51655:5;51652:35;51642:2;;51701:1;51698;51691:12;51642:2;51632:79;:::o;51717:116::-;51787:21;51802:5;51787:21;:::i;:::-;51780:5;51777:32;51767:2;;51823:1;51820;51813:12;51767:2;51757:76;:::o;51839:120::-;51911:23;51928:5;51911:23;:::i;:::-;51904:5;51901:34;51891:2;;51949:1;51946;51939:12;51891:2;51881:78;:::o;51965:122::-;52038:24;52056:5;52038:24;:::i;:::-;52031:5;52028:35;52018:2;;52077:1;52074;52067:12;52018:2;52008:79;:::o

Swarm Source

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