ETH Price: $3,087.49 (+0.55%)
Gas: 7 Gwei

Token

Lil Baby Cool Kat (LBCK)
 

Overview

Max Total Supply

202 LBCK

Holders

180

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 LBCK
0x5e6db80c7f8d5da245d4249dcbee16e6596521d4
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:
LBCK

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;


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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

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

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



pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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



pragma solidity ^0.8.0;



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/LBCK.sol

pragma solidity ^0.8.0;



contract LBCK is ERC721, ERC721Enumerable, Ownable {

    uint256 public constant MAX_LBCK = 3333;
    uint256 public constant MAX_FREE = 200;
    string private baseURI;
    uint256 public mintPrice = 0.02 ether;
    uint256 public saleStartTime = 0;
    uint256 public reserveMinted = 0;
    bool public saleEnabled = false;
    uint256 public freeMintCount = 0;
    mapping (address => uint256) public lbckBalance;
    mapping(address => uint256) freeLBCKminted;
    address public payoutAdd;

    function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override(ERC721, ERC721Enumerable) {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    modifier isSaleStarted() {
        require(block.timestamp >= saleStartTime && saleStartTime > 0, "Sale hasn't started");
        _;
    }
    
    modifier isSaleEnabled() {
        require(saleEnabled, "Sale is not enabled");
        _;
    }

    constructor(string memory _lbck) ERC721("Lil Baby Cool Kat", "LBCK") {
        baseURI = _lbck;
    }

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

    function setBaseURI(string memory _lbck) public onlyOwner {
        baseURI = _lbck;
    }

    function setMintPrice(uint256 _lbck) public onlyOwner {
        mintPrice = _lbck;
    }

    function setSaleTime(uint256 _lbck) public onlyOwner {
        saleStartTime = _lbck;
    }

    function setSaleEnabled() public onlyOwner {
        saleEnabled = true;
    }

    function withdrawFunds(uint256 _lbck) public payable onlyOwner {
        require(payable(payoutAdd).send(_lbck));
    }

    function setPayoutAddresses(address[] memory _lbck) public onlyOwner {
        payoutAdd = _lbck[0];
    }

    function freeMintLBCK() public payable isSaleStarted {
        uint256 __lbck = totalSupply();

        require(freeMintCount + 1 <= MAX_FREE, "No more free LBCKs!");
        require(freeLBCKminted[msg.sender] < 1, "You already minted your free LBCK!");

        _safeMint(msg.sender, __lbck);
        lbckBalance[msg.sender]++;

        freeLBCKminted[msg.sender] = 1;
        freeMintCount += 1;
    }

    function mintLBCK(uint256 _lbck) public payable isSaleStarted {
        uint256 __lbck = totalSupply();

        require(_lbck > 0 && _lbck <= 10, "Mint amount exceeds max mint per tx");
        require(_lbck * mintPrice <= msg.value, "Did not send enough eth!");
        require(_lbck + __lbck <= (MAX_LBCK - MAX_FREE), "Mint exceeds max supply!");

        for (uint256 ___lbck;___lbck < _lbck;___lbck++) {
            _safeMint(msg.sender, __lbck + ___lbck);
            lbckBalance[msg.sender]++;
        }
    }
 
    function transferFrom(address from, address to, uint256 tokenId) public override isSaleEnabled {
        lbckBalance[from]--;
        lbckBalance[to]++;
        ERC721.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public override isSaleEnabled {
        lbckBalance[from]--;
        lbckBalance[to]++;
        ERC721.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override isSaleEnabled {
        lbckBalance[from]--;
        lbckBalance[to]++;
        ERC721.safeTransferFrom(from, to, tokenId, data);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_lbck","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_FREE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_LBCK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeMintLBCK","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lbckBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lbck","type":"uint256"}],"name":"mintLBCK","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"payoutAdd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reserveMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"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":[],"name":"saleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_lbck","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lbck","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_lbck","type":"address[]"}],"name":"setPayoutAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setSaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lbck","type":"uint256"}],"name":"setSaleTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_lbck","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"payable","type":"function"}]

608060405266470de4df820000600c556000600d556000600e556000600f60006101000a81548160ff02191690831515021790555060006010553480156200004657600080fd5b5060405162004d0838038062004d0883398181016040528101906200006c91906200033c565b6040518060400160405280601181526020017f4c696c204261627920436f6f6c204b61740000000000000000000000000000008152506040518060400160405280600481526020017f4c42434b000000000000000000000000000000000000000000000000000000008152508160009080519060200190620000f09291906200021a565b508060019080519060200190620001099291906200021a565b5050506200012c620001206200014c60201b60201c565b6200015460201b60201c565b80600b9080519060200190620001449291906200021a565b5050620004b2565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b82805462000228906200041e565b90600052602060002090601f0160209004810192826200024c576000855562000298565b82601f106200026757805160ff191683800117855562000298565b8280016001018555821562000298579182015b82811115620002975782518255916020019190600101906200027a565b5b509050620002a79190620002ab565b5090565b5b80821115620002c6576000816000905550600101620002ac565b5090565b6000620002e1620002db84620003b5565b62000381565b905082815260208101848484011115620002fa57600080fd5b62000307848285620003e8565b509392505050565b600082601f8301126200032157600080fd5b815162000333848260208601620002ca565b91505092915050565b6000602082840312156200034f57600080fd5b600082015167ffffffffffffffff8111156200036a57600080fd5b62000378848285016200030f565b91505092915050565b6000604051905081810181811067ffffffffffffffff82111715620003ab57620003aa62000483565b5b8060405250919050565b600067ffffffffffffffff821115620003d357620003d262000483565b5b601f19601f8301169050602081019050919050565b60005b8381101562000408578082015181840152602081019050620003eb565b8381111562000418576000848401525b50505050565b600060028204905060018216806200043757607f821691505b602082108114156200044e576200044d62000454565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61484680620004c26000396000f3fe60806040526004361061020f5760003560e01c80636817c76c11610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610783578063ed6661c2146107c0578063f2fde38b146107eb578063f4a0a52814610814578063f76dc16f1461083d5761020f565b8063b88d4fde146106c7578063c87b56dd146106f0578063dd7deda41461072d578063e55f58bb146107585761020f565b8063755f34f6116100e7578063755f34f61461060357806375fd0bb11461061f5780638da5cb5b1461064857806395d89b4114610673578063a22cb4651461069e5761020f565b80636817c76c1461055957806370a0823114610584578063715018a6146105c157806371b9b646146105d85761020f565b806323b872dd1161019b57806349ff5e151161016a57806349ff5e151461044e5780634c81433f1461048b5780634f6ccce7146104b657806355f804b3146104f35780636352211e1461051c5761020f565b806323b872dd146103965780632f745c59146103bf5780633bd2b67d146103fc57806342842e0e146104255761020f565b8063155dd5ee116101e2578063155dd5ee146102e257806317a15001146102fe57806318160ddd146103295780631cbaee2d1461035457806321cbc3671461037f5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613517565b610847565b6040516102489190613fce565b60405180910390f35b34801561025d57600080fd5b50610266610859565b6040516102739190613fe9565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906135aa565b6108eb565b6040516102b09190613f67565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061349a565b610970565b005b6102fc60048036038101906102f791906135aa565b610a88565b005b34801561030a57600080fd5b50610313610b67565b6040516103209190613f67565b60405180910390f35b34801561033557600080fd5b5061033e610b8d565b60405161034b919061432b565b60405180910390f35b34801561036057600080fd5b50610369610b9a565b604051610376919061432b565b60405180910390f35b34801561038b57600080fd5b50610394610ba0565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613394565b610c39565b005b3480156103cb57600080fd5b506103e660048036038101906103e1919061349a565b610d42565b6040516103f3919061432b565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e91906135aa565b610de7565b005b34801561043157600080fd5b5061044c60048036038101906104479190613394565b610e6d565b005b34801561045a57600080fd5b506104756004803603810190610470919061332f565b610f76565b604051610482919061432b565b60405180910390f35b34801561049757600080fd5b506104a0610f8e565b6040516104ad919061432b565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906135aa565b610f94565b6040516104ea919061432b565b60405180910390f35b3480156104ff57600080fd5b5061051a60048036038101906105159190613569565b61102b565b005b34801561052857600080fd5b50610543600480360381019061053e91906135aa565b6110c1565b6040516105509190613f67565b60405180910390f35b34801561056557600080fd5b5061056e611173565b60405161057b919061432b565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061332f565b611179565b6040516105b8919061432b565b60405180910390f35b3480156105cd57600080fd5b506105d6611231565b005b3480156105e457600080fd5b506105ed6112b9565b6040516105fa9190613fce565b60405180910390f35b61061d600480360381019061061891906135aa565b6112cc565b005b34801561062b57600080fd5b50610646600480360381019061064191906134d6565b6114b4565b005b34801561065457600080fd5b5061065d6115b5565b60405161066a9190613f67565b60405180910390f35b34801561067f57600080fd5b506106886115df565b6040516106959190613fe9565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061345e565b611671565b005b3480156106d357600080fd5b506106ee60048036038101906106e991906133e3565b6117f2565b005b3480156106fc57600080fd5b50610717600480360381019061071291906135aa565b6118fd565b6040516107249190613fe9565b60405180910390f35b34801561073957600080fd5b506107426119a4565b60405161074f919061432b565b60405180910390f35b34801561076457600080fd5b5061076d6119aa565b60405161077a919061432b565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190613358565b6119b0565b6040516107b79190613fce565b60405180910390f35b3480156107cc57600080fd5b506107d5611a44565b6040516107e2919061432b565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d919061332f565b611a49565b005b34801561082057600080fd5b5061083b600480360381019061083691906135aa565b611b41565b005b610845611bc7565b005b600061085282611dbb565b9050919050565b6060600080546108689061463b565b80601f01602080910402602001604051908101604052809291908181526020018280546108949061463b565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611e35565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c9061422b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b826110c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906142ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611ea1565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611ea1565b6119b0565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a709061416b565b60405180910390fd5b610a838383611ea9565b505050565b610a90611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610aae6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb9061424b565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610b6457600080fd5b50565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b600d5481565b610ba8611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610bc66115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061424b565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900460ff16610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906141cb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610cd890614611565b9190505550601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610d2d9061466d565b9190505550610d3d838383611f62565b505050565b6000610d4d83611179565b8210610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d859061400b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610def611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610e0d6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a9061424b565b60405180910390fd5b80600d8190555050565b600f60009054906101000a900460ff16610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906141cb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f0c90614611565b9190505550601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f619061466d565b9190505550610f71838383611fc2565b505050565b60116020528060005260406000206000915090505481565b600e5481565b6000610f9e610b8d565b8210610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd6906142eb565b60405180910390fd5b60088281548110611019577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611033611ea1565b73ffffffffffffffffffffffffffffffffffffffff166110516115b5565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e9061424b565b60405180910390fd5b80600b90805190602001906110bd9291906130bd565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906141ab565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e19061418b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611239611ea1565b73ffffffffffffffffffffffffffffffffffffffff166112576115b5565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061424b565b60405180910390fd5b6112b76000611fe2565b565b600f60009054906101000a900460ff1681565b600d5442101580156112e057506000600d54115b61131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061430b565b60405180910390fd5b6000611329610b8d565b905060008211801561133c5750600a8211155b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061412b565b60405180910390fd5b34600c548361138a91906144cd565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906140cb565b60405180910390fd5b60c8610d056113da9190614527565b81836113e69190614446565b1115611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e9061410b565b60405180910390fd5b60005b828110156114af576114473382846114429190614446565b6120a8565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114979061466d565b919050555080806114a79061466d565b91505061142a565b505050565b6114bc611ea1565b73ffffffffffffffffffffffffffffffffffffffff166114da6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061424b565b60405180910390fd5b8060008151811061156a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115ee9061463b565b80601f016020809104026020016040519081016040528092919081815260200182805461161a9061463b565b80156116675780601f1061163c57610100808354040283529160200191611667565b820191906000526020600020905b81548152906001019060200180831161164a57829003601f168201915b5050505050905090565b611679611ea1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de906140ab565b60405180910390fd5b80600560006116f4611ea1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117a1611ea1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117e69190613fce565b60405180910390a35050565b600f60009054906101000a900460ff16611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906141cb565b60405180910390fd5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061189190614611565b9190505550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118e69061466d565b91905055506118f7848484846120c6565b50505050565b606061190882611e35565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e9061428b565b60405180910390fd5b6000611951612128565b90506000815111611971576040518060200160405280600081525061199c565b8061197b846121ba565b60405160200161198c929190613f43565b6040516020818303038152906040525b915050919050565b610d0581565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60c881565b611a51611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611a6f6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061424b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c9061404b565b60405180910390fd5b611b3e81611fe2565b50565b611b49611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611b676115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb49061424b565b60405180910390fd5b80600c8190555050565b600d544210158015611bdb57506000600d54115b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061430b565b60405180910390fd5b6000611c24610b8d565b905060c86001601054611c379190614446565b1115611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f9061414b565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906141eb565b60405180910390fd5b611d0433826120a8565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611d549061466d565b91905055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000828254611db19190614446565b9250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e2e5750611e2d82612367565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1c836110c1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611f73611f6d611ea1565b82612449565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906142cb565b60405180910390fd5b611fbd838383612527565b505050565b611fdd838383604051806020016040528060008152506117f2565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120c2828260405180602001604052806000815250612783565b5050565b6120d76120d1611ea1565b83612449565b612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d906142cb565b60405180910390fd5b612122848484846127de565b50505050565b6060600b80546121379061463b565b80601f01602080910402602001604051908101604052809291908181526020018280546121639061463b565b80156121b05780601f10612185576101008083540402835291602001916121b0565b820191906000526020600020905b81548152906001019060200180831161219357829003601f168201915b5050505050905090565b60606000821415612202576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612362565b600082905060005b6000821461223457808061221d9061466d565b915050600a8261222d919061449c565b915061220a565b60008167ffffffffffffffff811115612276577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122a85781602001600182028036833780820191505090505b5090505b6000851461235b576001826122c19190614527565b9150600a856122d091906146b6565b60306122dc9190614446565b60f81b818381518110612318577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612354919061449c565b94506122ac565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061243257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061244257506124418261283a565b5b9050919050565b600061245482611e35565b612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a906140eb565b60405180910390fd5b600061249e836110c1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250d57508373ffffffffffffffffffffffffffffffffffffffff166124f5846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251e575061251d81856119b0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612547826110c1565b73ffffffffffffffffffffffffffffffffffffffff161461259d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125949061426b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126049061408b565b60405180910390fd5b6126188383836128a4565b612623600082611ea9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126739190614527565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ca9190614446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61278d83836128b4565b61279a6000848484612a82565b6127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d09061402b565b60405180910390fd5b505050565b6127e9848484612527565b6127f584848484612a82565b612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b9061402b565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128af838383612c19565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b9061420b565b60405180910390fd5b61292d81611e35565b1561296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649061406b565b60405180910390fd5b612979600083836128a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c99190614446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612aa38473ffffffffffffffffffffffffffffffffffffffff16612d2d565b15612c0c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612acc611ea1565b8786866040518563ffffffff1660e01b8152600401612aee9493929190613f82565b602060405180830381600087803b158015612b0857600080fd5b505af1925050508015612b3957506040513d601f19601f82011682018060405250810190612b369190613540565b60015b612bbc573d8060008114612b69576040519150601f19603f3d011682016040523d82523d6000602084013e612b6e565b606091505b50600081511415612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab9061402b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c11565b600190505b949350505050565b612c24838383612d40565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6757612c6281612d45565b612ca6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ca557612ca48382612d8e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ce957612ce481612efb565b612d28565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2757612d26828261303e565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d9b84611179565b612da59190614527565b9050600060076000848152602001908152602001600020549050818114612e8a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f0f9190614527565b9050600060096000848152602001908152602001600020549050600060088381548110612f65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613022577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061304983611179565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130c99061463b565b90600052602060002090601f0160209004810192826130eb5760008555613132565b82601f1061310457805160ff1916838001178555613132565b82800160010185558215613132579182015b82811115613131578251825591602001919060010190613116565b5b50905061313f9190613143565b5090565b5b8082111561315c576000816000905550600101613144565b5090565b600061317361316e84614377565b614346565b9050808382526020820190508285602086028201111561319257600080fd5b60005b858110156131c257816131a88882613248565b845260208401935060208301925050600181019050613195565b5050509392505050565b60006131df6131da846143a3565b614346565b9050828152602081018484840111156131f757600080fd5b6132028482856145cf565b509392505050565b600061321d613218846143d3565b614346565b90508281526020810184848401111561323557600080fd5b6132408482856145cf565b509392505050565b600081359050613257816147b4565b92915050565b600082601f83011261326e57600080fd5b813561327e848260208601613160565b91505092915050565b600081359050613296816147cb565b92915050565b6000813590506132ab816147e2565b92915050565b6000815190506132c0816147e2565b92915050565b600082601f8301126132d757600080fd5b81356132e78482602086016131cc565b91505092915050565b600082601f83011261330157600080fd5b813561331184826020860161320a565b91505092915050565b600081359050613329816147f9565b92915050565b60006020828403121561334157600080fd5b600061334f84828501613248565b91505092915050565b6000806040838503121561336b57600080fd5b600061337985828601613248565b925050602061338a85828601613248565b9150509250929050565b6000806000606084860312156133a957600080fd5b60006133b786828701613248565b93505060206133c886828701613248565b92505060406133d98682870161331a565b9150509250925092565b600080600080608085870312156133f957600080fd5b600061340787828801613248565b945050602061341887828801613248565b93505060406134298782880161331a565b925050606085013567ffffffffffffffff81111561344657600080fd5b613452878288016132c6565b91505092959194509250565b6000806040838503121561347157600080fd5b600061347f85828601613248565b925050602061349085828601613287565b9150509250929050565b600080604083850312156134ad57600080fd5b60006134bb85828601613248565b92505060206134cc8582860161331a565b9150509250929050565b6000602082840312156134e857600080fd5b600082013567ffffffffffffffff81111561350257600080fd5b61350e8482850161325d565b91505092915050565b60006020828403121561352957600080fd5b60006135378482850161329c565b91505092915050565b60006020828403121561355257600080fd5b6000613560848285016132b1565b91505092915050565b60006020828403121561357b57600080fd5b600082013567ffffffffffffffff81111561359557600080fd5b6135a1848285016132f0565b91505092915050565b6000602082840312156135bc57600080fd5b60006135ca8482850161331a565b91505092915050565b6135dc8161455b565b82525050565b6135eb8161456d565b82525050565b60006135fc82614403565b6136068185614419565b93506136168185602086016145de565b61361f816147a3565b840191505092915050565b60006136358261440e565b61363f818561442a565b935061364f8185602086016145de565b613658816147a3565b840191505092915050565b600061366e8261440e565b613678818561443b565b93506136888185602086016145de565b80840191505092915050565b60006136a1602b8361442a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061370760328361442a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061376d60268361442a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137d3601c8361442a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061381360248361442a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061387960198361442a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006138b960188361442a565b91507f446964206e6f742073656e6420656e6f756768206574682100000000000000006000830152602082019050919050565b60006138f9602c8361442a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061395f60188361442a565b91507f4d696e742065786365656473206d617820737570706c792100000000000000006000830152602082019050919050565b600061399f60238361442a565b91507f4d696e7420616d6f756e742065786365656473206d6178206d696e742070657260008301527f20747800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a0560138361442a565b91507f4e6f206d6f72652066726565204c42434b7321000000000000000000000000006000830152602082019050919050565b6000613a4560388361442a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613aab602a8361442a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b1160298361442a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b7760138361442a565b91507f53616c65206973206e6f7420656e61626c6564000000000000000000000000006000830152602082019050919050565b6000613bb760228361442a565b91507f596f7520616c7265616479206d696e74656420796f75722066726565204c424360008301527f4b210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c1d60208361442a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c5d602c8361442a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cc360208361442a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d0360298361442a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d69602f8361442a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613dcf60218361442a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e3560318361442a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e9b602c8361442a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613f0160138361442a565b91507f53616c65206861736e27742073746172746564000000000000000000000000006000830152602082019050919050565b613f3d816145c5565b82525050565b6000613f4f8285613663565b9150613f5b8284613663565b91508190509392505050565b6000602082019050613f7c60008301846135d3565b92915050565b6000608082019050613f9760008301876135d3565b613fa460208301866135d3565b613fb16040830185613f34565b8181036060830152613fc381846135f1565b905095945050505050565b6000602082019050613fe360008301846135e2565b92915050565b60006020820190508181036000830152614003818461362a565b905092915050565b6000602082019050818103600083015261402481613694565b9050919050565b60006020820190508181036000830152614044816136fa565b9050919050565b6000602082019050818103600083015261406481613760565b9050919050565b60006020820190508181036000830152614084816137c6565b9050919050565b600060208201905081810360008301526140a481613806565b9050919050565b600060208201905081810360008301526140c48161386c565b9050919050565b600060208201905081810360008301526140e4816138ac565b9050919050565b60006020820190508181036000830152614104816138ec565b9050919050565b6000602082019050818103600083015261412481613952565b9050919050565b6000602082019050818103600083015261414481613992565b9050919050565b60006020820190508181036000830152614164816139f8565b9050919050565b6000602082019050818103600083015261418481613a38565b9050919050565b600060208201905081810360008301526141a481613a9e565b9050919050565b600060208201905081810360008301526141c481613b04565b9050919050565b600060208201905081810360008301526141e481613b6a565b9050919050565b6000602082019050818103600083015261420481613baa565b9050919050565b6000602082019050818103600083015261422481613c10565b9050919050565b6000602082019050818103600083015261424481613c50565b9050919050565b6000602082019050818103600083015261426481613cb6565b9050919050565b6000602082019050818103600083015261428481613cf6565b9050919050565b600060208201905081810360008301526142a481613d5c565b9050919050565b600060208201905081810360008301526142c481613dc2565b9050919050565b600060208201905081810360008301526142e481613e28565b9050919050565b6000602082019050818103600083015261430481613e8e565b9050919050565b6000602082019050818103600083015261432481613ef4565b9050919050565b60006020820190506143406000830184613f34565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561436d5761436c614774565b5b8060405250919050565b600067ffffffffffffffff82111561439257614391614774565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143be576143bd614774565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143ee576143ed614774565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614451826145c5565b915061445c836145c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614491576144906146e7565b5b828201905092915050565b60006144a7826145c5565b91506144b2836145c5565b9250826144c2576144c1614716565b5b828204905092915050565b60006144d8826145c5565b91506144e3836145c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561451c5761451b6146e7565b5b828202905092915050565b6000614532826145c5565b915061453d836145c5565b9250828210156145505761454f6146e7565b5b828203905092915050565b6000614566826145a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145fc5780820151818401526020810190506145e1565b8381111561460b576000848401525b50505050565b600061461c826145c5565b915060008214156146305761462f6146e7565b5b600182039050919050565b6000600282049050600182168061465357607f821691505b6020821081141561466757614666614745565b5b50919050565b6000614678826145c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ab576146aa6146e7565b5b600182019050919050565b60006146c1826145c5565b91506146cc836145c5565b9250826146dc576146db614716565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147bd8161455b565b81146147c857600080fd5b50565b6147d48161456d565b81146147df57600080fd5b50565b6147eb81614579565b81146147f657600080fd5b50565b614802816145c5565b811461480d57600080fd5b5056fea2646970667358221220cb3bae0990c0464d038a98b6a65c58bc4e89e739fc1c785e934010d473a9178264736f6c6343000800003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80636817c76c11610118578063b88d4fde116100a0578063e985e9c51161006f578063e985e9c514610783578063ed6661c2146107c0578063f2fde38b146107eb578063f4a0a52814610814578063f76dc16f1461083d5761020f565b8063b88d4fde146106c7578063c87b56dd146106f0578063dd7deda41461072d578063e55f58bb146107585761020f565b8063755f34f6116100e7578063755f34f61461060357806375fd0bb11461061f5780638da5cb5b1461064857806395d89b4114610673578063a22cb4651461069e5761020f565b80636817c76c1461055957806370a0823114610584578063715018a6146105c157806371b9b646146105d85761020f565b806323b872dd1161019b57806349ff5e151161016a57806349ff5e151461044e5780634c81433f1461048b5780634f6ccce7146104b657806355f804b3146104f35780636352211e1461051c5761020f565b806323b872dd146103965780632f745c59146103bf5780633bd2b67d146103fc57806342842e0e146104255761020f565b8063155dd5ee116101e2578063155dd5ee146102e257806317a15001146102fe57806318160ddd146103295780631cbaee2d1461035457806321cbc3671461037f5761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613517565b610847565b6040516102489190613fce565b60405180910390f35b34801561025d57600080fd5b50610266610859565b6040516102739190613fe9565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e91906135aa565b6108eb565b6040516102b09190613f67565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061349a565b610970565b005b6102fc60048036038101906102f791906135aa565b610a88565b005b34801561030a57600080fd5b50610313610b67565b6040516103209190613f67565b60405180910390f35b34801561033557600080fd5b5061033e610b8d565b60405161034b919061432b565b60405180910390f35b34801561036057600080fd5b50610369610b9a565b604051610376919061432b565b60405180910390f35b34801561038b57600080fd5b50610394610ba0565b005b3480156103a257600080fd5b506103bd60048036038101906103b89190613394565b610c39565b005b3480156103cb57600080fd5b506103e660048036038101906103e1919061349a565b610d42565b6040516103f3919061432b565b60405180910390f35b34801561040857600080fd5b50610423600480360381019061041e91906135aa565b610de7565b005b34801561043157600080fd5b5061044c60048036038101906104479190613394565b610e6d565b005b34801561045a57600080fd5b506104756004803603810190610470919061332f565b610f76565b604051610482919061432b565b60405180910390f35b34801561049757600080fd5b506104a0610f8e565b6040516104ad919061432b565b60405180910390f35b3480156104c257600080fd5b506104dd60048036038101906104d891906135aa565b610f94565b6040516104ea919061432b565b60405180910390f35b3480156104ff57600080fd5b5061051a60048036038101906105159190613569565b61102b565b005b34801561052857600080fd5b50610543600480360381019061053e91906135aa565b6110c1565b6040516105509190613f67565b60405180910390f35b34801561056557600080fd5b5061056e611173565b60405161057b919061432b565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a6919061332f565b611179565b6040516105b8919061432b565b60405180910390f35b3480156105cd57600080fd5b506105d6611231565b005b3480156105e457600080fd5b506105ed6112b9565b6040516105fa9190613fce565b60405180910390f35b61061d600480360381019061061891906135aa565b6112cc565b005b34801561062b57600080fd5b50610646600480360381019061064191906134d6565b6114b4565b005b34801561065457600080fd5b5061065d6115b5565b60405161066a9190613f67565b60405180910390f35b34801561067f57600080fd5b506106886115df565b6040516106959190613fe9565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c0919061345e565b611671565b005b3480156106d357600080fd5b506106ee60048036038101906106e991906133e3565b6117f2565b005b3480156106fc57600080fd5b50610717600480360381019061071291906135aa565b6118fd565b6040516107249190613fe9565b60405180910390f35b34801561073957600080fd5b506107426119a4565b60405161074f919061432b565b60405180910390f35b34801561076457600080fd5b5061076d6119aa565b60405161077a919061432b565b60405180910390f35b34801561078f57600080fd5b506107aa60048036038101906107a59190613358565b6119b0565b6040516107b79190613fce565b60405180910390f35b3480156107cc57600080fd5b506107d5611a44565b6040516107e2919061432b565b60405180910390f35b3480156107f757600080fd5b50610812600480360381019061080d919061332f565b611a49565b005b34801561082057600080fd5b5061083b600480360381019061083691906135aa565b611b41565b005b610845611bc7565b005b600061085282611dbb565b9050919050565b6060600080546108689061463b565b80601f01602080910402602001604051908101604052809291908181526020018280546108949061463b565b80156108e15780601f106108b6576101008083540402835291602001916108e1565b820191906000526020600020905b8154815290600101906020018083116108c457829003601f168201915b5050505050905090565b60006108f682611e35565b610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c9061422b565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097b826110c1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e3906142ab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0b611ea1565b73ffffffffffffffffffffffffffffffffffffffff161480610a3a5750610a3981610a34611ea1565b6119b0565b5b610a79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a709061416b565b60405180910390fd5b610a838383611ea9565b505050565b610a90611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610aae6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afb9061424b565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050610b6457600080fd5b50565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600880549050905090565b600d5481565b610ba8611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610bc66115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c139061424b565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b600f60009054906101000a900460ff16610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f906141cb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610cd890614611565b9190505550601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610d2d9061466d565b9190505550610d3d838383611f62565b505050565b6000610d4d83611179565b8210610d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d859061400b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610def611ea1565b73ffffffffffffffffffffffffffffffffffffffff16610e0d6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614610e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5a9061424b565b60405180910390fd5b80600d8190555050565b600f60009054906101000a900460ff16610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906141cb565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f0c90614611565b9190505550601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190610f619061466d565b9190505550610f71838383611fc2565b505050565b60116020528060005260406000206000915090505481565b600e5481565b6000610f9e610b8d565b8210610fdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd6906142eb565b60405180910390fd5b60088281548110611019577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b611033611ea1565b73ffffffffffffffffffffffffffffffffffffffff166110516115b5565b73ffffffffffffffffffffffffffffffffffffffff16146110a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109e9061424b565b60405180910390fd5b80600b90805190602001906110bd9291906130bd565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561116a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611161906141ab565b60405180910390fd5b80915050919050565b600c5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e19061418b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611239611ea1565b73ffffffffffffffffffffffffffffffffffffffff166112576115b5565b73ffffffffffffffffffffffffffffffffffffffff16146112ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a49061424b565b60405180910390fd5b6112b76000611fe2565b565b600f60009054906101000a900460ff1681565b600d5442101580156112e057506000600d54115b61131f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113169061430b565b60405180910390fd5b6000611329610b8d565b905060008211801561133c5750600a8211155b61137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061412b565b60405180910390fd5b34600c548361138a91906144cd565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906140cb565b60405180910390fd5b60c8610d056113da9190614527565b81836113e69190614446565b1115611427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141e9061410b565b60405180910390fd5b60005b828110156114af576114473382846114429190614446565b6120a8565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906114979061466d565b919050555080806114a79061466d565b91505061142a565b505050565b6114bc611ea1565b73ffffffffffffffffffffffffffffffffffffffff166114da6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611530576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115279061424b565b60405180910390fd5b8060008151811061156a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546115ee9061463b565b80601f016020809104026020016040519081016040528092919081815260200182805461161a9061463b565b80156116675780601f1061163c57610100808354040283529160200191611667565b820191906000526020600020905b81548152906001019060200180831161164a57829003601f168201915b5050505050905090565b611679611ea1565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116de906140ab565b60405180910390fd5b80600560006116f4611ea1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117a1611ea1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117e69190613fce565b60405180910390a35050565b600f60009054906101000a900460ff16611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906141cb565b60405180910390fd5b601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061189190614611565b9190505550601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118e69061466d565b91905055506118f7848484846120c6565b50505050565b606061190882611e35565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e9061428b565b60405180910390fd5b6000611951612128565b90506000815111611971576040518060200160405280600081525061199c565b8061197b846121ba565b60405160200161198c929190613f43565b6040516020818303038152906040525b915050919050565b610d0581565b60105481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60c881565b611a51611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611a6f6115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611ac5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611abc9061424b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2c9061404b565b60405180910390fd5b611b3e81611fe2565b50565b611b49611ea1565b73ffffffffffffffffffffffffffffffffffffffff16611b676115b5565b73ffffffffffffffffffffffffffffffffffffffff1614611bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb49061424b565b60405180910390fd5b80600c8190555050565b600d544210158015611bdb57506000600d54115b611c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c119061430b565b60405180910390fd5b6000611c24610b8d565b905060c86001601054611c379190614446565b1115611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f9061414b565b60405180910390fd5b6001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906141eb565b60405180910390fd5b611d0433826120a8565b601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611d549061466d565b91905055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000828254611db19190614446565b9250508190555050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e2e5750611e2d82612367565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611f1c836110c1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611f73611f6d611ea1565b82612449565b611fb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa9906142cb565b60405180910390fd5b611fbd838383612527565b505050565b611fdd838383604051806020016040528060008152506117f2565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6120c2828260405180602001604052806000815250612783565b5050565b6120d76120d1611ea1565b83612449565b612116576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210d906142cb565b60405180910390fd5b612122848484846127de565b50505050565b6060600b80546121379061463b565b80601f01602080910402602001604051908101604052809291908181526020018280546121639061463b565b80156121b05780601f10612185576101008083540402835291602001916121b0565b820191906000526020600020905b81548152906001019060200180831161219357829003601f168201915b5050505050905090565b60606000821415612202576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612362565b600082905060005b6000821461223457808061221d9061466d565b915050600a8261222d919061449c565b915061220a565b60008167ffffffffffffffff811115612276577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156122a85781602001600182028036833780820191505090505b5090505b6000851461235b576001826122c19190614527565b9150600a856122d091906146b6565b60306122dc9190614446565b60f81b818381518110612318577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612354919061449c565b94506122ac565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061243257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061244257506124418261283a565b5b9050919050565b600061245482611e35565b612493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248a906140eb565b60405180910390fd5b600061249e836110c1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061250d57508373ffffffffffffffffffffffffffffffffffffffff166124f5846108eb565b73ffffffffffffffffffffffffffffffffffffffff16145b8061251e575061251d81856119b0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612547826110c1565b73ffffffffffffffffffffffffffffffffffffffff161461259d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125949061426b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561260d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126049061408b565b60405180910390fd5b6126188383836128a4565b612623600082611ea9565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126739190614527565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126ca9190614446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61278d83836128b4565b61279a6000848484612a82565b6127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d09061402b565b60405180910390fd5b505050565b6127e9848484612527565b6127f584848484612a82565b612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b9061402b565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6128af838383612c19565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161291b9061420b565b60405180910390fd5b61292d81611e35565b1561296d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129649061406b565b60405180910390fd5b612979600083836128a4565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c99190614446565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612aa38473ffffffffffffffffffffffffffffffffffffffff16612d2d565b15612c0c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612acc611ea1565b8786866040518563ffffffff1660e01b8152600401612aee9493929190613f82565b602060405180830381600087803b158015612b0857600080fd5b505af1925050508015612b3957506040513d601f19601f82011682018060405250810190612b369190613540565b60015b612bbc573d8060008114612b69576040519150601f19603f3d011682016040523d82523d6000602084013e612b6e565b606091505b50600081511415612bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bab9061402b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c11565b600190505b949350505050565b612c24838383612d40565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c6757612c6281612d45565b612ca6565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612ca557612ca48382612d8e565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ce957612ce481612efb565b612d28565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612d2757612d26828261303e565b5b5b505050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612d9b84611179565b612da59190614527565b9050600060076000848152602001908152602001600020549050818114612e8a576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612f0f9190614527565b9050600060096000848152602001908152602001600020549050600060088381548110612f65577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612fad577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613022577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061304983611179565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546130c99061463b565b90600052602060002090601f0160209004810192826130eb5760008555613132565b82601f1061310457805160ff1916838001178555613132565b82800160010185558215613132579182015b82811115613131578251825591602001919060010190613116565b5b50905061313f9190613143565b5090565b5b8082111561315c576000816000905550600101613144565b5090565b600061317361316e84614377565b614346565b9050808382526020820190508285602086028201111561319257600080fd5b60005b858110156131c257816131a88882613248565b845260208401935060208301925050600181019050613195565b5050509392505050565b60006131df6131da846143a3565b614346565b9050828152602081018484840111156131f757600080fd5b6132028482856145cf565b509392505050565b600061321d613218846143d3565b614346565b90508281526020810184848401111561323557600080fd5b6132408482856145cf565b509392505050565b600081359050613257816147b4565b92915050565b600082601f83011261326e57600080fd5b813561327e848260208601613160565b91505092915050565b600081359050613296816147cb565b92915050565b6000813590506132ab816147e2565b92915050565b6000815190506132c0816147e2565b92915050565b600082601f8301126132d757600080fd5b81356132e78482602086016131cc565b91505092915050565b600082601f83011261330157600080fd5b813561331184826020860161320a565b91505092915050565b600081359050613329816147f9565b92915050565b60006020828403121561334157600080fd5b600061334f84828501613248565b91505092915050565b6000806040838503121561336b57600080fd5b600061337985828601613248565b925050602061338a85828601613248565b9150509250929050565b6000806000606084860312156133a957600080fd5b60006133b786828701613248565b93505060206133c886828701613248565b92505060406133d98682870161331a565b9150509250925092565b600080600080608085870312156133f957600080fd5b600061340787828801613248565b945050602061341887828801613248565b93505060406134298782880161331a565b925050606085013567ffffffffffffffff81111561344657600080fd5b613452878288016132c6565b91505092959194509250565b6000806040838503121561347157600080fd5b600061347f85828601613248565b925050602061349085828601613287565b9150509250929050565b600080604083850312156134ad57600080fd5b60006134bb85828601613248565b92505060206134cc8582860161331a565b9150509250929050565b6000602082840312156134e857600080fd5b600082013567ffffffffffffffff81111561350257600080fd5b61350e8482850161325d565b91505092915050565b60006020828403121561352957600080fd5b60006135378482850161329c565b91505092915050565b60006020828403121561355257600080fd5b6000613560848285016132b1565b91505092915050565b60006020828403121561357b57600080fd5b600082013567ffffffffffffffff81111561359557600080fd5b6135a1848285016132f0565b91505092915050565b6000602082840312156135bc57600080fd5b60006135ca8482850161331a565b91505092915050565b6135dc8161455b565b82525050565b6135eb8161456d565b82525050565b60006135fc82614403565b6136068185614419565b93506136168185602086016145de565b61361f816147a3565b840191505092915050565b60006136358261440e565b61363f818561442a565b935061364f8185602086016145de565b613658816147a3565b840191505092915050565b600061366e8261440e565b613678818561443b565b93506136888185602086016145de565b80840191505092915050565b60006136a1602b8361442a565b91507f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008301527f74206f6620626f756e64730000000000000000000000000000000000000000006020830152604082019050919050565b600061370760328361442a565b91507f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008301527f63656976657220696d706c656d656e74657200000000000000000000000000006020830152604082019050919050565b600061376d60268361442a565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137d3601c8361442a565b91507f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006000830152602082019050919050565b600061381360248361442a565b91507f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061387960198361442a565b91507f4552433732313a20617070726f766520746f2063616c6c6572000000000000006000830152602082019050919050565b60006138b960188361442a565b91507f446964206e6f742073656e6420656e6f756768206574682100000000000000006000830152602082019050919050565b60006138f9602c8361442a565b91507f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b600061395f60188361442a565b91507f4d696e742065786365656473206d617820737570706c792100000000000000006000830152602082019050919050565b600061399f60238361442a565b91507f4d696e7420616d6f756e742065786365656473206d6178206d696e742070657260008301527f20747800000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a0560138361442a565b91507f4e6f206d6f72652066726565204c42434b7321000000000000000000000000006000830152602082019050919050565b6000613a4560388361442a565b91507f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008301527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006020830152604082019050919050565b6000613aab602a8361442a565b91507f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008301527f726f2061646472657373000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b1160298361442a565b91507f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008301527f656e7420746f6b656e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b7760138361442a565b91507f53616c65206973206e6f7420656e61626c6564000000000000000000000000006000830152602082019050919050565b6000613bb760228361442a565b91507f596f7520616c7265616479206d696e74656420796f75722066726565204c424360008301527f4b210000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613c1d60208361442a565b91507f4552433732313a206d696e7420746f20746865207a65726f20616464726573736000830152602082019050919050565b6000613c5d602c8361442a565b91507f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008301527f697374656e7420746f6b656e00000000000000000000000000000000000000006020830152604082019050919050565b6000613cc360208361442a565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000613d0360298361442a565b91507f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008301527f73206e6f74206f776e00000000000000000000000000000000000000000000006020830152604082019050919050565b6000613d69602f8361442a565b91507f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008301527f6e6578697374656e7420746f6b656e00000000000000000000000000000000006020830152604082019050919050565b6000613dcf60218361442a565b91507f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008301527f72000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613e3560318361442a565b91507f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008301527f776e6572206e6f7220617070726f7665640000000000000000000000000000006020830152604082019050919050565b6000613e9b602c8361442a565b91507f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008301527f7574206f6620626f756e647300000000000000000000000000000000000000006020830152604082019050919050565b6000613f0160138361442a565b91507f53616c65206861736e27742073746172746564000000000000000000000000006000830152602082019050919050565b613f3d816145c5565b82525050565b6000613f4f8285613663565b9150613f5b8284613663565b91508190509392505050565b6000602082019050613f7c60008301846135d3565b92915050565b6000608082019050613f9760008301876135d3565b613fa460208301866135d3565b613fb16040830185613f34565b8181036060830152613fc381846135f1565b905095945050505050565b6000602082019050613fe360008301846135e2565b92915050565b60006020820190508181036000830152614003818461362a565b905092915050565b6000602082019050818103600083015261402481613694565b9050919050565b60006020820190508181036000830152614044816136fa565b9050919050565b6000602082019050818103600083015261406481613760565b9050919050565b60006020820190508181036000830152614084816137c6565b9050919050565b600060208201905081810360008301526140a481613806565b9050919050565b600060208201905081810360008301526140c48161386c565b9050919050565b600060208201905081810360008301526140e4816138ac565b9050919050565b60006020820190508181036000830152614104816138ec565b9050919050565b6000602082019050818103600083015261412481613952565b9050919050565b6000602082019050818103600083015261414481613992565b9050919050565b60006020820190508181036000830152614164816139f8565b9050919050565b6000602082019050818103600083015261418481613a38565b9050919050565b600060208201905081810360008301526141a481613a9e565b9050919050565b600060208201905081810360008301526141c481613b04565b9050919050565b600060208201905081810360008301526141e481613b6a565b9050919050565b6000602082019050818103600083015261420481613baa565b9050919050565b6000602082019050818103600083015261422481613c10565b9050919050565b6000602082019050818103600083015261424481613c50565b9050919050565b6000602082019050818103600083015261426481613cb6565b9050919050565b6000602082019050818103600083015261428481613cf6565b9050919050565b600060208201905081810360008301526142a481613d5c565b9050919050565b600060208201905081810360008301526142c481613dc2565b9050919050565b600060208201905081810360008301526142e481613e28565b9050919050565b6000602082019050818103600083015261430481613e8e565b9050919050565b6000602082019050818103600083015261432481613ef4565b9050919050565b60006020820190506143406000830184613f34565b92915050565b6000604051905081810181811067ffffffffffffffff8211171561436d5761436c614774565b5b8060405250919050565b600067ffffffffffffffff82111561439257614391614774565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143be576143bd614774565b5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff8211156143ee576143ed614774565b5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614451826145c5565b915061445c836145c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614491576144906146e7565b5b828201905092915050565b60006144a7826145c5565b91506144b2836145c5565b9250826144c2576144c1614716565b5b828204905092915050565b60006144d8826145c5565b91506144e3836145c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561451c5761451b6146e7565b5b828202905092915050565b6000614532826145c5565b915061453d836145c5565b9250828210156145505761454f6146e7565b5b828203905092915050565b6000614566826145a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156145fc5780820151818401526020810190506145e1565b8381111561460b576000848401525b50505050565b600061461c826145c5565b915060008214156146305761462f6146e7565b5b600182039050919050565b6000600282049050600182168061465357607f821691505b6020821081141561466757614666614745565b5b50919050565b6000614678826145c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156146ab576146aa6146e7565b5b600182019050919050565b60006146c1826145c5565b91506146cc836145c5565b9250826146dc576146db614716565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6147bd8161455b565b81146147c857600080fd5b50565b6147d48161456d565b81146147df57600080fd5b50565b6147eb81614579565b81146147f657600080fd5b50565b614802816145c5565b811461480d57600080fd5b5056fea2646970667358221220cb3bae0990c0464d038a98b6a65c58bc4e89e739fc1c785e934010d473a9178264736f6c63430008000033

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

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _lbck (string):

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

43290:3650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43994:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22692:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24253:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23776:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45047:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43772:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35442:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43514:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44959:80;;;;;;;;;;;;;:::i;:::-;;46250:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35110:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44858:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46468:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43669:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43553:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35632:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44660:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22386:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43470:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22116:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42599:94;;;;;;;;;;;;;:::i;:::-;;43592:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45714:527;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45176:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41948:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22861:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24546:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46694:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23036:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43350:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43630:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24912:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43396:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42848:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44760:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45292:414;;;:::i;:::-;;43994:179;44105:4;44129:36;44153:11;44129:23;:36::i;:::-;44122:43;;43994:179;;;:::o;22692:100::-;22746:13;22779:5;22772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22692:100;:::o;24253:221::-;24329:7;24357:16;24365:7;24357;:16::i;:::-;24349:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:15;:24;24458:7;24442:24;;;;;;;;;;;;;;;;;;;;;24435:31;;24253:221;;;:::o;23776:411::-;23857:13;23873:23;23888:7;23873:14;:23::i;:::-;23857:39;;23921:5;23915:11;;:2;:11;;;;23907:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24015:5;23999:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24024:37;24041:5;24048:12;:10;:12::i;:::-;24024:16;:37::i;:::-;23999:62;23977:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24158:21;24167:2;24171:7;24158:8;:21::i;:::-;23776:411;;;:::o;45047:121::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45137:9:::1;;;;;;;;;;;45129:23;;:30;45153:5;45129:30;;;;;;;;;;;;;;;;;;;;;;;45121:39;;;::::0;::::1;;45047:121:::0;:::o;43772:24::-;;;;;;;;;;;;;:::o;35442:113::-;35503:7;35530:10;:17;;;;35523:24;;35442:113;:::o;43514:32::-;;;;:::o;44959:80::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45027:4:::1;45013:11;;:18;;;;;;;;;;;;;;;;;;44959:80::o:0;46250:210::-;44378:11;;;;;;;;;;;44370:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46356:11:::1;:17;46368:4;46356:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;46386:11;:15;46398:2;46386:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;46414:38;46434:4;46440:2;46444:7;46414:19;:38::i;:::-;46250:210:::0;;;:::o;35110:256::-;35207:7;35243:23;35260:5;35243:16;:23::i;:::-;35235:5;:31;35227:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35332:12;:19;35345:5;35332:19;;;;;;;;;;;;;;;:26;35352:5;35332:26;;;;;;;;;;;;35325:33;;35110:256;;;;:::o;44858:93::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44938:5:::1;44922:13;:21;;;;44858:93:::0;:::o;46468:218::-;44378:11;;;;;;;;;;;44370:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46578:11:::1;:17;46590:4;46578:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;46608:11;:15;46620:2;46608:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;46636:42;46660:4;46666:2;46670:7;46636:23;:42::i;:::-;46468:218:::0;;;:::o;43669:47::-;;;;;;;;;;;;;;;;;:::o;43553:32::-;;;;:::o;35632:233::-;35707:7;35743:30;:28;:30::i;:::-;35735:5;:38;35727:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;35840:10;35851:5;35840:17;;;;;;;;;;;;;;;;;;;;;;;;35833:24;;35632:233;;;:::o;44660:92::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44739:5:::1;44729:7;:15;;;;;;;;;;;;:::i;:::-;;44660:92:::0;:::o;22386:239::-;22458:7;22478:13;22494:7;:16;22502:7;22494:16;;;;;;;;;;;;;;;;;;;;;22478:32;;22546:1;22529:19;;:5;:19;;;;22521:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22612:5;22605:12;;;22386:239;;;:::o;43470:37::-;;;;:::o;22116:208::-;22188:7;22233:1;22216:19;;:5;:19;;;;22208:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22300:9;:16;22310:5;22300:16;;;;;;;;;;;;;;;;22293:23;;22116:208;;;:::o;42599:94::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42664:21:::1;42682:1;42664:9;:21::i;:::-;42599:94::o:0;43592:31::-;;;;;;;;;;;;;:::o;45714:527::-;44244:13;;44225:15;:32;;:53;;;;;44277:1;44261:13;;:17;44225:53;44217:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;45787:14:::1;45804:13;:11;:13::i;:::-;45787:30;;45846:1;45838:5;:9;:24;;;;;45860:2;45851:5;:11;;45838:24;45830:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;45942:9;45929;;45921:5;:17;;;;:::i;:::-;:30;;45913:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43431:3;43385:4;46018:19;;;;:::i;:::-;46007:6;45999:5;:14;;;;:::i;:::-;:39;;45991:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;46085:15;46080:154;46111:5;46101:7;:15;46080:154;;;46143:39;46153:10;46174:7;46165:6;:16;;;;:::i;:::-;46143:9;:39::i;:::-;46197:11;:23;46209:10;46197:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;46117:9;;;;;:::i;:::-;;;;46080:154;;;;44313:1;45714:527:::0;:::o;45176:108::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45268:5:::1;45274:1;45268:8;;;;;;;;;;;;;;;;;;;;;;45256:9;;:20;;;;;;;;;;;;;;;;;;45176:108:::0;:::o;41948:87::-;41994:7;42021:6;;;;;;;;;;;42014:13;;41948:87;:::o;22861:104::-;22917:13;22950:7;22943:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22861:104;:::o;24546:295::-;24661:12;:10;:12::i;:::-;24649:24;;:8;:24;;;;24641:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;24761:8;24716:18;:32;24735:12;:10;:12::i;:::-;24716:32;;;;;;;;;;;;;;;:42;24749:8;24716:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;24814:8;24785:48;;24800:12;:10;:12::i;:::-;24785:48;;;24824:8;24785:48;;;;;;:::i;:::-;;;;;;;;24546:295;;:::o;46694:243::-;44378:11;;;;;;;;;;;44370:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;46823:11:::1;:17;46835:4;46823:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;46853:11;:15;46865:2;46853:15;;;;;;;;;;;;;;;;:17;;;;;;;;;:::i;:::-;;;;;;46881:48;46905:4;46911:2;46915:7;46924:4;46881:23;:48::i;:::-;46694:243:::0;;;;:::o;23036:336::-;23109:13;23143:16;23151:7;23143;:16::i;:::-;23135:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23224:21;23248:10;:8;:10::i;:::-;23224:34;;23300:1;23282:7;23276:21;:25;:88;;;;;;;;;;;;;;;;;23328:7;23337:20;23338:7;23337:18;:20::i;:::-;23311:47;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23276:88;23269:95;;;23036:336;;;:::o;43350:39::-;43385:4;43350:39;:::o;43630:32::-;;;;:::o;24912:164::-;25009:4;25033:18;:25;25052:5;25033:25;;;;;;;;;;;;;;;:35;25059:8;25033:35;;;;;;;;;;;;;;;;;;;;;;;;;25026:42;;24912:164;;;;:::o;43396:38::-;43431:3;43396:38;:::o;42848:192::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42957:1:::1;42937:22;;:8;:22;;;;42929:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;43013:19;43023:8;43013:9;:19::i;:::-;42848:192:::0;:::o;44760:90::-;42179:12;:10;:12::i;:::-;42168:23;;:7;:5;:7::i;:::-;:23;;;42160:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44837:5:::1;44825:9;:17;;;;44760:90:::0;:::o;45292:414::-;44244:13;;44225:15;:32;;:53;;;;;44277:1;44261:13;;:17;44225:53;44217:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;45356:14:::1;45373:13;:11;:13::i;:::-;45356:30;;43431:3;45423:1;45407:13;;:17;;;;:::i;:::-;:29;;45399:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;45508:1;45479:14;:26;45494:10;45479:26;;;;;;;;;;;;;;;;:30;45471:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;45561:29;45571:10;45583:6;45561:9;:29::i;:::-;45601:11;:23;45613:10;45601:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;45668:1;45639:14;:26;45654:10;45639:26;;;;;;;;;;;;;;;:30;;;;45697:1;45680:13;;:18;;;;;;;:::i;:::-;;;;;;;;44313:1;45292:414::o:0;34802:224::-;34904:4;34943:35;34928:50;;;:11;:50;;;;:90;;;;34982:36;35006:11;34982:23;:36::i;:::-;34928:90;34921:97;;34802:224;;;:::o;27647:127::-;27712:4;27764:1;27736:30;;:7;:16;27744:7;27736:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27729:37;;27647:127;;;:::o;20201:98::-;20254:7;20281:10;20274:17;;20201:98;:::o;31629:174::-;31731:2;31704:15;:24;31720:7;31704:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31787:7;31783:2;31749:46;;31758:23;31773:7;31758:14;:23::i;:::-;31749:46;;;;;;;;;;;;31629:174;;:::o;25143:339::-;25338:41;25357:12;:10;:12::i;:::-;25371:7;25338:18;:41::i;:::-;25330:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25446:28;25456:4;25462:2;25466:7;25446:9;:28::i;:::-;25143:339;;;:::o;25553:185::-;25691:39;25708:4;25714:2;25718:7;25691:39;;;;;;;;;;;;:16;:39::i;:::-;25553:185;;;:::o;43048:173::-;43104:16;43123:6;;;;;;;;;;;43104:25;;43149:8;43140:6;;:17;;;;;;;;;;;;;;;;;;43204:8;43173:40;;43194:8;43173:40;;;;;;;;;;;;43048:173;;:::o;28631:110::-;28707:26;28717:2;28721:7;28707:26;;;;;;;;;;;;:9;:26::i;:::-;28631:110;;:::o;25809:328::-;25984:41;26003:12;:10;:12::i;:::-;26017:7;25984:18;:41::i;:::-;25976:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26090:39;26104:4;26110:2;26114:7;26123:5;26090:13;:39::i;:::-;25809:328;;;;:::o;44552:100::-;44604:13;44637:7;44630:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44552:100;:::o;422:723::-;478:13;708:1;699:5;:10;695:53;;;726:10;;;;;;;;;;;;;;;;;;;;;695:53;758:12;773:5;758:20;;789:14;814:78;829:1;821:4;:9;814:78;;847:8;;;;;:::i;:::-;;;;878:2;870:10;;;;;:::i;:::-;;;814:78;;;902:19;934:6;924:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;902:39;;952:154;968:1;959:5;:10;952:154;;996:1;986:11;;;;;:::i;:::-;;;1063:2;1055:5;:10;;;;:::i;:::-;1042:2;:24;;;;:::i;:::-;1029:39;;1012:6;1019;1012:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1092:2;1083:11;;;;;:::i;:::-;;;952:154;;;1130:6;1116:21;;;;;422:723;;;;:::o;21747:305::-;21849:4;21901:25;21886:40;;;:11;:40;;;;:105;;;;21958:33;21943:48;;;:11;:48;;;;21886:105;:158;;;;22008:36;22032:11;22008:23;:36::i;:::-;21886:158;21866:178;;21747:305;;;:::o;27941:348::-;28034:4;28059:16;28067:7;28059;:16::i;:::-;28051:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28135:13;28151:23;28166:7;28151:14;:23::i;:::-;28135:39;;28204:5;28193:16;;:7;:16;;;:51;;;;28237:7;28213:31;;:20;28225:7;28213:11;:20::i;:::-;:31;;;28193:51;:87;;;;28248:32;28265:5;28272:7;28248:16;:32::i;:::-;28193:87;28185:96;;;27941:348;;;;:::o;30933:578::-;31092:4;31065:31;;:23;31080:7;31065:14;:23::i;:::-;:31;;;31057:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31175:1;31161:16;;:2;:16;;;;31153:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31231:39;31252:4;31258:2;31262:7;31231:20;:39::i;:::-;31335:29;31352:1;31356:7;31335:8;:29::i;:::-;31396:1;31377:9;:15;31387:4;31377:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31425:1;31408:9;:13;31418:2;31408:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31456:2;31437:7;:16;31445:7;31437:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31495:7;31491:2;31476:27;;31485:4;31476:27;;;;;;;;;;;;30933:578;;;:::o;28968:321::-;29098:18;29104:2;29108:7;29098:5;:18::i;:::-;29149:54;29180:1;29184:2;29188:7;29197:5;29149:22;:54::i;:::-;29127:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28968:321;;;:::o;27019:315::-;27176:28;27186:4;27192:2;27196:7;27176:9;:28::i;:::-;27223:48;27246:4;27252:2;27256:7;27265:5;27223:22;:48::i;:::-;27215:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27019:315;;;;:::o;12887:157::-;12972:4;13011:25;12996:40;;;:11;:40;;;;12989:47;;12887:157;;;:::o;43805:181::-;43933:45;43960:4;43966:2;43970:7;43933:26;:45::i;:::-;43805:181;;;:::o;29625:382::-;29719:1;29705:16;;:2;:16;;;;29697:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29778:16;29786:7;29778;:16::i;:::-;29777:17;29769:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29840:45;29869:1;29873:2;29877:7;29840:20;:45::i;:::-;29915:1;29898:9;:13;29908:2;29898:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29946:2;29927:7;:16;29935:7;29927:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29991:7;29987:2;29966:33;;29983:1;29966:33;;;;;;;;;;;;29625:382;;:::o;32368:799::-;32523:4;32544:15;:2;:13;;;:15::i;:::-;32540:620;;;32596:2;32580:36;;;32617:12;:10;:12::i;:::-;32631:4;32637:7;32646:5;32580:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32576:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32839:1;32822:6;:13;:18;32818:272;;;32865:60;;;;;;;;;;:::i;:::-;;;;;;;;32818:272;33040:6;33034:13;33025:6;33021:2;33017:15;33010:38;32576:529;32713:41;;;32703:51;;;:6;:51;;;;32696:58;;;;;32540:620;33144:4;33137:11;;32368:799;;;;;;;:::o;36478:589::-;36622:45;36649:4;36655:2;36659:7;36622:26;:45::i;:::-;36700:1;36684:18;;:4;:18;;;36680:187;;;36719:40;36751:7;36719:31;:40::i;:::-;36680:187;;;36789:2;36781:10;;:4;:10;;;36777:90;;36808:47;36841:4;36847:7;36808:32;:47::i;:::-;36777:90;36680:187;36895:1;36881:16;;:2;:16;;;36877:183;;;36914:45;36951:7;36914:36;:45::i;:::-;36877:183;;;36987:4;36981:10;;:2;:10;;;36977:83;;37008:40;37036:2;37040:7;37008:27;:40::i;:::-;36977:83;36877:183;36478:589;;;:::o;2947:387::-;3007:4;3215:12;3282:7;3270:20;3262:28;;3325:1;3318:4;:8;3311:15;;;2947:387;;;:::o;33739:126::-;;;;:::o;37790:164::-;37894:10;:17;;;;37867:15;:24;37883:7;37867:24;;;;;;;;;;;:44;;;;37922:10;37938:7;37922:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37790:164;:::o;38581:988::-;38847:22;38897:1;38872:22;38889:4;38872:16;:22::i;:::-;:26;;;;:::i;:::-;38847:51;;38909:18;38930:17;:26;38948:7;38930:26;;;;;;;;;;;;38909:47;;39077:14;39063:10;:28;39059:328;;39108:19;39130:12;:18;39143:4;39130:18;;;;;;;;;;;;;;;:34;39149:14;39130:34;;;;;;;;;;;;39108:56;;39214:11;39181:12;:18;39194:4;39181:18;;;;;;;;;;;;;;;:30;39200:10;39181:30;;;;;;;;;;;:44;;;;39331:10;39298:17;:30;39316:11;39298:30;;;;;;;;;;;:43;;;;39059:328;;39483:17;:26;39501:7;39483:26;;;;;;;;;;;39476:33;;;39527:12;:18;39540:4;39527:18;;;;;;;;;;;;;;;:34;39546:14;39527:34;;;;;;;;;;;39520:41;;;38581:988;;;;:::o;39864:1079::-;40117:22;40162:1;40142:10;:17;;;;:21;;;;:::i;:::-;40117:46;;40174:18;40195:15;:24;40211:7;40195:24;;;;;;;;;;;;40174:45;;40546:19;40568:10;40579:14;40568:26;;;;;;;;;;;;;;;;;;;;;;;;40546:48;;40632:11;40607:10;40618;40607:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;40743:10;40712:15;:28;40728:11;40712:28;;;;;;;;;;;:41;;;;40884:15;:24;40900:7;40884:24;;;;;;;;;;;40877:31;;;40919:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39864:1079;;;;:::o;37368:221::-;37453:14;37470:20;37487:2;37470:16;:20::i;:::-;37453:37;;37528:7;37501:12;:16;37514:2;37501:16;;;;;;;;;;;;;;;:24;37518:6;37501:24;;;;;;;;;;;:34;;;;37575:6;37546:17;:26;37564:7;37546:26;;;;;;;;;;;:35;;;;37368:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:622:1:-;;145:80;160:64;217:6;160:64;:::i;:::-;145:80;:::i;:::-;136:89;;245:5;273:6;266:5;259:21;299:4;292:5;288:16;281:23;;324:6;374:3;366:4;358:6;354:17;349:3;345:27;342:36;339:2;;;391:1;388;381:12;339:2;419:1;404:236;429:6;426:1;423:13;404:236;;;496:3;524:37;557:3;545:10;524:37;:::i;:::-;519:3;512:50;591:4;586:3;582:14;575:21;;625:4;620:3;616:14;609:21;;464:176;451:1;448;444:9;439:14;;404:236;;;408:14;126:520;;;;;;;:::o;652:342::-;;754:64;769:48;810:6;769:48;:::i;:::-;754:64;:::i;:::-;745:73;;841:6;834:5;827:21;879:4;872:5;868:16;917:3;908:6;903:3;899:16;896:25;893:2;;;934:1;931;924:12;893:2;947:41;981:6;976:3;971;947:41;:::i;:::-;735:259;;;;;;:::o;1000:344::-;;1103:65;1118:49;1160:6;1118:49;:::i;:::-;1103:65;:::i;:::-;1094:74;;1191:6;1184:5;1177:21;1229:4;1222:5;1218:16;1267:3;1258:6;1253:3;1249:16;1246:25;1243:2;;;1284:1;1281;1274:12;1243:2;1297:41;1331:6;1326:3;1321;1297:41;:::i;:::-;1084:260;;;;;;:::o;1350:139::-;;1434:6;1421:20;1412:29;;1450:33;1477:5;1450:33;:::i;:::-;1402:87;;;;:::o;1512:303::-;;1632:3;1625:4;1617:6;1613:17;1609:27;1599:2;;1650:1;1647;1640:12;1599:2;1690:6;1677:20;1715:94;1805:3;1797:6;1790:4;1782:6;1778:17;1715:94;:::i;:::-;1706:103;;1589:226;;;;;:::o;1821:133::-;;1902:6;1889:20;1880:29;;1918:30;1942:5;1918:30;:::i;:::-;1870:84;;;;:::o;1960:137::-;;2043:6;2030:20;2021:29;;2059:32;2085:5;2059:32;:::i;:::-;2011:86;;;;:::o;2103:141::-;;2190:6;2184:13;2175:22;;2206:32;2232:5;2206:32;:::i;:::-;2165:79;;;;:::o;2263:271::-;;2367:3;2360:4;2352:6;2348:17;2344:27;2334:2;;2385:1;2382;2375:12;2334:2;2425:6;2412:20;2450:78;2524:3;2516:6;2509:4;2501:6;2497:17;2450:78;:::i;:::-;2441:87;;2324:210;;;;;:::o;2554:273::-;;2659:3;2652:4;2644:6;2640:17;2636:27;2626:2;;2677:1;2674;2667:12;2626:2;2717:6;2704:20;2742:79;2817:3;2809:6;2802:4;2794:6;2790:17;2742:79;:::i;:::-;2733:88;;2616:211;;;;;:::o;2833:139::-;;2917:6;2904:20;2895:29;;2933:33;2960:5;2933:33;:::i;:::-;2885:87;;;;:::o;2978:262::-;;3086:2;3074:9;3065:7;3061:23;3057:32;3054:2;;;3102:1;3099;3092:12;3054:2;3145:1;3170:53;3215:7;3206:6;3195:9;3191:22;3170:53;:::i;:::-;3160:63;;3116:117;3044:196;;;;:::o;3246:407::-;;;3371:2;3359:9;3350:7;3346:23;3342:32;3339:2;;;3387:1;3384;3377:12;3339:2;3430:1;3455:53;3500:7;3491:6;3480:9;3476:22;3455:53;:::i;:::-;3445:63;;3401:117;3557:2;3583:53;3628:7;3619:6;3608:9;3604:22;3583:53;:::i;:::-;3573:63;;3528:118;3329:324;;;;;:::o;3659:552::-;;;;3801:2;3789:9;3780:7;3776:23;3772:32;3769:2;;;3817:1;3814;3807:12;3769:2;3860:1;3885:53;3930:7;3921:6;3910:9;3906:22;3885:53;:::i;:::-;3875:63;;3831:117;3987:2;4013:53;4058:7;4049:6;4038:9;4034:22;4013:53;:::i;:::-;4003:63;;3958:118;4115:2;4141:53;4186:7;4177:6;4166:9;4162:22;4141:53;:::i;:::-;4131:63;;4086:118;3759:452;;;;;:::o;4217:809::-;;;;;4385:3;4373:9;4364:7;4360:23;4356:33;4353:2;;;4402:1;4399;4392:12;4353:2;4445:1;4470:53;4515:7;4506:6;4495:9;4491:22;4470:53;:::i;:::-;4460:63;;4416:117;4572:2;4598:53;4643:7;4634:6;4623:9;4619:22;4598:53;:::i;:::-;4588:63;;4543:118;4700:2;4726:53;4771:7;4762:6;4751:9;4747:22;4726:53;:::i;:::-;4716:63;;4671:118;4856:2;4845:9;4841:18;4828:32;4887:18;4879:6;4876:30;4873:2;;;4919:1;4916;4909:12;4873:2;4947:62;5001:7;4992:6;4981:9;4977:22;4947:62;:::i;:::-;4937:72;;4799:220;4343:683;;;;;;;:::o;5032:401::-;;;5154:2;5142:9;5133:7;5129:23;5125:32;5122:2;;;5170:1;5167;5160:12;5122:2;5213:1;5238:53;5283:7;5274:6;5263:9;5259:22;5238:53;:::i;:::-;5228:63;;5184:117;5340:2;5366:50;5408:7;5399:6;5388:9;5384:22;5366:50;:::i;:::-;5356:60;;5311:115;5112:321;;;;;:::o;5439:407::-;;;5564:2;5552:9;5543:7;5539:23;5535:32;5532:2;;;5580:1;5577;5570:12;5532:2;5623:1;5648:53;5693:7;5684:6;5673:9;5669:22;5648:53;:::i;:::-;5638:63;;5594:117;5750:2;5776:53;5821:7;5812:6;5801:9;5797:22;5776:53;:::i;:::-;5766:63;;5721:118;5522:324;;;;;:::o;5852:405::-;;5985:2;5973:9;5964:7;5960:23;5956:32;5953:2;;;6001:1;5998;5991:12;5953:2;6072:1;6061:9;6057:17;6044:31;6102:18;6094:6;6091:30;6088:2;;;6134:1;6131;6124:12;6088:2;6162:78;6232:7;6223:6;6212:9;6208:22;6162:78;:::i;:::-;6152:88;;6015:235;5943:314;;;;:::o;6263:260::-;;6370:2;6358:9;6349:7;6345:23;6341:32;6338:2;;;6386:1;6383;6376:12;6338:2;6429:1;6454:52;6498:7;6489:6;6478:9;6474:22;6454:52;:::i;:::-;6444:62;;6400:116;6328:195;;;;:::o;6529:282::-;;6647:2;6635:9;6626:7;6622:23;6618:32;6615:2;;;6663:1;6660;6653:12;6615:2;6706:1;6731:63;6786:7;6777:6;6766:9;6762:22;6731:63;:::i;:::-;6721:73;;6677:127;6605:206;;;;:::o;6817:375::-;;6935:2;6923:9;6914:7;6910:23;6906:32;6903:2;;;6951:1;6948;6941:12;6903:2;7022:1;7011:9;7007:17;6994:31;7052:18;7044:6;7041:30;7038:2;;;7084:1;7081;7074:12;7038:2;7112:63;7167:7;7158:6;7147:9;7143:22;7112:63;:::i;:::-;7102:73;;6965:220;6893:299;;;;:::o;7198:262::-;;7306:2;7294:9;7285:7;7281:23;7277:32;7274:2;;;7322:1;7319;7312:12;7274:2;7365:1;7390:53;7435:7;7426:6;7415:9;7411:22;7390:53;:::i;:::-;7380:63;;7336:117;7264:196;;;;:::o;7466:118::-;7553:24;7571:5;7553:24;:::i;:::-;7548:3;7541:37;7531:53;;:::o;7590:109::-;7671:21;7686:5;7671:21;:::i;:::-;7666:3;7659:34;7649:50;;:::o;7705:360::-;;7819:38;7851:5;7819:38;:::i;:::-;7873:70;7936:6;7931:3;7873:70;:::i;:::-;7866:77;;7952:52;7997:6;7992:3;7985:4;7978:5;7974:16;7952:52;:::i;:::-;8029:29;8051:6;8029:29;:::i;:::-;8024:3;8020:39;8013:46;;7795:270;;;;;:::o;8071:364::-;;8187:39;8220:5;8187:39;:::i;:::-;8242:71;8306:6;8301:3;8242:71;:::i;:::-;8235:78;;8322:52;8367:6;8362:3;8355:4;8348:5;8344:16;8322:52;:::i;:::-;8399:29;8421:6;8399:29;:::i;:::-;8394:3;8390:39;8383:46;;8163:272;;;;;:::o;8441:377::-;;8575:39;8608:5;8575:39;:::i;:::-;8630:89;8712:6;8707:3;8630:89;:::i;:::-;8623:96;;8728:52;8773:6;8768:3;8761:4;8754:5;8750:16;8728:52;:::i;:::-;8805:6;8800:3;8796:16;8789:23;;8551:267;;;;;:::o;8824:375::-;;8987:67;9051:2;9046:3;8987:67;:::i;:::-;8980:74;;9084:34;9080:1;9075:3;9071:11;9064:55;9150:13;9145:2;9140:3;9136:12;9129:35;9190:2;9185:3;9181:12;9174:19;;8970:229;;;:::o;9205:382::-;;9368:67;9432:2;9427:3;9368:67;:::i;:::-;9361:74;;9465:34;9461:1;9456:3;9452:11;9445:55;9531:20;9526:2;9521:3;9517:12;9510:42;9578:2;9573:3;9569:12;9562:19;;9351:236;;;:::o;9593:370::-;;9756:67;9820:2;9815:3;9756:67;:::i;:::-;9749:74;;9853:34;9849:1;9844:3;9840:11;9833:55;9919:8;9914:2;9909:3;9905:12;9898:30;9954:2;9949:3;9945:12;9938:19;;9739:224;;;:::o;9969:326::-;;10132:67;10196:2;10191:3;10132:67;:::i;:::-;10125:74;;10229:30;10225:1;10220:3;10216:11;10209:51;10286:2;10281:3;10277:12;10270:19;;10115:180;;;:::o;10301:368::-;;10464:67;10528:2;10523:3;10464:67;:::i;:::-;10457:74;;10561:34;10557:1;10552:3;10548:11;10541:55;10627:6;10622:2;10617:3;10613:12;10606:28;10660:2;10655:3;10651:12;10644:19;;10447:222;;;:::o;10675:323::-;;10838:67;10902:2;10897:3;10838:67;:::i;:::-;10831:74;;10935:27;10931:1;10926:3;10922:11;10915:48;10989:2;10984:3;10980:12;10973:19;;10821:177;;;:::o;11004:322::-;;11167:67;11231:2;11226:3;11167:67;:::i;:::-;11160:74;;11264:26;11260:1;11255:3;11251:11;11244:47;11317:2;11312:3;11308:12;11301:19;;11150:176;;;:::o;11332:376::-;;11495:67;11559:2;11554:3;11495:67;:::i;:::-;11488:74;;11592:34;11588:1;11583:3;11579:11;11572:55;11658:14;11653:2;11648:3;11644:12;11637:36;11699:2;11694:3;11690:12;11683:19;;11478:230;;;:::o;11714:322::-;;11877:67;11941:2;11936:3;11877:67;:::i;:::-;11870:74;;11974:26;11970:1;11965:3;11961:11;11954:47;12027:2;12022:3;12018:12;12011:19;;11860:176;;;:::o;12042:367::-;;12205:67;12269:2;12264:3;12205:67;:::i;:::-;12198:74;;12302:34;12298:1;12293:3;12289:11;12282:55;12368:5;12363:2;12358:3;12354:12;12347:27;12400:2;12395:3;12391:12;12384:19;;12188:221;;;:::o;12415:317::-;;12578:67;12642:2;12637:3;12578:67;:::i;:::-;12571:74;;12675:21;12671:1;12666:3;12662:11;12655:42;12723:2;12718:3;12714:12;12707:19;;12561:171;;;:::o;12738:388::-;;12901:67;12965:2;12960:3;12901:67;:::i;:::-;12894:74;;12998:34;12994:1;12989:3;12985:11;12978:55;13064:26;13059:2;13054:3;13050:12;13043:48;13117:2;13112:3;13108:12;13101:19;;12884:242;;;:::o;13132:374::-;;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13392:34;13388:1;13383:3;13379:11;13372:55;13458:12;13453:2;13448:3;13444:12;13437:34;13497:2;13492:3;13488:12;13481:19;;13278:228;;;:::o;13512:373::-;;13675:67;13739:2;13734:3;13675:67;:::i;:::-;13668:74;;13772:34;13768:1;13763:3;13759:11;13752:55;13838:11;13833:2;13828:3;13824:12;13817:33;13876:2;13871:3;13867:12;13860:19;;13658:227;;;:::o;13891:317::-;;14054:67;14118:2;14113:3;14054:67;:::i;:::-;14047:74;;14151:21;14147:1;14142:3;14138:11;14131:42;14199:2;14194:3;14190:12;14183:19;;14037:171;;;:::o;14214:366::-;;14377:67;14441:2;14436:3;14377:67;:::i;:::-;14370:74;;14474:34;14470:1;14465:3;14461:11;14454:55;14540:4;14535:2;14530:3;14526:12;14519:26;14571:2;14566:3;14562:12;14555:19;;14360:220;;;:::o;14586:330::-;;14749:67;14813:2;14808:3;14749:67;:::i;:::-;14742:74;;14846:34;14842:1;14837:3;14833:11;14826:55;14907:2;14902:3;14898:12;14891:19;;14732:184;;;:::o;14922:376::-;;15085:67;15149:2;15144:3;15085:67;:::i;:::-;15078:74;;15182:34;15178:1;15173:3;15169:11;15162:55;15248:14;15243:2;15238:3;15234:12;15227:36;15289:2;15284:3;15280:12;15273:19;;15068:230;;;:::o;15304:330::-;;15467:67;15531:2;15526:3;15467:67;:::i;:::-;15460:74;;15564:34;15560:1;15555:3;15551:11;15544:55;15625:2;15620:3;15616:12;15609:19;;15450:184;;;:::o;15640:373::-;;15803:67;15867:2;15862:3;15803:67;:::i;:::-;15796:74;;15900:34;15896:1;15891:3;15887:11;15880:55;15966:11;15961:2;15956:3;15952:12;15945:33;16004:2;15999:3;15995:12;15988:19;;15786:227;;;:::o;16019:379::-;;16182:67;16246:2;16241:3;16182:67;:::i;:::-;16175:74;;16279:34;16275:1;16270:3;16266:11;16259:55;16345:17;16340:2;16335:3;16331:12;16324:39;16389:2;16384:3;16380:12;16373:19;;16165:233;;;:::o;16404:365::-;;16567:67;16631:2;16626:3;16567:67;:::i;:::-;16560:74;;16664:34;16660:1;16655:3;16651:11;16644:55;16730:3;16725:2;16720:3;16716:12;16709:25;16760:2;16755:3;16751:12;16744:19;;16550:219;;;:::o;16775:381::-;;16938:67;17002:2;16997:3;16938:67;:::i;:::-;16931:74;;17035:34;17031:1;17026:3;17022:11;17015:55;17101:19;17096:2;17091:3;17087:12;17080:41;17147:2;17142:3;17138:12;17131:19;;16921:235;;;:::o;17162:376::-;;17325:67;17389:2;17384:3;17325:67;:::i;:::-;17318:74;;17422:34;17418:1;17413:3;17409:11;17402:55;17488:14;17483:2;17478:3;17474:12;17467:36;17529:2;17524:3;17520:12;17513:19;;17308:230;;;:::o;17544:317::-;;17707:67;17771:2;17766:3;17707:67;:::i;:::-;17700:74;;17804:21;17800:1;17795:3;17791:11;17784:42;17852:2;17847:3;17843:12;17836:19;;17690:171;;;:::o;17867:118::-;17954:24;17972:5;17954:24;:::i;:::-;17949:3;17942:37;17932:53;;:::o;17991:435::-;;18193:95;18284:3;18275:6;18193:95;:::i;:::-;18186:102;;18305:95;18396:3;18387:6;18305:95;:::i;:::-;18298:102;;18417:3;18410:10;;18175:251;;;;;:::o;18432:222::-;;18563:2;18552:9;18548:18;18540:26;;18576:71;18644:1;18633:9;18629:17;18620:6;18576:71;:::i;:::-;18530:124;;;;:::o;18660:640::-;;18893:3;18882:9;18878:19;18870:27;;18907:71;18975:1;18964:9;18960:17;18951:6;18907:71;:::i;:::-;18988:72;19056:2;19045:9;19041:18;19032:6;18988:72;:::i;:::-;19070;19138:2;19127:9;19123:18;19114:6;19070:72;:::i;:::-;19189:9;19183:4;19179:20;19174:2;19163:9;19159:18;19152:48;19217:76;19288:4;19279:6;19217:76;:::i;:::-;19209:84;;18860:440;;;;;;;:::o;19306:210::-;;19431:2;19420:9;19416:18;19408:26;;19444:65;19506:1;19495:9;19491:17;19482:6;19444:65;:::i;:::-;19398:118;;;;:::o;19522:313::-;;19673:2;19662:9;19658:18;19650:26;;19722:9;19716:4;19712:20;19708:1;19697:9;19693:17;19686:47;19750:78;19823:4;19814:6;19750:78;:::i;:::-;19742:86;;19640:195;;;;:::o;19841:419::-;;20045:2;20034:9;20030:18;20022:26;;20094:9;20088:4;20084:20;20080:1;20069:9;20065:17;20058:47;20122:131;20248:4;20122:131;:::i;:::-;20114:139;;20012:248;;;:::o;20266:419::-;;20470:2;20459:9;20455:18;20447:26;;20519:9;20513:4;20509:20;20505:1;20494:9;20490:17;20483:47;20547:131;20673:4;20547:131;:::i;:::-;20539:139;;20437:248;;;:::o;20691:419::-;;20895:2;20884:9;20880:18;20872:26;;20944:9;20938:4;20934:20;20930:1;20919:9;20915:17;20908:47;20972:131;21098:4;20972:131;:::i;:::-;20964:139;;20862:248;;;:::o;21116:419::-;;21320:2;21309:9;21305:18;21297:26;;21369:9;21363:4;21359:20;21355:1;21344:9;21340:17;21333:47;21397:131;21523:4;21397:131;:::i;:::-;21389:139;;21287:248;;;:::o;21541:419::-;;21745:2;21734:9;21730:18;21722:26;;21794:9;21788:4;21784:20;21780:1;21769:9;21765:17;21758:47;21822:131;21948:4;21822:131;:::i;:::-;21814:139;;21712:248;;;:::o;21966:419::-;;22170:2;22159:9;22155:18;22147:26;;22219:9;22213:4;22209:20;22205:1;22194:9;22190:17;22183:47;22247:131;22373:4;22247:131;:::i;:::-;22239:139;;22137:248;;;:::o;22391:419::-;;22595:2;22584:9;22580:18;22572:26;;22644:9;22638:4;22634:20;22630:1;22619:9;22615:17;22608:47;22672:131;22798:4;22672:131;:::i;:::-;22664:139;;22562:248;;;:::o;22816:419::-;;23020:2;23009:9;23005:18;22997:26;;23069:9;23063:4;23059:20;23055:1;23044:9;23040:17;23033:47;23097:131;23223:4;23097:131;:::i;:::-;23089:139;;22987:248;;;:::o;23241:419::-;;23445:2;23434:9;23430:18;23422:26;;23494:9;23488:4;23484:20;23480:1;23469:9;23465:17;23458:47;23522:131;23648:4;23522:131;:::i;:::-;23514:139;;23412:248;;;:::o;23666:419::-;;23870:2;23859:9;23855:18;23847:26;;23919:9;23913:4;23909:20;23905:1;23894:9;23890:17;23883:47;23947:131;24073:4;23947:131;:::i;:::-;23939:139;;23837:248;;;:::o;24091:419::-;;24295:2;24284:9;24280:18;24272:26;;24344:9;24338:4;24334:20;24330:1;24319:9;24315:17;24308:47;24372:131;24498:4;24372:131;:::i;:::-;24364:139;;24262:248;;;:::o;24516:419::-;;24720:2;24709:9;24705:18;24697:26;;24769:9;24763:4;24759:20;24755:1;24744:9;24740:17;24733:47;24797:131;24923:4;24797:131;:::i;:::-;24789:139;;24687:248;;;:::o;24941:419::-;;25145:2;25134:9;25130:18;25122:26;;25194:9;25188:4;25184:20;25180:1;25169:9;25165:17;25158:47;25222:131;25348:4;25222:131;:::i;:::-;25214:139;;25112:248;;;:::o;25366:419::-;;25570:2;25559:9;25555:18;25547:26;;25619:9;25613:4;25609:20;25605:1;25594:9;25590:17;25583:47;25647:131;25773:4;25647:131;:::i;:::-;25639:139;;25537:248;;;:::o;25791:419::-;;25995:2;25984:9;25980:18;25972:26;;26044:9;26038:4;26034:20;26030:1;26019:9;26015:17;26008:47;26072:131;26198:4;26072:131;:::i;:::-;26064:139;;25962:248;;;:::o;26216:419::-;;26420:2;26409:9;26405:18;26397:26;;26469:9;26463:4;26459:20;26455:1;26444:9;26440:17;26433:47;26497:131;26623:4;26497:131;:::i;:::-;26489:139;;26387:248;;;:::o;26641:419::-;;26845:2;26834:9;26830:18;26822:26;;26894:9;26888:4;26884:20;26880:1;26869:9;26865:17;26858:47;26922:131;27048:4;26922:131;:::i;:::-;26914:139;;26812:248;;;:::o;27066:419::-;;27270:2;27259:9;27255:18;27247:26;;27319:9;27313:4;27309:20;27305:1;27294:9;27290:17;27283:47;27347:131;27473:4;27347:131;:::i;:::-;27339:139;;27237:248;;;:::o;27491:419::-;;27695:2;27684:9;27680:18;27672:26;;27744:9;27738:4;27734:20;27730:1;27719:9;27715:17;27708:47;27772:131;27898:4;27772:131;:::i;:::-;27764:139;;27662:248;;;:::o;27916:419::-;;28120:2;28109:9;28105:18;28097:26;;28169:9;28163:4;28159:20;28155:1;28144:9;28140:17;28133:47;28197:131;28323:4;28197:131;:::i;:::-;28189:139;;28087:248;;;:::o;28341:419::-;;28545:2;28534:9;28530:18;28522:26;;28594:9;28588:4;28584:20;28580:1;28569:9;28565:17;28558:47;28622:131;28748:4;28622:131;:::i;:::-;28614:139;;28512:248;;;:::o;28766:419::-;;28970:2;28959:9;28955:18;28947:26;;29019:9;29013:4;29009:20;29005:1;28994:9;28990:17;28983:47;29047:131;29173:4;29047:131;:::i;:::-;29039:139;;28937:248;;;:::o;29191:419::-;;29395:2;29384:9;29380:18;29372:26;;29444:9;29438:4;29434:20;29430:1;29419:9;29415:17;29408:47;29472:131;29598:4;29472:131;:::i;:::-;29464:139;;29362:248;;;:::o;29616:419::-;;29820:2;29809:9;29805:18;29797:26;;29869:9;29863:4;29859:20;29855:1;29844:9;29840:17;29833:47;29897:131;30023:4;29897:131;:::i;:::-;29889:139;;29787:248;;;:::o;30041:419::-;;30245:2;30234:9;30230:18;30222:26;;30294:9;30288:4;30284:20;30280:1;30269:9;30265:17;30258:47;30322:131;30448:4;30322:131;:::i;:::-;30314:139;;30212:248;;;:::o;30466:222::-;;30597:2;30586:9;30582:18;30574:26;;30610:71;30678:1;30667:9;30663:17;30654:6;30610:71;:::i;:::-;30564:124;;;;:::o;30694:283::-;;30760:2;30754:9;30744:19;;30802:4;30794:6;30790:17;30909:6;30897:10;30894:22;30873:18;30861:10;30858:34;30855:62;30852:2;;;30920:18;;:::i;:::-;30852:2;30960:10;30956:2;30949:22;30734:243;;;;:::o;30983:311::-;;31150:18;31142:6;31139:30;31136:2;;;31172:18;;:::i;:::-;31136:2;31222:4;31214:6;31210:17;31202:25;;31282:4;31276;31272:15;31264:23;;31065:229;;;:::o;31300:331::-;;31451:18;31443:6;31440:30;31437:2;;;31473:18;;:::i;:::-;31437:2;31558:4;31554:9;31547:4;31539:6;31535:17;31531:33;31523:41;;31619:4;31613;31609:15;31601:23;;31366:265;;;:::o;31637:332::-;;31789:18;31781:6;31778:30;31775:2;;;31811:18;;:::i;:::-;31775:2;31896:4;31892:9;31885:4;31877:6;31873:17;31869:33;31861:41;;31957:4;31951;31947:15;31939:23;;31704:265;;;:::o;31975:98::-;;32060:5;32054:12;32044:22;;32033:40;;;:::o;32079:99::-;;32165:5;32159:12;32149:22;;32138:40;;;:::o;32184:168::-;;32301:6;32296:3;32289:19;32341:4;32336:3;32332:14;32317:29;;32279:73;;;;:::o;32358:169::-;;32476:6;32471:3;32464:19;32516:4;32511:3;32507:14;32492:29;;32454:73;;;;:::o;32533:148::-;;32672:3;32657:18;;32647:34;;;;:::o;32687:305::-;;32746:20;32764:1;32746:20;:::i;:::-;32741:25;;32780:20;32798:1;32780:20;:::i;:::-;32775:25;;32934:1;32866:66;32862:74;32859:1;32856:81;32853:2;;;32940:18;;:::i;:::-;32853:2;32984:1;32981;32977:9;32970:16;;32731:261;;;;:::o;32998:185::-;;33055:20;33073:1;33055:20;:::i;:::-;33050:25;;33089:20;33107:1;33089:20;:::i;:::-;33084:25;;33128:1;33118:2;;33133:18;;:::i;:::-;33118:2;33175:1;33172;33168:9;33163:14;;33040:143;;;;:::o;33189:348::-;;33252:20;33270:1;33252:20;:::i;:::-;33247:25;;33286:20;33304:1;33286:20;:::i;:::-;33281:25;;33474:1;33406:66;33402:74;33399:1;33396:81;33391:1;33384:9;33377:17;33373:105;33370:2;;;33481:18;;:::i;:::-;33370:2;33529:1;33526;33522:9;33511:20;;33237:300;;;;:::o;33543:191::-;;33603:20;33621:1;33603:20;:::i;:::-;33598:25;;33637:20;33655:1;33637:20;:::i;:::-;33632:25;;33676:1;33673;33670:8;33667:2;;;33681:18;;:::i;:::-;33667:2;33726:1;33723;33719:9;33711:17;;33588:146;;;;:::o;33740:96::-;;33806:24;33824:5;33806:24;:::i;:::-;33795:35;;33785:51;;;:::o;33842:90::-;;33919:5;33912:13;33905:21;33894:32;;33884:48;;;:::o;33938:149::-;;34014:66;34007:5;34003:78;33992:89;;33982:105;;;:::o;34093:126::-;;34170:42;34163:5;34159:54;34148:65;;34138:81;;;:::o;34225:77::-;;34291:5;34280:16;;34270:32;;;:::o;34308:154::-;34392:6;34387:3;34382;34369:30;34454:1;34445:6;34440:3;34436:16;34429:27;34359:103;;;:::o;34468:307::-;34536:1;34546:113;34560:6;34557:1;34554:13;34546:113;;;34645:1;34640:3;34636:11;34630:18;34626:1;34621:3;34617:11;34610:39;34582:2;34579:1;34575:10;34570:15;;34546:113;;;34677:6;34674:1;34671:13;34668:2;;;34757:1;34748:6;34743:3;34739:16;34732:27;34668:2;34517:258;;;;:::o;34781:171::-;;34843:24;34861:5;34843:24;:::i;:::-;34834:33;;34889:4;34882:5;34879:15;34876:2;;;34897:18;;:::i;:::-;34876:2;34944:1;34937:5;34933:13;34926:20;;34824:128;;;:::o;34958:320::-;;35039:1;35033:4;35029:12;35019:22;;35086:1;35080:4;35076:12;35107:18;35097:2;;35163:4;35155:6;35151:17;35141:27;;35097:2;35225;35217:6;35214:14;35194:18;35191:38;35188:2;;;35244:18;;:::i;:::-;35188:2;35009:269;;;;:::o;35284:233::-;;35346:24;35364:5;35346:24;:::i;:::-;35337:33;;35392:66;35385:5;35382:77;35379:2;;;35462:18;;:::i;:::-;35379:2;35509:1;35502:5;35498:13;35491:20;;35327:190;;;:::o;35523:176::-;;35572:20;35590:1;35572:20;:::i;:::-;35567:25;;35606:20;35624:1;35606:20;:::i;:::-;35601:25;;35645:1;35635:2;;35650:18;;:::i;:::-;35635:2;35691:1;35688;35684:9;35679:14;;35557:142;;;;:::o;35705:180::-;35753:77;35750:1;35743:88;35850:4;35847:1;35840:15;35874:4;35871:1;35864:15;35891:180;35939:77;35936:1;35929:88;36036:4;36033:1;36026:15;36060:4;36057:1;36050:15;36077:180;36125:77;36122:1;36115:88;36222:4;36219:1;36212:15;36246:4;36243:1;36236:15;36263:180;36311:77;36308:1;36301:88;36408:4;36405:1;36398:15;36432:4;36429:1;36422:15;36449:102;;36541:2;36537:7;36532:2;36525:5;36521:14;36517:28;36507:38;;36497:54;;;:::o;36557:122::-;36630:24;36648:5;36630:24;:::i;:::-;36623:5;36620:35;36610:2;;36669:1;36666;36659:12;36610:2;36600:79;:::o;36685:116::-;36755:21;36770:5;36755:21;:::i;:::-;36748:5;36745:32;36735:2;;36791:1;36788;36781:12;36735:2;36725:76;:::o;36807:120::-;36879:23;36896:5;36879:23;:::i;:::-;36872:5;36869:34;36859:2;;36917:1;36914;36907:12;36859:2;36849:78;:::o;36933:122::-;37006:24;37024:5;37006:24;:::i;:::-;36999:5;36996:35;36986:2;;37045:1;37042;37035:12;36986:2;36976:79;:::o

Swarm Source

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