ETH Price: $3,909.46 (+1.30%)

Token

 

Overview

Max Total Supply

0

Holders

88

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x79ec97834c585e94e5102cfefd2d61e042e19952
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:
NonFungibleLibrary

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-29
*/

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: @openzeppelin/[email protected]/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/[email protected]/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/[email protected]/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/[email protected]/token/ERC1155/IERC1155Receiver.sol



pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
        @dev Handles the receipt of a single ERC1155 token type. This function is
        called at the end of a `safeTransferFrom` after the balance has been updated.
        To accept the transfer, this must return
        `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
        (i.e. 0xf23a6e61, or its own function selector).
        @param operator The address which initiated the transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param id The ID of the token being transferred
        @param value The amount of tokens being transferred
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
    */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
        @dev Handles the receipt of a multiple ERC1155 token types. This function
        is called at the end of a `safeBatchTransferFrom` after the balances have
        been updated. To accept the transfer(s), this must return
        `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
        (i.e. 0xbc197c81, or its own function selector).
        @param operator The address which initiated the batch transfer (i.e. msg.sender)
        @param from The address which previously owned the token
        @param ids An array containing ids of each token being transferred (order and length must match values array)
        @param values An array containing amounts of each token being transferred (order and length must match ids array)
        @param data Additional data with no specified format
        @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
    */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/[email protected]/token/ERC1155/IERC1155.sol



pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/[email protected]/token/ERC1155/extensions/IERC1155MetadataURI.sol



pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/[email protected]/token/ERC1155/ERC1155.sol



pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), account, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][account] += amount;
        emit TransferSingle(operator, address(0), account, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), account, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 accountBalance = _balances[id][account];
        require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][account] = accountBalance - amount;
        }

        emit TransferSingle(operator, account, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 accountBalance = _balances[id][account];
            require(accountBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][account] = accountBalance - amount;
            }
        }

        emit TransferBatch(operator, account, address(0), ids, amounts);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: contracts/NFL.sol

//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.10;





contract NonFungibleLibrary is ERC1155, Ownable {

    address payable ownerWallet; // coinbase wallet

    address actionsWallet; // metamask wallet
    
    mapping(uint256 => bool) private tokens; // all tokens set to false unless they have been minted

    uint private maxPagesPerTx = 25;

    uint private pagePrice = 10000000000000000;
    
    string private baseURI = "https://nonfungiblelibrary.org/assets/metadata/";

    bool private claimEnabled = true;

    string private passPhrase = "CUrVZHifShxdjavE";

    constructor(address payable ownerWallet_) // deploy costs 3632679 gas units
    ERC1155("") {
        actionsWallet = msg.sender; // actions wallet is the deployer wallet => metamask
        ownerWallet = ownerWallet_; // set owner wallet to coinbase wallet
        transferOwnership(ownerWallet); // make the coinbase wallet the new owner of the smart contract
    }

    function purchase(uint256[] calldata tokensIds) public payable {
        require(tokensIds.length <= maxPagesPerTx, "You have exceeded the maximum number of pages to mint on a single transaction");
        require(msg.value >= tokensIds.length * pagePrice, "Insufficient funds to purchase");

        uint256[] memory amounts = new uint256[](tokensIds.length);

        for(uint i=0 ; i<tokensIds.length ; i++) {
            require(tokens[tokensIds[i]] == false, "already minted tokens"); // check if all concerned tokens are not already minted
            amounts[i] = 1;
            tokens[tokensIds[i]] = true;
        }

        _mintBatch(ownerWallet, tokensIds, amounts, "");
        
        _safeBatchTransferFrom(ownerWallet, msg.sender, tokensIds, amounts, "");

        ownerWallet.transfer(msg.value);
    }
    
    function airdrop(address[] calldata receivers, uint256[][] calldata tokensIds, uint256[][] calldata amounts) public { // 28522303 gas units
        require(msg.sender == actionsWallet, "You are not allowed to execute airdrop"); // requires that this function is executed by the metamask wallet which deployed the contract
        for(uint i=0 ; i<receivers.length ; i++) {
            for(uint j=0 ; j<tokensIds[i].length ; j++) {
                tokens[tokensIds[i][j]] = true;
            }

            _mintBatch(ownerWallet, tokensIds[i], amounts[i], "");
            _safeBatchTransferFrom(ownerWallet, receivers[i], tokensIds[i], amounts[i], "");
        }
    }

    function claim(uint256[] calldata tokensIds, string calldata passPhrase_) external {
        require(claimEnabled == true, "Claiming is disabled");
        require(keccak256(abi.encodePacked((passPhrase))) == keccak256(abi.encodePacked((passPhrase_))), "You are not allowed to claim tokens");
        uint256[] memory amounts = new uint256[](tokensIds.length);
        for(uint i=0 ; i<tokensIds.length ; i++) {
            require(tokens[tokensIds[i]] == false, "already minted tokens");
            amounts[i] = 1;
            tokens[tokensIds[i]] = true;
        }

        _mintBatch(ownerWallet, tokensIds, amounts, "");
        _safeBatchTransferFrom(ownerWallet, msg.sender, tokensIds, amounts, "");
    }

    function uri(uint256 _tokenId) public view virtual override returns (string memory) {
        return string(
            abi.encodePacked(
                baseURI,
                Strings.toString(_tokenId),
                ".json"
            )
        );
    }
    
    function setBaseURI(string memory baseURI_) external onlyOwner { // 41059 gas units
        baseURI = baseURI_;
    }

    function setMaxPagesPerTx(uint maxPagesPerTx_) external onlyOwner { // 28909 gas units
        maxPagesPerTx = maxPagesPerTx_;
    }

    function setPagePrice(uint pagePrice_) external onlyOwner { // 28935 gas units
        pagePrice = pagePrice_;
    }

    function setClaim(bool claimStatus) external { // 28931 gas units
        require(msg.sender == actionsWallet, "You are not allowed to change claim status");
        claimEnabled = claimStatus;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"ownerWallet_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"},{"internalType":"uint256[][]","name":"tokensIds","type":"uint256[][]"},{"internalType":"uint256[][]","name":"amounts","type":"uint256[][]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensIds","type":"uint256[]"},{"internalType":"string","name":"passPhrase_","type":"string"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokensIds","type":"uint256[]"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"claimStatus","type":"bool"}],"name":"setClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPagesPerTx_","type":"uint256"}],"name":"setMaxPagesPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pagePrice_","type":"uint256"}],"name":"setPagePrice","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526019600755662386f26fc100006008556040518060600160405280602f815260200162004e38602f913960099080519060200190620000459291906200040a565b506001600a60006101000a81548160ff0219169083151502179055506040518060400160405280601081526020017f435572565a486966536878646a61764500000000000000000000000000000000815250600b9080519060200190620000ae9291906200040a565b50348015620000bc57600080fd5b5060405162004e6738038062004e678339818101604052810190620000e2919062000524565b604051806020016040528060008152506200010381620001e060201b60201c565b506200012462000118620001fc60201b60201c565b6200020460201b60201c565b33600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001d9600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620002ca60201b60201c565b50620006d6565b8060029080519060200190620001f89291906200040a565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002da620001fc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000300620003e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000359576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200035090620005b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003cc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003c3906200064f565b60405180910390fd5b620003dd816200020460201b60201c565b50565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200041890620006a0565b90600052602060002090601f0160209004810192826200043c576000855562000488565b82601f106200045757805160ff191683800117855562000488565b8280016001018555821562000488579182015b82811115620004875782518255916020019190600101906200046a565b5b5090506200049791906200049b565b5090565b5b80821115620004b65760008160009055506001016200049c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004ec82620004bf565b9050919050565b620004fe81620004df565b81146200050a57600080fd5b50565b6000815190506200051e81620004f3565b92915050565b6000602082840312156200053d576200053c620004ba565b5b60006200054d848285016200050d565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200059f60208362000556565b9150620005ac8262000567565b602082019050919050565b60006020820190508181036000830152620005d28162000590565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006200063760268362000556565b91506200064482620005d9565b604082019050919050565b600060208201905081810360008301526200066a8162000628565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006b957607f821691505b60208210811415620006d057620006cf62000671565b5b50919050565b61475280620006e66000396000f3fe6080604052600436106101085760003560e01c80637ee9153d11610095578063a0259d7f11610064578063a0259d7f14610355578063a22cb4651461037e578063e985e9c5146103a7578063f242432a146103e4578063f2fde38b1461040d57610108565b80637ee9153d146102bc57806386769186146102e55780638da5cb5b1461030157806396377e291461032c57610108565b80632eb2c2d6116100dc5780632eb2c2d6146101ed5780634e1273f41461021657806355f804b314610253578063715018a61461027c5780637841b7f31461029357610108565b8062fdd58e1461010d57806301ffc9a71461014a5780630e89341c14610187578063211418ab146101c4575b600080fd5b34801561011957600080fd5b50610134600480360381019061012f9190612895565b610436565b60405161014191906128e4565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190612957565b6104ff565b60405161017e919061299f565b60405180910390f35b34801561019357600080fd5b506101ae60048036038101906101a991906129ba565b6105e1565b6040516101bb9190612a80565b60405180910390f35b3480156101d057600080fd5b506101eb60048036038101906101e69190612ace565b610615565b005b3480156101f957600080fd5b50610214600480360381019061020f9190612cf8565b6106c2565b005b34801561022257600080fd5b5061023d60048036038101906102389190612e8a565b610763565b60405161024a9190612fc0565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190613083565b61087c565b005b34801561028857600080fd5b50610291610912565b005b34801561029f57600080fd5b506102ba60048036038101906102b591906129ba565b61099a565b005b3480156102c857600080fd5b506102e360048036038101906102de91906129ba565b610a20565b005b6102ff60048036038101906102fa9190613127565b610aa6565b005b34801561030d57600080fd5b50610316610e04565b6040516103239190613183565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e919061324a565b610e2e565b005b34801561036157600080fd5b5061037c60048036038101906103779190613354565b6111c7565b005b34801561038a57600080fd5b506103a560048036038101906103a091906133d5565b61150a565b005b3480156103b357600080fd5b506103ce60048036038101906103c99190613415565b61168b565b6040516103db919061299f565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613455565b61171f565b005b34801561041957600080fd5b50610434600480360381019061042f91906134ec565b6117c0565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049e9061358b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105da57506105d9826118b8565b5b9050919050565b606060096105ee83611922565b6040516020016105ff929190613728565b6040516020818303038152906040529050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c906137c9565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b6106ca611a83565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610710575061070f8561070a611a83565b61168b565b5b61074f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107469061385b565b60405180910390fd5b61075c8585858585611a8b565b5050505050565b606081518351146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a0906138ed565b60405180910390fd5b6000835167ffffffffffffffff8111156107c6576107c5612b00565b5b6040519080825280602002602001820160405280156107f45781602001602082028036833780820191505090505b50905060005b8451811015610871576108418582815181106108195761081861390d565b5b60200260200101518583815181106108345761083361390d565b5b6020026020010151610436565b8282815181106108545761085361390d565b5b6020026020010181815250508061086a9061396b565b90506107fa565b508091505092915050565b610884611a83565b73ffffffffffffffffffffffffffffffffffffffff166108a2610e04565b73ffffffffffffffffffffffffffffffffffffffff16146108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef90613a00565b60405180910390fd5b806009908051906020019061090e92919061274a565b5050565b61091a611a83565b73ffffffffffffffffffffffffffffffffffffffff16610938610e04565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613a00565b60405180910390fd5b6109986000611d9f565b565b6109a2611a83565b73ffffffffffffffffffffffffffffffffffffffff166109c0610e04565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90613a00565b60405180910390fd5b8060088190555050565b610a28611a83565b73ffffffffffffffffffffffffffffffffffffffff16610a46610e04565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613a00565b60405180910390fd5b8060078190555050565b600754828290501115610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613ab8565b60405180910390fd5b60085482829050610aff9190613ad8565b341015610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890613b7e565b60405180910390fd5b60008282905067ffffffffffffffff811115610b6057610b5f612b00565b5b604051908082528060200260200182016040528015610b8e5781602001602082028036833780820191505090505b50905060005b83839050811015610c98576000151560066000868685818110610bba57610bb961390d565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16151514610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613bea565b60405180910390fd5b6001828281518110610c3457610c3361390d565b5b602002602001018181525050600160066000868685818110610c5957610c5861390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c909061396b565b915050610b94565b50610d17600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508360405180602001604052806000815250611e65565b610d96600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508460405180602001604052806000815250611a8b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610dfe573d6000803e3d6000fd5b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613c7c565b60405180910390fd5b60005b868690508110156111be5760005b858583818110610ee257610ee161390d565b5b9050602002810190610ef49190613cab565b9050811015610f7857600160066000888886818110610f1657610f1561390d565b5b9050602002810190610f289190613cab565b85818110610f3957610f3861390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f709061396b565b915050610ecf565b5061107e600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868684818110610fb257610fb161390d565b5b9050602002810190610fc49190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508585858181106110175761101661390d565b5b90506020028101906110299190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250611e65565b6111ab600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888848181106110b7576110b661390d565b5b90506020020160208101906110cc91906134ec565b8787858181106110df576110de61390d565b5b90506020028101906110f19190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508686868181106111445761114361390d565b5b90506020028101906111569190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250611a8b565b80806111b69061396b565b915050610ec1565b50505050505050565b60011515600a60009054906101000a900460ff1615151461121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613d5a565b60405180910390fd5b8181604051602001611230929190613d9f565b60405160208183030381529060405280519060200120600b6040516020016112589190613db8565b60405160208183030381529060405280519060200120146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590613e41565b60405180910390fd5b60008484905067ffffffffffffffff8111156112cd576112cc612b00565b5b6040519080825280602002602001820160405280156112fb5781602001602082028036833780820191505090505b50905060005b858590508110156114055760001515600660008888858181106113275761132661390d565b5b90506020020135815260200190815260200160002060009054906101000a900460ff1615151461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613bea565b60405180910390fd5b60018282815181106113a1576113a061390d565b5b6020026020010181815250506001600660008888858181106113c6576113c561390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113fd9061396b565b915050611301565b50611484600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508360405180602001604052806000815250611e65565b611503600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508460405180602001604052806000815250611a8b565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff16611529611a83565b73ffffffffffffffffffffffffffffffffffffffff161415611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613ed3565b60405180910390fd5b806001600061158d611a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661163a611a83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167f919061299f565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611727611a83565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061176d575061176c85611767611a83565b61168b565b5b6117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390613f65565b60405180910390fd5b6117b98585858585612083565b5050505050565b6117c8611a83565b73ffffffffffffffffffffffffffffffffffffffff166117e6610e04565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613a00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613ff7565b60405180910390fd5b6118b581611d9f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600082141561196a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a7e565b600082905060005b6000821461199c5780806119859061396b565b915050600a826119959190614046565b9150611972565b60008167ffffffffffffffff8111156119b8576119b7612b00565b5b6040519080825280601f01601f1916602001820160405280156119ea5781602001600182028036833780820191505090505b5090505b60008514611a7757600182611a039190614077565b9150600a85611a1291906140ab565b6030611a1e91906140dc565b60f81b818381518110611a3457611a3361390d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a709190614046565b94506119ee565b8093505050505b919050565b600033905090565b8151835114611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906141a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614236565b60405180910390fd5b6000611b49611a83565b9050611b59818787878787612305565b60005b8451811015611d0a576000858281518110611b7a57611b7961390d565b5b602002602001015190506000858381518110611b9957611b9861390d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c31906142c8565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cef91906140dc565b9250508190555050505080611d039061396b565b9050611b5c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d819291906142e8565b60405180910390a4611d9781878787878761230d565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614391565b60405180910390fd5b8151835114611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906141a4565b60405180910390fd5b6000611f23611a83565b9050611f3481600087878787612305565b60005b8451811015611fed57838181518110611f5357611f5261390d565b5b6020026020010151600080878481518110611f7157611f7061390d565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd391906140dc565b925050819055508080611fe59061396b565b915050611f37565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120659291906142e8565b60405180910390a461207c8160008787878761230d565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90614236565b60405180910390fd5b60006120fd611a83565b905061211d81878761210e886124e5565b612117886124e5565b87612305565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906142c8565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461226991906140dc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122e69291906143b1565b60405180910390a46122fc82888888888861255f565b50505050505050565b505050505050565b61232c8473ffffffffffffffffffffffffffffffffffffffff16612737565b156124dd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161237295949392919061442f565b6020604051808303816000875af19250505080156123ae57506040513d601f19601f820116820180604052508101906123ab91906144ac565b60015b612454576123ba6144e6565b806308c379a0141561241757506123cf614508565b806123da5750612419565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e9190612a80565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614610565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906146a2565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561250457612503612b00565b5b6040519080825280602002602001820160405280156125325781602001602082028036833780820191505090505b509050828160008151811061254a5761254961390d565b5b60200260200101818152505080915050919050565b61257e8473ffffffffffffffffffffffffffffffffffffffff16612737565b1561272f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125c49594939291906146c2565b6020604051808303816000875af192505050801561260057506040513d601f19601f820116820180604052508101906125fd91906144ac565b60015b6126a65761260c6144e6565b806308c379a014156126695750612621614508565b8061262c575061266b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126609190612a80565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614610565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461272d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612724906146a2565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612756906135da565b90600052602060002090601f01602090048101928261277857600085556127bf565b82601f1061279157805160ff19168380011785556127bf565b828001600101855582156127bf579182015b828111156127be5782518255916020019190600101906127a3565b5b5090506127cc91906127d0565b5090565b5b808211156127e95760008160009055506001016127d1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061282c82612801565b9050919050565b61283c81612821565b811461284757600080fd5b50565b60008135905061285981612833565b92915050565b6000819050919050565b6128728161285f565b811461287d57600080fd5b50565b60008135905061288f81612869565b92915050565b600080604083850312156128ac576128ab6127f7565b5b60006128ba8582860161284a565b92505060206128cb85828601612880565b9150509250929050565b6128de8161285f565b82525050565b60006020820190506128f960008301846128d5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612934816128ff565b811461293f57600080fd5b50565b6000813590506129518161292b565b92915050565b60006020828403121561296d5761296c6127f7565b5b600061297b84828501612942565b91505092915050565b60008115159050919050565b61299981612984565b82525050565b60006020820190506129b46000830184612990565b92915050565b6000602082840312156129d0576129cf6127f7565b5b60006129de84828501612880565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a21578082015181840152602081019050612a06565b83811115612a30576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a52826129e7565b612a5c81856129f2565b9350612a6c818560208601612a03565b612a7581612a36565b840191505092915050565b60006020820190508181036000830152612a9a8184612a47565b905092915050565b612aab81612984565b8114612ab657600080fd5b50565b600081359050612ac881612aa2565b92915050565b600060208284031215612ae457612ae36127f7565b5b6000612af284828501612ab9565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b3882612a36565b810181811067ffffffffffffffff82111715612b5757612b56612b00565b5b80604052505050565b6000612b6a6127ed565b9050612b768282612b2f565b919050565b600067ffffffffffffffff821115612b9657612b95612b00565b5b602082029050602081019050919050565b600080fd5b6000612bbf612bba84612b7b565b612b60565b90508083825260208201905060208402830185811115612be257612be1612ba7565b5b835b81811015612c0b5780612bf78882612880565b845260208401935050602081019050612be4565b5050509392505050565b600082601f830112612c2a57612c29612afb565b5b8135612c3a848260208601612bac565b91505092915050565b600080fd5b600067ffffffffffffffff821115612c6357612c62612b00565b5b612c6c82612a36565b9050602081019050919050565b82818337600083830152505050565b6000612c9b612c9684612c48565b612b60565b905082815260208101848484011115612cb757612cb6612c43565b5b612cc2848285612c79565b509392505050565b600082601f830112612cdf57612cde612afb565b5b8135612cef848260208601612c88565b91505092915050565b600080600080600060a08688031215612d1457612d136127f7565b5b6000612d228882890161284a565b9550506020612d338882890161284a565b945050604086013567ffffffffffffffff811115612d5457612d536127fc565b5b612d6088828901612c15565b935050606086013567ffffffffffffffff811115612d8157612d806127fc565b5b612d8d88828901612c15565b925050608086013567ffffffffffffffff811115612dae57612dad6127fc565b5b612dba88828901612cca565b9150509295509295909350565b600067ffffffffffffffff821115612de257612de1612b00565b5b602082029050602081019050919050565b6000612e06612e0184612dc7565b612b60565b90508083825260208201905060208402830185811115612e2957612e28612ba7565b5b835b81811015612e525780612e3e888261284a565b845260208401935050602081019050612e2b565b5050509392505050565b600082601f830112612e7157612e70612afb565b5b8135612e81848260208601612df3565b91505092915050565b60008060408385031215612ea157612ea06127f7565b5b600083013567ffffffffffffffff811115612ebf57612ebe6127fc565b5b612ecb85828601612e5c565b925050602083013567ffffffffffffffff811115612eec57612eeb6127fc565b5b612ef885828601612c15565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f378161285f565b82525050565b6000612f498383612f2e565b60208301905092915050565b6000602082019050919050565b6000612f6d82612f02565b612f778185612f0d565b9350612f8283612f1e565b8060005b83811015612fb3578151612f9a8882612f3d565b9750612fa583612f55565b925050600181019050612f86565b5085935050505092915050565b60006020820190508181036000830152612fda8184612f62565b905092915050565b600067ffffffffffffffff821115612ffd57612ffc612b00565b5b61300682612a36565b9050602081019050919050565b600061302661302184612fe2565b612b60565b90508281526020810184848401111561304257613041612c43565b5b61304d848285612c79565b509392505050565b600082601f83011261306a57613069612afb565b5b813561307a848260208601613013565b91505092915050565b600060208284031215613099576130986127f7565b5b600082013567ffffffffffffffff8111156130b7576130b66127fc565b5b6130c384828501613055565b91505092915050565b600080fd5b60008083601f8401126130e7576130e6612afb565b5b8235905067ffffffffffffffff811115613104576131036130cc565b5b6020830191508360208202830111156131205761311f612ba7565b5b9250929050565b6000806020838503121561313e5761313d6127f7565b5b600083013567ffffffffffffffff81111561315c5761315b6127fc565b5b613168858286016130d1565b92509250509250929050565b61317d81612821565b82525050565b60006020820190506131986000830184613174565b92915050565b60008083601f8401126131b4576131b3612afb565b5b8235905067ffffffffffffffff8111156131d1576131d06130cc565b5b6020830191508360208202830111156131ed576131ec612ba7565b5b9250929050565b60008083601f84011261320a57613209612afb565b5b8235905067ffffffffffffffff811115613227576132266130cc565b5b60208301915083602082028301111561324357613242612ba7565b5b9250929050565b60008060008060008060608789031215613267576132666127f7565b5b600087013567ffffffffffffffff811115613285576132846127fc565b5b61329189828a0161319e565b9650965050602087013567ffffffffffffffff8111156132b4576132b36127fc565b5b6132c089828a016131f4565b9450945050604087013567ffffffffffffffff8111156132e3576132e26127fc565b5b6132ef89828a016131f4565b92509250509295509295509295565b60008083601f84011261331457613313612afb565b5b8235905067ffffffffffffffff811115613331576133306130cc565b5b60208301915083600182028301111561334d5761334c612ba7565b5b9250929050565b6000806000806040858703121561336e5761336d6127f7565b5b600085013567ffffffffffffffff81111561338c5761338b6127fc565b5b613398878288016130d1565b9450945050602085013567ffffffffffffffff8111156133bb576133ba6127fc565b5b6133c7878288016132fe565b925092505092959194509250565b600080604083850312156133ec576133eb6127f7565b5b60006133fa8582860161284a565b925050602061340b85828601612ab9565b9150509250929050565b6000806040838503121561342c5761342b6127f7565b5b600061343a8582860161284a565b925050602061344b8582860161284a565b9150509250929050565b600080600080600060a08688031215613471576134706127f7565b5b600061347f8882890161284a565b95505060206134908882890161284a565b94505060406134a188828901612880565b93505060606134b288828901612880565b925050608086013567ffffffffffffffff8111156134d3576134d26127fc565b5b6134df88828901612cca565b9150509295509295909350565b600060208284031215613502576135016127f7565b5b60006135108482850161284a565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613575602b836129f2565b915061358082613519565b604082019050919050565b600060208201905081810360008301526135a481613568565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135f257607f821691505b60208210811415613606576136056135ab565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613639816135da565b613643818661360c565b9450600182166000811461365e576001811461366f576136a2565b60ff198316865281860193506136a2565b61367885613617565b60005b8381101561369a5781548189015260018201915060208101905061367b565b838801955050505b50505092915050565b60006136b6826129e7565b6136c0818561360c565b93506136d0818560208601612a03565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061371260058361360c565b915061371d826136dc565b600582019050919050565b6000613734828561362c565b915061374082846136ab565b915061374b82613705565b91508190509392505050565b7f596f7520617265206e6f7420616c6c6f77656420746f206368616e676520636c60008201527f61696d2073746174757300000000000000000000000000000000000000000000602082015250565b60006137b3602a836129f2565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006138456032836129f2565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006138d76029836129f2565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139768261285f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139a9576139a861393c565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ea6020836129f2565b91506139f5826139b4565b602082019050919050565b60006020820190508181036000830152613a19816139dd565b9050919050565b7f596f75206861766520657863656564656420746865206d6178696d756d206e7560008201527f6d626572206f6620706167657320746f206d696e74206f6e20612073696e676c60208201527f65207472616e73616374696f6e00000000000000000000000000000000000000604082015250565b6000613aa2604d836129f2565b9150613aad82613a20565b606082019050919050565b60006020820190508181036000830152613ad181613a95565b9050919050565b6000613ae38261285f565b9150613aee8361285f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2757613b2661393c565b5b828202905092915050565b7f496e73756666696369656e742066756e647320746f2070757263686173650000600082015250565b6000613b68601e836129f2565b9150613b7382613b32565b602082019050919050565b60006020820190508181036000830152613b9781613b5b565b9050919050565b7f616c7265616479206d696e74656420746f6b656e730000000000000000000000600082015250565b6000613bd46015836129f2565b9150613bdf82613b9e565b602082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2065786563757465206160008201527f697264726f700000000000000000000000000000000000000000000000000000602082015250565b6000613c666026836129f2565b9150613c7182613c0a565b604082019050919050565b60006020820190508181036000830152613c9581613c59565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112613cc857613cc7613c9c565b5b80840192508235915067ffffffffffffffff821115613cea57613ce9613ca1565b5b602083019250602082023603831315613d0657613d05613ca6565b5b509250929050565b7f436c61696d696e672069732064697361626c6564000000000000000000000000600082015250565b6000613d446014836129f2565b9150613d4f82613d0e565b602082019050919050565b60006020820190508181036000830152613d7381613d37565b9050919050565b6000613d86838561360c565b9350613d93838584612c79565b82840190509392505050565b6000613dac828486613d7a565b91508190509392505050565b6000613dc4828461362c565b915081905092915050565b7f596f7520617265206e6f7420616c6c6f77656420746f20636c61696d20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2b6023836129f2565b9150613e3682613dcf565b604082019050919050565b60006020820190508181036000830152613e5a81613e1e565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613ebd6029836129f2565b9150613ec882613e61565b604082019050919050565b60006020820190508181036000830152613eec81613eb0565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613f4f6029836129f2565b9150613f5a82613ef3565b604082019050919050565b60006020820190508181036000830152613f7e81613f42565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fe16026836129f2565b9150613fec82613f85565b604082019050919050565b6000602082019050818103600083015261401081613fd4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140518261285f565b915061405c8361285f565b92508261406c5761406b614017565b5b828204905092915050565b60006140828261285f565b915061408d8361285f565b9250828210156140a05761409f61393c565b5b828203905092915050565b60006140b68261285f565b91506140c18361285f565b9250826140d1576140d0614017565b5b828206905092915050565b60006140e78261285f565b91506140f28361285f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141275761412661393c565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061418e6028836129f2565b915061419982614132565b604082019050919050565b600060208201905081810360008301526141bd81614181565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142206025836129f2565b915061422b826141c4565b604082019050919050565b6000602082019050818103600083015261424f81614213565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006142b2602a836129f2565b91506142bd82614256565b604082019050919050565b600060208201905081810360008301526142e1816142a5565b9050919050565b600060408201905081810360008301526143028185612f62565b905081810360208301526143168184612f62565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061437b6021836129f2565b91506143868261431f565b604082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b60006040820190506143c660008301856128d5565b6143d360208301846128d5565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614401826143da565b61440b81856143e5565b935061441b818560208601612a03565b61442481612a36565b840191505092915050565b600060a0820190506144446000830188613174565b6144516020830187613174565b81810360408301526144638186612f62565b905081810360608301526144778185612f62565b9050818103608083015261448b81846143f6565b90509695505050505050565b6000815190506144a68161292b565b92915050565b6000602082840312156144c2576144c16127f7565b5b60006144d084828501614497565b91505092915050565b60008160e01c9050919050565b600060033d11156145055760046000803e6145026000516144d9565b90505b90565b600060443d10156145185761459b565b6145206127ed565b60043d036004823e80513d602482011167ffffffffffffffff8211171561454857505061459b565b808201805167ffffffffffffffff811115614566575050505061459b565b80602083010160043d03850181111561458357505050505061459b565b61459282602001850186612b2f565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145fa6034836129f2565b91506146058261459e565b604082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061468c6028836129f2565b915061469782614630565b604082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b600060a0820190506146d76000830188613174565b6146e46020830187613174565b6146f160408301866128d5565b6146fe60608301856128d5565b818103608083015261471081846143f6565b9050969550505050505056fea264697066735822122061077e14da3ae0609c68f66474e362f7df435cd856d95eaffa0c47b60ac5511c64736f6c634300080a003368747470733a2f2f6e6f6e66756e6769626c656c6962726172792e6f72672f6173736574732f6d657461646174612f00000000000000000000000078b2061a080342ead68bed2cfc56f8db5c82320a

Deployed Bytecode

0x6080604052600436106101085760003560e01c80637ee9153d11610095578063a0259d7f11610064578063a0259d7f14610355578063a22cb4651461037e578063e985e9c5146103a7578063f242432a146103e4578063f2fde38b1461040d57610108565b80637ee9153d146102bc57806386769186146102e55780638da5cb5b1461030157806396377e291461032c57610108565b80632eb2c2d6116100dc5780632eb2c2d6146101ed5780634e1273f41461021657806355f804b314610253578063715018a61461027c5780637841b7f31461029357610108565b8062fdd58e1461010d57806301ffc9a71461014a5780630e89341c14610187578063211418ab146101c4575b600080fd5b34801561011957600080fd5b50610134600480360381019061012f9190612895565b610436565b60405161014191906128e4565b60405180910390f35b34801561015657600080fd5b50610171600480360381019061016c9190612957565b6104ff565b60405161017e919061299f565b60405180910390f35b34801561019357600080fd5b506101ae60048036038101906101a991906129ba565b6105e1565b6040516101bb9190612a80565b60405180910390f35b3480156101d057600080fd5b506101eb60048036038101906101e69190612ace565b610615565b005b3480156101f957600080fd5b50610214600480360381019061020f9190612cf8565b6106c2565b005b34801561022257600080fd5b5061023d60048036038101906102389190612e8a565b610763565b60405161024a9190612fc0565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190613083565b61087c565b005b34801561028857600080fd5b50610291610912565b005b34801561029f57600080fd5b506102ba60048036038101906102b591906129ba565b61099a565b005b3480156102c857600080fd5b506102e360048036038101906102de91906129ba565b610a20565b005b6102ff60048036038101906102fa9190613127565b610aa6565b005b34801561030d57600080fd5b50610316610e04565b6040516103239190613183565b60405180910390f35b34801561033857600080fd5b50610353600480360381019061034e919061324a565b610e2e565b005b34801561036157600080fd5b5061037c60048036038101906103779190613354565b6111c7565b005b34801561038a57600080fd5b506103a560048036038101906103a091906133d5565b61150a565b005b3480156103b357600080fd5b506103ce60048036038101906103c99190613415565b61168b565b6040516103db919061299f565b60405180910390f35b3480156103f057600080fd5b5061040b60048036038101906104069190613455565b61171f565b005b34801561041957600080fd5b50610434600480360381019061042f91906134ec565b6117c0565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049e9061358b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806105ca57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806105da57506105d9826118b8565b5b9050919050565b606060096105ee83611922565b6040516020016105ff929190613728565b6040516020818303038152906040529050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069c906137c9565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b6106ca611a83565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610710575061070f8561070a611a83565b61168b565b5b61074f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107469061385b565b60405180910390fd5b61075c8585858585611a8b565b5050505050565b606081518351146107a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a0906138ed565b60405180910390fd5b6000835167ffffffffffffffff8111156107c6576107c5612b00565b5b6040519080825280602002602001820160405280156107f45781602001602082028036833780820191505090505b50905060005b8451811015610871576108418582815181106108195761081861390d565b5b60200260200101518583815181106108345761083361390d565b5b6020026020010151610436565b8282815181106108545761085361390d565b5b6020026020010181815250508061086a9061396b565b90506107fa565b508091505092915050565b610884611a83565b73ffffffffffffffffffffffffffffffffffffffff166108a2610e04565b73ffffffffffffffffffffffffffffffffffffffff16146108f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ef90613a00565b60405180910390fd5b806009908051906020019061090e92919061274a565b5050565b61091a611a83565b73ffffffffffffffffffffffffffffffffffffffff16610938610e04565b73ffffffffffffffffffffffffffffffffffffffff161461098e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098590613a00565b60405180910390fd5b6109986000611d9f565b565b6109a2611a83565b73ffffffffffffffffffffffffffffffffffffffff166109c0610e04565b73ffffffffffffffffffffffffffffffffffffffff1614610a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0d90613a00565b60405180910390fd5b8060088190555050565b610a28611a83565b73ffffffffffffffffffffffffffffffffffffffff16610a46610e04565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9390613a00565b60405180910390fd5b8060078190555050565b600754828290501115610aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae590613ab8565b60405180910390fd5b60085482829050610aff9190613ad8565b341015610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890613b7e565b60405180910390fd5b60008282905067ffffffffffffffff811115610b6057610b5f612b00565b5b604051908082528060200260200182016040528015610b8e5781602001602082028036833780820191505090505b50905060005b83839050811015610c98576000151560066000868685818110610bba57610bb961390d565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16151514610c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1690613bea565b60405180910390fd5b6001828281518110610c3457610c3361390d565b5b602002602001018181525050600160066000868685818110610c5957610c5861390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610c909061396b565b915050610b94565b50610d17600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508360405180602001604052806000815250611e65565b610d96600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508460405180602001604052806000815250611a8b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015610dfe573d6000803e3d6000fd5b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590613c7c565b60405180910390fd5b60005b868690508110156111be5760005b858583818110610ee257610ee161390d565b5b9050602002810190610ef49190613cab565b9050811015610f7857600160066000888886818110610f1657610f1561390d565b5b9050602002810190610f289190613cab565b85818110610f3957610f3861390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610f709061396b565b915050610ecf565b5061107e600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868684818110610fb257610fb161390d565b5b9050602002810190610fc49190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508585858181106110175761101661390d565b5b90506020028101906110299190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250611e65565b6111ab600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888848181106110b7576110b661390d565b5b90506020020160208101906110cc91906134ec565b8787858181106110df576110de61390d565b5b90506020028101906110f19190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508686868181106111445761114361390d565b5b90506020028101906111569190613cab565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505060405180602001604052806000815250611a8b565b80806111b69061396b565b915050610ec1565b50505050505050565b60011515600a60009054906101000a900460ff1615151461121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490613d5a565b60405180910390fd5b8181604051602001611230929190613d9f565b60405160208183030381529060405280519060200120600b6040516020016112589190613db8565b60405160208183030381529060405280519060200120146112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a590613e41565b60405180910390fd5b60008484905067ffffffffffffffff8111156112cd576112cc612b00565b5b6040519080825280602002602001820160405280156112fb5781602001602082028036833780820191505090505b50905060005b858590508110156114055760001515600660008888858181106113275761132661390d565b5b90506020020135815260200190815260200160002060009054906101000a900460ff1615151461138c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138390613bea565b60405180910390fd5b60018282815181106113a1576113a061390d565b5b6020026020010181815250506001600660008888858181106113c6576113c561390d565b5b90506020020135815260200190815260200160002060006101000a81548160ff02191690831515021790555080806113fd9061396b565b915050611301565b50611484600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508360405180602001604052806000815250611e65565b611503600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633878780806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508460405180602001604052806000815250611a8b565b5050505050565b8173ffffffffffffffffffffffffffffffffffffffff16611529611a83565b73ffffffffffffffffffffffffffffffffffffffff161415611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790613ed3565b60405180910390fd5b806001600061158d611a83565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661163a611a83565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161167f919061299f565b60405180910390a35050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611727611a83565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061176d575061176c85611767611a83565b61168b565b5b6117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a390613f65565b60405180910390fd5b6117b98585858585612083565b5050505050565b6117c8611a83565b73ffffffffffffffffffffffffffffffffffffffff166117e6610e04565b73ffffffffffffffffffffffffffffffffffffffff161461183c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183390613a00565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390613ff7565b60405180910390fd5b6118b581611d9f565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6060600082141561196a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611a7e565b600082905060005b6000821461199c5780806119859061396b565b915050600a826119959190614046565b9150611972565b60008167ffffffffffffffff8111156119b8576119b7612b00565b5b6040519080825280601f01601f1916602001820160405280156119ea5781602001600182028036833780820191505090505b5090505b60008514611a7757600182611a039190614077565b9150600a85611a1291906140ab565b6030611a1e91906140dc565b60f81b818381518110611a3457611a3361390d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611a709190614046565b94506119ee565b8093505050505b919050565b600033905090565b8151835114611acf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac6906141a4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614236565b60405180910390fd5b6000611b49611a83565b9050611b59818787878787612305565b60005b8451811015611d0a576000858281518110611b7a57611b7961390d565b5b602002602001015190506000858381518110611b9957611b9861390d565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c31906142c8565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cef91906140dc565b9250508190555050505080611d039061396b565b9050611b5c565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611d819291906142e8565b60405180910390a4611d9781878787878761230d565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecc90614391565b60405180910390fd5b8151835114611f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f10906141a4565b60405180910390fd5b6000611f23611a83565b9050611f3481600087878787612305565b60005b8451811015611fed57838181518110611f5357611f5261390d565b5b6020026020010151600080878481518110611f7157611f7061390d565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd391906140dc565b925050819055508080611fe59061396b565b915050611f37565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516120659291906142e8565b60405180910390a461207c8160008787878761230d565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ea90614236565b60405180910390fd5b60006120fd611a83565b905061211d81878761210e886124e5565b612117886124e5565b87612305565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050838110156121b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ab906142c8565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461226991906140dc565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6288886040516122e69291906143b1565b60405180910390a46122fc82888888888861255f565b50505050505050565b505050505050565b61232c8473ffffffffffffffffffffffffffffffffffffffff16612737565b156124dd578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161237295949392919061442f565b6020604051808303816000875af19250505080156123ae57506040513d601f19601f820116820180604052508101906123ab91906144ac565b60015b612454576123ba6144e6565b806308c379a0141561241757506123cf614508565b806123da5750612419565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e9190612a80565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90614610565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146124db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d2906146a2565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff81111561250457612503612b00565b5b6040519080825280602002602001820160405280156125325781602001602082028036833780820191505090505b509050828160008151811061254a5761254961390d565b5b60200260200101818152505080915050919050565b61257e8473ffffffffffffffffffffffffffffffffffffffff16612737565b1561272f578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016125c49594939291906146c2565b6020604051808303816000875af192505050801561260057506040513d601f19601f820116820180604052508101906125fd91906144ac565b60015b6126a65761260c6144e6565b806308c379a014156126695750612621614508565b8061262c575061266b565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126609190612a80565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269d90614610565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461272d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612724906146a2565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612756906135da565b90600052602060002090601f01602090048101928261277857600085556127bf565b82601f1061279157805160ff19168380011785556127bf565b828001600101855582156127bf579182015b828111156127be5782518255916020019190600101906127a3565b5b5090506127cc91906127d0565b5090565b5b808211156127e95760008160009055506001016127d1565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061282c82612801565b9050919050565b61283c81612821565b811461284757600080fd5b50565b60008135905061285981612833565b92915050565b6000819050919050565b6128728161285f565b811461287d57600080fd5b50565b60008135905061288f81612869565b92915050565b600080604083850312156128ac576128ab6127f7565b5b60006128ba8582860161284a565b92505060206128cb85828601612880565b9150509250929050565b6128de8161285f565b82525050565b60006020820190506128f960008301846128d5565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612934816128ff565b811461293f57600080fd5b50565b6000813590506129518161292b565b92915050565b60006020828403121561296d5761296c6127f7565b5b600061297b84828501612942565b91505092915050565b60008115159050919050565b61299981612984565b82525050565b60006020820190506129b46000830184612990565b92915050565b6000602082840312156129d0576129cf6127f7565b5b60006129de84828501612880565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612a21578082015181840152602081019050612a06565b83811115612a30576000848401525b50505050565b6000601f19601f8301169050919050565b6000612a52826129e7565b612a5c81856129f2565b9350612a6c818560208601612a03565b612a7581612a36565b840191505092915050565b60006020820190508181036000830152612a9a8184612a47565b905092915050565b612aab81612984565b8114612ab657600080fd5b50565b600081359050612ac881612aa2565b92915050565b600060208284031215612ae457612ae36127f7565b5b6000612af284828501612ab9565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612b3882612a36565b810181811067ffffffffffffffff82111715612b5757612b56612b00565b5b80604052505050565b6000612b6a6127ed565b9050612b768282612b2f565b919050565b600067ffffffffffffffff821115612b9657612b95612b00565b5b602082029050602081019050919050565b600080fd5b6000612bbf612bba84612b7b565b612b60565b90508083825260208201905060208402830185811115612be257612be1612ba7565b5b835b81811015612c0b5780612bf78882612880565b845260208401935050602081019050612be4565b5050509392505050565b600082601f830112612c2a57612c29612afb565b5b8135612c3a848260208601612bac565b91505092915050565b600080fd5b600067ffffffffffffffff821115612c6357612c62612b00565b5b612c6c82612a36565b9050602081019050919050565b82818337600083830152505050565b6000612c9b612c9684612c48565b612b60565b905082815260208101848484011115612cb757612cb6612c43565b5b612cc2848285612c79565b509392505050565b600082601f830112612cdf57612cde612afb565b5b8135612cef848260208601612c88565b91505092915050565b600080600080600060a08688031215612d1457612d136127f7565b5b6000612d228882890161284a565b9550506020612d338882890161284a565b945050604086013567ffffffffffffffff811115612d5457612d536127fc565b5b612d6088828901612c15565b935050606086013567ffffffffffffffff811115612d8157612d806127fc565b5b612d8d88828901612c15565b925050608086013567ffffffffffffffff811115612dae57612dad6127fc565b5b612dba88828901612cca565b9150509295509295909350565b600067ffffffffffffffff821115612de257612de1612b00565b5b602082029050602081019050919050565b6000612e06612e0184612dc7565b612b60565b90508083825260208201905060208402830185811115612e2957612e28612ba7565b5b835b81811015612e525780612e3e888261284a565b845260208401935050602081019050612e2b565b5050509392505050565b600082601f830112612e7157612e70612afb565b5b8135612e81848260208601612df3565b91505092915050565b60008060408385031215612ea157612ea06127f7565b5b600083013567ffffffffffffffff811115612ebf57612ebe6127fc565b5b612ecb85828601612e5c565b925050602083013567ffffffffffffffff811115612eec57612eeb6127fc565b5b612ef885828601612c15565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612f378161285f565b82525050565b6000612f498383612f2e565b60208301905092915050565b6000602082019050919050565b6000612f6d82612f02565b612f778185612f0d565b9350612f8283612f1e565b8060005b83811015612fb3578151612f9a8882612f3d565b9750612fa583612f55565b925050600181019050612f86565b5085935050505092915050565b60006020820190508181036000830152612fda8184612f62565b905092915050565b600067ffffffffffffffff821115612ffd57612ffc612b00565b5b61300682612a36565b9050602081019050919050565b600061302661302184612fe2565b612b60565b90508281526020810184848401111561304257613041612c43565b5b61304d848285612c79565b509392505050565b600082601f83011261306a57613069612afb565b5b813561307a848260208601613013565b91505092915050565b600060208284031215613099576130986127f7565b5b600082013567ffffffffffffffff8111156130b7576130b66127fc565b5b6130c384828501613055565b91505092915050565b600080fd5b60008083601f8401126130e7576130e6612afb565b5b8235905067ffffffffffffffff811115613104576131036130cc565b5b6020830191508360208202830111156131205761311f612ba7565b5b9250929050565b6000806020838503121561313e5761313d6127f7565b5b600083013567ffffffffffffffff81111561315c5761315b6127fc565b5b613168858286016130d1565b92509250509250929050565b61317d81612821565b82525050565b60006020820190506131986000830184613174565b92915050565b60008083601f8401126131b4576131b3612afb565b5b8235905067ffffffffffffffff8111156131d1576131d06130cc565b5b6020830191508360208202830111156131ed576131ec612ba7565b5b9250929050565b60008083601f84011261320a57613209612afb565b5b8235905067ffffffffffffffff811115613227576132266130cc565b5b60208301915083602082028301111561324357613242612ba7565b5b9250929050565b60008060008060008060608789031215613267576132666127f7565b5b600087013567ffffffffffffffff811115613285576132846127fc565b5b61329189828a0161319e565b9650965050602087013567ffffffffffffffff8111156132b4576132b36127fc565b5b6132c089828a016131f4565b9450945050604087013567ffffffffffffffff8111156132e3576132e26127fc565b5b6132ef89828a016131f4565b92509250509295509295509295565b60008083601f84011261331457613313612afb565b5b8235905067ffffffffffffffff811115613331576133306130cc565b5b60208301915083600182028301111561334d5761334c612ba7565b5b9250929050565b6000806000806040858703121561336e5761336d6127f7565b5b600085013567ffffffffffffffff81111561338c5761338b6127fc565b5b613398878288016130d1565b9450945050602085013567ffffffffffffffff8111156133bb576133ba6127fc565b5b6133c7878288016132fe565b925092505092959194509250565b600080604083850312156133ec576133eb6127f7565b5b60006133fa8582860161284a565b925050602061340b85828601612ab9565b9150509250929050565b6000806040838503121561342c5761342b6127f7565b5b600061343a8582860161284a565b925050602061344b8582860161284a565b9150509250929050565b600080600080600060a08688031215613471576134706127f7565b5b600061347f8882890161284a565b95505060206134908882890161284a565b94505060406134a188828901612880565b93505060606134b288828901612880565b925050608086013567ffffffffffffffff8111156134d3576134d26127fc565b5b6134df88828901612cca565b9150509295509295909350565b600060208284031215613502576135016127f7565b5b60006135108482850161284a565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613575602b836129f2565b915061358082613519565b604082019050919050565b600060208201905081810360008301526135a481613568565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135f257607f821691505b60208210811415613606576136056135ab565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154613639816135da565b613643818661360c565b9450600182166000811461365e576001811461366f576136a2565b60ff198316865281860193506136a2565b61367885613617565b60005b8381101561369a5781548189015260018201915060208101905061367b565b838801955050505b50505092915050565b60006136b6826129e7565b6136c0818561360c565b93506136d0818560208601612a03565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061371260058361360c565b915061371d826136dc565b600582019050919050565b6000613734828561362c565b915061374082846136ab565b915061374b82613705565b91508190509392505050565b7f596f7520617265206e6f7420616c6c6f77656420746f206368616e676520636c60008201527f61696d2073746174757300000000000000000000000000000000000000000000602082015250565b60006137b3602a836129f2565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006138456032836129f2565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006138d76029836129f2565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006139768261285f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139a9576139a861393c565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006139ea6020836129f2565b91506139f5826139b4565b602082019050919050565b60006020820190508181036000830152613a19816139dd565b9050919050565b7f596f75206861766520657863656564656420746865206d6178696d756d206e7560008201527f6d626572206f6620706167657320746f206d696e74206f6e20612073696e676c60208201527f65207472616e73616374696f6e00000000000000000000000000000000000000604082015250565b6000613aa2604d836129f2565b9150613aad82613a20565b606082019050919050565b60006020820190508181036000830152613ad181613a95565b9050919050565b6000613ae38261285f565b9150613aee8361285f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b2757613b2661393c565b5b828202905092915050565b7f496e73756666696369656e742066756e647320746f2070757263686173650000600082015250565b6000613b68601e836129f2565b9150613b7382613b32565b602082019050919050565b60006020820190508181036000830152613b9781613b5b565b9050919050565b7f616c7265616479206d696e74656420746f6b656e730000000000000000000000600082015250565b6000613bd46015836129f2565b9150613bdf82613b9e565b602082019050919050565b60006020820190508181036000830152613c0381613bc7565b9050919050565b7f596f7520617265206e6f7420616c6c6f77656420746f2065786563757465206160008201527f697264726f700000000000000000000000000000000000000000000000000000602082015250565b6000613c666026836129f2565b9150613c7182613c0a565b604082019050919050565b60006020820190508181036000830152613c9581613c59565b9050919050565b600080fd5b600080fd5b600080fd5b60008083356001602003843603038112613cc857613cc7613c9c565b5b80840192508235915067ffffffffffffffff821115613cea57613ce9613ca1565b5b602083019250602082023603831315613d0657613d05613ca6565b5b509250929050565b7f436c61696d696e672069732064697361626c6564000000000000000000000000600082015250565b6000613d446014836129f2565b9150613d4f82613d0e565b602082019050919050565b60006020820190508181036000830152613d7381613d37565b9050919050565b6000613d86838561360c565b9350613d93838584612c79565b82840190509392505050565b6000613dac828486613d7a565b91508190509392505050565b6000613dc4828461362c565b915081905092915050565b7f596f7520617265206e6f7420616c6c6f77656420746f20636c61696d20746f6b60008201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2b6023836129f2565b9150613e3682613dcf565b604082019050919050565b60006020820190508181036000830152613e5a81613e1e565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000613ebd6029836129f2565b9150613ec882613e61565b604082019050919050565b60006020820190508181036000830152613eec81613eb0565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b6000613f4f6029836129f2565b9150613f5a82613ef3565b604082019050919050565b60006020820190508181036000830152613f7e81613f42565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613fe16026836129f2565b9150613fec82613f85565b604082019050919050565b6000602082019050818103600083015261401081613fd4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140518261285f565b915061405c8361285f565b92508261406c5761406b614017565b5b828204905092915050565b60006140828261285f565b915061408d8361285f565b9250828210156140a05761409f61393c565b5b828203905092915050565b60006140b68261285f565b91506140c18361285f565b9250826140d1576140d0614017565b5b828206905092915050565b60006140e78261285f565b91506140f28361285f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141275761412661393c565b5b828201905092915050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061418e6028836129f2565b915061419982614132565b604082019050919050565b600060208201905081810360008301526141bd81614181565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142206025836129f2565b915061422b826141c4565b604082019050919050565b6000602082019050818103600083015261424f81614213565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006142b2602a836129f2565b91506142bd82614256565b604082019050919050565b600060208201905081810360008301526142e1816142a5565b9050919050565b600060408201905081810360008301526143028185612f62565b905081810360208301526143168184612f62565b90509392505050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061437b6021836129f2565b91506143868261431f565b604082019050919050565b600060208201905081810360008301526143aa8161436e565b9050919050565b60006040820190506143c660008301856128d5565b6143d360208301846128d5565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614401826143da565b61440b81856143e5565b935061441b818560208601612a03565b61442481612a36565b840191505092915050565b600060a0820190506144446000830188613174565b6144516020830187613174565b81810360408301526144638186612f62565b905081810360608301526144778185612f62565b9050818103608083015261448b81846143f6565b90509695505050505050565b6000815190506144a68161292b565b92915050565b6000602082840312156144c2576144c16127f7565b5b60006144d084828501614497565b91505092915050565b60008160e01c9050919050565b600060033d11156145055760046000803e6145026000516144d9565b90505b90565b600060443d10156145185761459b565b6145206127ed565b60043d036004823e80513d602482011167ffffffffffffffff8211171561454857505061459b565b808201805167ffffffffffffffff811115614566575050505061459b565b80602083010160043d03850181111561458357505050505061459b565b61459282602001850186612b2f565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145fa6034836129f2565b91506146058261459e565b604082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061468c6028836129f2565b915061469782614630565b604082019050919050565b600060208201905081810360008301526146bb8161467f565b9050919050565b600060a0820190506146d76000830188613174565b6146e46020830187613174565b6146f160408301866128d5565b6146fe60608301856128d5565b818103608083015261471081846143f6565b9050969550505050505056fea264697066735822122061077e14da3ae0609c68f66474e362f7df435cd856d95eaffa0c47b60ac5511c64736f6c634300080a0033

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

00000000000000000000000078b2061a080342ead68bed2cfc56f8db5c82320a

-----Decoded View---------------
Arg [0] : ownerWallet_ (address): 0x78b2061A080342eAd68BED2CFC56F8Db5c82320a

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000078b2061a080342ead68bed2cfc56f8db5c82320a


Deployed Bytecode Sourcemap

37730:4073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24332:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23355:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40921:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41598:202;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26427:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24729:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41203:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4576:94;;;;;;;;;;;;;:::i;:::-;;41472:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41330:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38653:837;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3925:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39502:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40189:724;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25326:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25709:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25949:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4825:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24332:231;24418:7;24465:1;24446:21;;:7;:21;;;;24438:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;24533:9;:13;24543:2;24533:13;;;;;;;;;;;:22;24547:7;24533:22;;;;;;;;;;;;;;;;24526:29;;24332:231;;;;:::o;23355:310::-;23457:4;23509:26;23494:41;;;:11;:41;;;;:110;;;;23567:37;23552:52;;;:11;:52;;;;23494:110;:163;;;;23621:36;23645:11;23621:23;:36::i;:::-;23494:163;23474:183;;23355:310;;;:::o;40921:270::-;40990:13;41079:7;41105:26;41122:8;41105:16;:26::i;:::-;41044:128;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41016:167;;40921:270;;;:::o;41598:202::-;41695:13;;;;;;;;;;;41681:27;;:10;:27;;;41673:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;41781:11;41766:12;;:26;;;;;;;;;;;;;;;;;;41598:202;:::o;26427:442::-;26668:12;:10;:12::i;:::-;26660:20;;:4;:20;;;:60;;;;26684:36;26701:4;26707:12;:10;:12::i;:::-;26684:16;:36::i;:::-;26660:60;26638:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26809:52;26832:4;26838:2;26842:3;26847:7;26856:4;26809:22;:52::i;:::-;26427:442;;;;;:::o;24729:524::-;24885:16;24946:3;:10;24927:8;:15;:29;24919:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25015:30;25062:8;:15;25048:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25015:63;;25096:9;25091:122;25115:8;:15;25111:1;:19;25091:122;;;25171:30;25181:8;25190:1;25181:11;;;;;;;;:::i;:::-;;;;;;;;25194:3;25198:1;25194:6;;;;;;;;:::i;:::-;;;;;;;;25171:9;:30::i;:::-;25152:13;25166:1;25152:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25132:3;;;;:::i;:::-;;;25091:122;;;;25232:13;25225:20;;;24729:524;;;;:::o;41203:119::-;4156:12;:10;:12::i;:::-;4145:23;;:7;:5;:7::i;:::-;:23;;;4137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41306:8:::1;41296:7;:18;;;;;;;;;;;;:::i;:::-;;41203:119:::0;:::o;4576:94::-;4156:12;:10;:12::i;:::-;4145:23;;:7;:5;:7::i;:::-;:23;;;4137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4641:21:::1;4659:1;4641:9;:21::i;:::-;4576:94::o:0;41472:118::-;4156:12;:10;:12::i;:::-;4145:23;;:7;:5;:7::i;:::-;:23;;;4137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41572:10:::1;41560:9;:22;;;;41472:118:::0;:::o;41330:134::-;4156:12;:10;:12::i;:::-;4145:23;;:7;:5;:7::i;:::-;:23;;;4137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41442:14:::1;41426:13;:30;;;;41330:134:::0;:::o;38653:837::-;38755:13;;38735:9;;:16;;:33;;38727:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;38901:9;;38882;;:16;;:28;;;;:::i;:::-;38869:9;:41;;38861:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;38958:24;38999:9;;:16;;38985:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38958:58;;39033:6;39029:258;39046:9;;:16;;39044:1;:18;39029:258;;;39117:5;39093:29;;:6;:20;39100:9;;39110:1;39100:12;;;;;;;:::i;:::-;;;;;;;;39093:20;;;;;;;;;;;;;;;;;;;;;:29;;;39085:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;39232:1;39219:7;39227:1;39219:10;;;;;;;;:::i;:::-;;;;;;;:14;;;;;39271:4;39248:6;:20;39255:9;;39265:1;39255:12;;;;;;;:::i;:::-;;;;;;;;39248:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;39065:3;;;;;:::i;:::-;;;;39029:258;;;;39299:47;39310:11;;;;;;;;;;;39323:9;;39299:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39334:7;39299:47;;;;;;;;;;;;:10;:47::i;:::-;39367:71;39390:11;;;;;;;;;;;39403:10;39415:9;;39367:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39426:7;39367:71;;;;;;;;;;;;:22;:71::i;:::-;39451:11;;;;;;;;;;;:20;;:31;39472:9;39451:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38716:774;38653:837;;:::o;3925:87::-;3971:7;3998:6;;;;;;;;;;;3991:13;;3925:87;:::o;39502:679::-;39673:13;;;;;;;;;;;39659:27;;:10;:27;;;39651:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39838:6;39834:340;39851:9;;:16;;39849:1;:18;39834:340;;;39894:6;39890:109;39907:9;;39917:1;39907:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:19;;39905:1;:21;39890:109;;;39979:4;39953:6;:23;39960:9;;39970:1;39960:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;39973:1;39960:15;;;;;;;:::i;:::-;;;;;;;;39953:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;39929:3;;;;;:::i;:::-;;;;39890:109;;;;40015:53;40026:11;;;;;;;;;;;40039:9;;40049:1;40039:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;40015:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40053:7;;40061:1;40053:10;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;40015:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;:53::i;:::-;40083:79;40106:11;;;;;;;;;;;40119:9;;40129:1;40119:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;40133:9;;40143:1;40133:12;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;40083:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40147:7;;40155:1;40147:10;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;40083:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:22;:79::i;:::-;39870:3;;;;;:::i;:::-;;;;39834:340;;;;39502:679;;;;;;:::o;40189:724::-;40307:4;40291:20;;:12;;;;;;;;;;;:20;;;40283:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;40428:11;;40410:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40400:42;;;;;;40383:10;40365:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;40355:41;;;;;;:87;40347:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;40493:24;40534:9;;:16;;40520:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40493:58;;40566:6;40562:202;40579:9;;:16;;40577:1;:18;40562:202;;;40650:5;40626:29;;:6;:20;40633:9;;40643:1;40633:12;;;;;;;:::i;:::-;;;;;;;;40626:20;;;;;;;;;;;;;;;;;;;;;:29;;;40618:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40709:1;40696:7;40704:1;40696:10;;;;;;;;:::i;:::-;;;;;;;:14;;;;;40748:4;40725:6;:20;40732:9;;40742:1;40732:12;;;;;;;:::i;:::-;;;;;;;;40725:20;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;40598:3;;;;;:::i;:::-;;;;40562:202;;;;40776:47;40787:11;;;;;;;;;;;40800:9;;40776:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40811:7;40776:47;;;;;;;;;;;;:10;:47::i;:::-;40834:71;40857:11;;;;;;;;;;;40870:10;40882:9;;40834:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40893:7;40834:71;;;;;;;;;;;;:22;:71::i;:::-;40272:641;40189:724;;;;:::o;25326:311::-;25445:8;25429:24;;:12;:10;:12::i;:::-;:24;;;;25421:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;25557:8;25512:18;:32;25531:12;:10;:12::i;:::-;25512:32;;;;;;;;;;;;;;;:42;25545:8;25512:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25610:8;25581:48;;25596:12;:10;:12::i;:::-;25581:48;;;25620:8;25581:48;;;;;;:::i;:::-;;;;;;;;25326:311;;:::o;25709:168::-;25808:4;25832:18;:27;25851:7;25832:27;;;;;;;;;;;;;;;:37;25860:8;25832:37;;;;;;;;;;;;;;;;;;;;;;;;;25825:44;;25709:168;;;;:::o;25949:401::-;26165:12;:10;:12::i;:::-;26157:20;;:4;:20;;;:60;;;;26181:36;26198:4;26204:12;:10;:12::i;:::-;26181:16;:36::i;:::-;26157:60;26135:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26297:45;26315:4;26321:2;26325;26329:6;26337:4;26297:17;:45::i;:::-;25949:401;;;;;:::o;4825:192::-;4156:12;:10;:12::i;:::-;4145:23;;:7;:5;:7::i;:::-;:23;;;4137:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4934:1:::1;4914:22;;:8;:22;;;;4906:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4990:19;5000:8;4990:9;:19::i;:::-;4825:192:::0;:::o;14967:157::-;15052:4;15091:25;15076:40;;;:11;:40;;;;15069:47;;14967:157;;;:::o;317:723::-;373:13;603:1;594:5;:10;590:53;;;621:10;;;;;;;;;;;;;;;;;;;;;590:53;653:12;668:5;653:20;;684:14;709:78;724:1;716:4;:9;709:78;;742:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;709:78;;;797:19;829:6;819:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;797:39;;847:154;863:1;854:5;:10;847:154;;891:1;881:11;;;;;:::i;:::-;;;958:2;950:5;:10;;;;:::i;:::-;937:2;:24;;;;:::i;:::-;924:39;;907:6;914;907:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;987:2;978:11;;;;;:::i;:::-;;;847:154;;;1025:6;1011:21;;;;;317:723;;;;:::o;2707:98::-;2760:7;2787:10;2780:17;;2707:98;:::o;28511:1074::-;28738:7;:14;28724:3;:10;:28;28716:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;28830:1;28816:16;;:2;:16;;;;28808:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28887:16;28906:12;:10;:12::i;:::-;28887:31;;28931:60;28952:8;28962:4;28968:2;28972:3;28977:7;28986:4;28931:20;:60::i;:::-;29009:9;29004:421;29028:3;:10;29024:1;:14;29004:421;;;29060:10;29073:3;29077:1;29073:6;;;;;;;;:::i;:::-;;;;;;;;29060:19;;29094:14;29111:7;29119:1;29111:10;;;;;;;;:::i;:::-;;;;;;;;29094:27;;29138:19;29160:9;:13;29170:2;29160:13;;;;;;;;;;;:19;29174:4;29160:19;;;;;;;;;;;;;;;;29138:41;;29217:6;29202:11;:21;;29194:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29350:6;29336:11;:20;29314:9;:13;29324:2;29314:13;;;;;;;;;;;:19;29328:4;29314:19;;;;;;;;;;;;;;;:42;;;;29407:6;29386:9;:13;29396:2;29386:13;;;;;;;;;;;:17;29400:2;29386:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29045:380;;;29040:3;;;;:::i;:::-;;;29004:421;;;;29472:2;29442:47;;29466:4;29442:47;;29456:8;29442:47;;;29476:3;29481:7;29442:47;;;;;;;:::i;:::-;;;;;;;;29502:75;29538:8;29548:4;29554:2;29558:3;29563:7;29572:4;29502:35;:75::i;:::-;28705:880;28511:1074;;;;;:::o;5025:173::-;5081:16;5100:6;;;;;;;;;;;5081:25;;5126:8;5117:6;;:17;;;;;;;;;;;;;;;;;;5181:8;5150:40;;5171:8;5150:40;;;;;;;;;;;;5070:128;5025:173;:::o;31873:735::-;32065:1;32051:16;;:2;:16;;;;32043:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32138:7;:14;32124:3;:10;:28;32116:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32210:16;32229:12;:10;:12::i;:::-;32210:31;;32254:66;32275:8;32293:1;32297:2;32301:3;32306:7;32315:4;32254:20;:66::i;:::-;32338:9;32333:103;32357:3;:10;32353:1;:14;32333:103;;;32414:7;32422:1;32414:10;;;;;;;;:::i;:::-;;;;;;;;32389:9;:17;32399:3;32403:1;32399:6;;;;;;;;:::i;:::-;;;;;;;;32389:17;;;;;;;;;;;:21;32407:2;32389:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32369:3;;;;;:::i;:::-;;;;32333:103;;;;32489:2;32453:53;;32485:1;32453:53;;32467:8;32453:53;;;32493:3;32498:7;32453:53;;;;;;;:::i;:::-;;;;;;;;32519:81;32555:8;32573:1;32577:2;32581:3;32586:7;32595:4;32519:35;:81::i;:::-;32032:576;31873:735;;;;:::o;27333:820::-;27535:1;27521:16;;:2;:16;;;;27513:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27592:16;27611:12;:10;:12::i;:::-;27592:31;;27636:96;27657:8;27667:4;27673:2;27677:21;27695:2;27677:17;:21::i;:::-;27700:25;27718:6;27700:17;:25::i;:::-;27727:4;27636:20;:96::i;:::-;27745:19;27767:9;:13;27777:2;27767:13;;;;;;;;;;;:19;27781:4;27767:19;;;;;;;;;;;;;;;;27745:41;;27820:6;27805:11;:21;;27797:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27945:6;27931:11;:20;27909:9;:13;27919:2;27909:13;;;;;;;;;;;:19;27923:4;27909:19;;;;;;;;;;;;;;;:42;;;;27994:6;27973:9;:13;27983:2;27973:13;;;;;;;;;;;:17;27987:2;27973:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28049:2;28018:46;;28043:4;28018:46;;28033:8;28018:46;;;28053:2;28057:6;28018:46;;;;;;;:::i;:::-;;;;;;;;28077:68;28108:8;28118:4;28124:2;28128;28132:6;28140:4;28077:30;:68::i;:::-;27502:651;;27333:820;;;;;:::o;35619:221::-;;;;;;;:::o;36600:813::-;36840:15;:2;:13;;;:15::i;:::-;36836:570;;;36893:2;36876:43;;;36920:8;36930:4;36936:3;36941:7;36950:4;36876:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36872:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;37268:6;37261:14;;;;;;;;;;;:::i;:::-;;;;;;;;36872:523;;;37317:62;;;;;;;;;;:::i;:::-;;;;;;;;36872:523;37049:48;;;37037:60;;;:8;:60;;;;37033:159;;37122:50;;;;;;;;;;:::i;:::-;;;;;;;;37033:159;36956:251;36836:570;36600:813;;;;;;:::o;37421:198::-;37487:16;37516:22;37555:1;37541:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37516:41;;37579:7;37568:5;37574:1;37568:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;37606:5;37599:12;;;37421:198;;;:::o;35848:744::-;36063:15;:2;:13;;;:15::i;:::-;36059:526;;;36116:2;36099:38;;;36138:8;36148:4;36154:2;36158:6;36166:4;36099:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36095:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36447:6;36440:14;;;;;;;;;;;:::i;:::-;;;;;;;;36095:479;;;36496:62;;;;;;;;;;:::i;:::-;;;;;;;;36095:479;36233:43;;;36221:55;;;:8;:55;;;;36217:154;;36301:50;;;;;;;;;;:::i;:::-;;;;;;;;36217:154;36172:214;36059:526;35848:744;;;;;;:::o;5977:387::-;6037:4;6245:12;6312:7;6300:20;6292:28;;6355:1;6348:4;:8;6341:15;;;5977:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:116::-;5008:21;5023:5;5008:21;:::i;:::-;5001:5;4998:32;4988:60;;5044:1;5041;5034:12;4988:60;4938:116;:::o;5060:133::-;5103:5;5141:6;5128:20;5119:29;;5157:30;5181:5;5157:30;:::i;:::-;5060:133;;;;:::o;5199:323::-;5255:6;5304:2;5292:9;5283:7;5279:23;5275:32;5272:119;;;5310:79;;:::i;:::-;5272:119;5430:1;5455:50;5497:7;5488:6;5477:9;5473:22;5455:50;:::i;:::-;5445:60;;5401:114;5199:323;;;;:::o;5528:117::-;5637:1;5634;5627:12;5651:180;5699:77;5696:1;5689:88;5796:4;5793:1;5786:15;5820:4;5817:1;5810:15;5837:281;5920:27;5942:4;5920:27;:::i;:::-;5912:6;5908:40;6050:6;6038:10;6035:22;6014:18;6002:10;5999:34;5996:62;5993:88;;;6061:18;;:::i;:::-;5993:88;6101:10;6097:2;6090:22;5880:238;5837:281;;:::o;6124:129::-;6158:6;6185:20;;:::i;:::-;6175:30;;6214:33;6242:4;6234:6;6214:33;:::i;:::-;6124:129;;;:::o;6259:311::-;6336:4;6426:18;6418:6;6415:30;6412:56;;;6448:18;;:::i;:::-;6412:56;6498:4;6490:6;6486:17;6478:25;;6558:4;6552;6548:15;6540:23;;6259:311;;;:::o;6576:117::-;6685:1;6682;6675:12;6716:710;6812:5;6837:81;6853:64;6910:6;6853:64;:::i;:::-;6837:81;:::i;:::-;6828:90;;6938:5;6967:6;6960:5;6953:21;7001:4;6994:5;6990:16;6983:23;;7054:4;7046:6;7042:17;7034:6;7030:30;7083:3;7075:6;7072:15;7069:122;;;7102:79;;:::i;:::-;7069:122;7217:6;7200:220;7234:6;7229:3;7226:15;7200:220;;;7309:3;7338:37;7371:3;7359:10;7338:37;:::i;:::-;7333:3;7326:50;7405:4;7400:3;7396:14;7389:21;;7276:144;7260:4;7255:3;7251:14;7244:21;;7200:220;;;7204:21;6818:608;;6716:710;;;;;:::o;7449:370::-;7520:5;7569:3;7562:4;7554:6;7550:17;7546:27;7536:122;;7577:79;;:::i;:::-;7536:122;7694:6;7681:20;7719:94;7809:3;7801:6;7794:4;7786:6;7782:17;7719:94;:::i;:::-;7710:103;;7526:293;7449:370;;;;:::o;7825:117::-;7934:1;7931;7924:12;7948:307;8009:4;8099:18;8091:6;8088:30;8085:56;;;8121:18;;:::i;:::-;8085:56;8159:29;8181:6;8159:29;:::i;:::-;8151:37;;8243:4;8237;8233:15;8225:23;;7948:307;;;:::o;8261:154::-;8345:6;8340:3;8335;8322:30;8407:1;8398:6;8393:3;8389:16;8382:27;8261:154;;;:::o;8421:410::-;8498:5;8523:65;8539:48;8580:6;8539:48;:::i;:::-;8523:65;:::i;:::-;8514:74;;8611:6;8604:5;8597:21;8649:4;8642:5;8638:16;8687:3;8678:6;8673:3;8669:16;8666:25;8663:112;;;8694:79;;:::i;:::-;8663:112;8784:41;8818:6;8813:3;8808;8784:41;:::i;:::-;8504:327;8421:410;;;;;:::o;8850:338::-;8905:5;8954:3;8947:4;8939:6;8935:17;8931:27;8921:122;;8962:79;;:::i;:::-;8921:122;9079:6;9066:20;9104:78;9178:3;9170:6;9163:4;9155:6;9151:17;9104:78;:::i;:::-;9095:87;;8911:277;8850:338;;;;:::o;9194:1509::-;9348:6;9356;9364;9372;9380;9429:3;9417:9;9408:7;9404:23;9400:33;9397:120;;;9436:79;;:::i;:::-;9397:120;9556:1;9581:53;9626:7;9617:6;9606:9;9602:22;9581:53;:::i;:::-;9571:63;;9527:117;9683:2;9709:53;9754:7;9745:6;9734:9;9730:22;9709:53;:::i;:::-;9699:63;;9654:118;9839:2;9828:9;9824:18;9811:32;9870:18;9862:6;9859:30;9856:117;;;9892:79;;:::i;:::-;9856:117;9997:78;10067:7;10058:6;10047:9;10043:22;9997:78;:::i;:::-;9987:88;;9782:303;10152:2;10141:9;10137:18;10124:32;10183:18;10175:6;10172:30;10169:117;;;10205:79;;:::i;:::-;10169:117;10310:78;10380:7;10371:6;10360:9;10356:22;10310:78;:::i;:::-;10300:88;;10095:303;10465:3;10454:9;10450:19;10437:33;10497:18;10489:6;10486:30;10483:117;;;10519:79;;:::i;:::-;10483:117;10624:62;10678:7;10669:6;10658:9;10654:22;10624:62;:::i;:::-;10614:72;;10408:288;9194:1509;;;;;;;;:::o;10709:311::-;10786:4;10876:18;10868:6;10865:30;10862:56;;;10898:18;;:::i;:::-;10862:56;10948:4;10940:6;10936:17;10928:25;;11008:4;11002;10998:15;10990:23;;10709:311;;;:::o;11043:710::-;11139:5;11164:81;11180:64;11237:6;11180:64;:::i;:::-;11164:81;:::i;:::-;11155:90;;11265:5;11294:6;11287:5;11280:21;11328:4;11321:5;11317:16;11310:23;;11381:4;11373:6;11369:17;11361:6;11357:30;11410:3;11402:6;11399:15;11396:122;;;11429:79;;:::i;:::-;11396:122;11544:6;11527:220;11561:6;11556:3;11553:15;11527:220;;;11636:3;11665:37;11698:3;11686:10;11665:37;:::i;:::-;11660:3;11653:50;11732:4;11727:3;11723:14;11716:21;;11603:144;11587:4;11582:3;11578:14;11571:21;;11527:220;;;11531:21;11145:608;;11043:710;;;;;:::o;11776:370::-;11847:5;11896:3;11889:4;11881:6;11877:17;11873:27;11863:122;;11904:79;;:::i;:::-;11863:122;12021:6;12008:20;12046:94;12136:3;12128:6;12121:4;12113:6;12109:17;12046:94;:::i;:::-;12037:103;;11853:293;11776:370;;;;:::o;12152:894::-;12270:6;12278;12327:2;12315:9;12306:7;12302:23;12298:32;12295:119;;;12333:79;;:::i;:::-;12295:119;12481:1;12470:9;12466:17;12453:31;12511:18;12503:6;12500:30;12497:117;;;12533:79;;:::i;:::-;12497:117;12638:78;12708:7;12699:6;12688:9;12684:22;12638:78;:::i;:::-;12628:88;;12424:302;12793:2;12782:9;12778:18;12765:32;12824:18;12816:6;12813:30;12810:117;;;12846:79;;:::i;:::-;12810:117;12951:78;13021:7;13012:6;13001:9;12997:22;12951:78;:::i;:::-;12941:88;;12736:303;12152:894;;;;;:::o;13052:114::-;13119:6;13153:5;13147:12;13137:22;;13052:114;;;:::o;13172:184::-;13271:11;13305:6;13300:3;13293:19;13345:4;13340:3;13336:14;13321:29;;13172:184;;;;:::o;13362:132::-;13429:4;13452:3;13444:11;;13482:4;13477:3;13473:14;13465:22;;13362:132;;;:::o;13500:108::-;13577:24;13595:5;13577:24;:::i;:::-;13572:3;13565:37;13500:108;;:::o;13614:179::-;13683:10;13704:46;13746:3;13738:6;13704:46;:::i;:::-;13782:4;13777:3;13773:14;13759:28;;13614:179;;;;:::o;13799:113::-;13869:4;13901;13896:3;13892:14;13884:22;;13799:113;;;:::o;13948:732::-;14067:3;14096:54;14144:5;14096:54;:::i;:::-;14166:86;14245:6;14240:3;14166:86;:::i;:::-;14159:93;;14276:56;14326:5;14276:56;:::i;:::-;14355:7;14386:1;14371:284;14396:6;14393:1;14390:13;14371:284;;;14472:6;14466:13;14499:63;14558:3;14543:13;14499:63;:::i;:::-;14492:70;;14585:60;14638:6;14585:60;:::i;:::-;14575:70;;14431:224;14418:1;14415;14411:9;14406:14;;14371:284;;;14375:14;14671:3;14664:10;;14072:608;;;13948:732;;;;:::o;14686:373::-;14829:4;14867:2;14856:9;14852:18;14844:26;;14916:9;14910:4;14906:20;14902:1;14891:9;14887:17;14880:47;14944:108;15047:4;15038:6;14944:108;:::i;:::-;14936:116;;14686:373;;;;:::o;15065:308::-;15127:4;15217:18;15209:6;15206:30;15203:56;;;15239:18;;:::i;:::-;15203:56;15277:29;15299:6;15277:29;:::i;:::-;15269:37;;15361:4;15355;15351:15;15343:23;;15065:308;;;:::o;15379:412::-;15457:5;15482:66;15498:49;15540:6;15498:49;:::i;:::-;15482:66;:::i;:::-;15473:75;;15571:6;15564:5;15557:21;15609:4;15602:5;15598:16;15647:3;15638:6;15633:3;15629:16;15626:25;15623:112;;;15654:79;;:::i;:::-;15623:112;15744:41;15778:6;15773:3;15768;15744:41;:::i;:::-;15463:328;15379:412;;;;;:::o;15811:340::-;15867:5;15916:3;15909:4;15901:6;15897:17;15893:27;15883:122;;15924:79;;:::i;:::-;15883:122;16041:6;16028:20;16066:79;16141:3;16133:6;16126:4;16118:6;16114:17;16066:79;:::i;:::-;16057:88;;15873:278;15811:340;;;;:::o;16157:509::-;16226:6;16275:2;16263:9;16254:7;16250:23;16246:32;16243:119;;;16281:79;;:::i;:::-;16243:119;16429:1;16418:9;16414:17;16401:31;16459:18;16451:6;16448:30;16445:117;;;16481:79;;:::i;:::-;16445:117;16586:63;16641:7;16632:6;16621:9;16617:22;16586:63;:::i;:::-;16576:73;;16372:287;16157:509;;;;:::o;16672:117::-;16781:1;16778;16771:12;16812:568;16885:8;16895:6;16945:3;16938:4;16930:6;16926:17;16922:27;16912:122;;16953:79;;:::i;:::-;16912:122;17066:6;17053:20;17043:30;;17096:18;17088:6;17085:30;17082:117;;;17118:79;;:::i;:::-;17082:117;17232:4;17224:6;17220:17;17208:29;;17286:3;17278:4;17270:6;17266:17;17256:8;17252:32;17249:41;17246:128;;;17293:79;;:::i;:::-;17246:128;16812:568;;;;;:::o;17386:559::-;17472:6;17480;17529:2;17517:9;17508:7;17504:23;17500:32;17497:119;;;17535:79;;:::i;:::-;17497:119;17683:1;17672:9;17668:17;17655:31;17713:18;17705:6;17702:30;17699:117;;;17735:79;;:::i;:::-;17699:117;17848:80;17920:7;17911:6;17900:9;17896:22;17848:80;:::i;:::-;17830:98;;;;17626:312;17386:559;;;;;:::o;17951:118::-;18038:24;18056:5;18038:24;:::i;:::-;18033:3;18026:37;17951:118;;:::o;18075:222::-;18168:4;18206:2;18195:9;18191:18;18183:26;;18219:71;18287:1;18276:9;18272:17;18263:6;18219:71;:::i;:::-;18075:222;;;;:::o;18320:568::-;18393:8;18403:6;18453:3;18446:4;18438:6;18434:17;18430:27;18420:122;;18461:79;;:::i;:::-;18420:122;18574:6;18561:20;18551:30;;18604:18;18596:6;18593:30;18590:117;;;18626:79;;:::i;:::-;18590:117;18740:4;18732:6;18728:17;18716:29;;18794:3;18786:4;18778:6;18774:17;18764:8;18760:32;18757:41;18754:128;;;18801:79;;:::i;:::-;18754:128;18320:568;;;;;:::o;18913:595::-;19013:8;19023:6;19073:3;19066:4;19058:6;19054:17;19050:27;19040:122;;19081:79;;:::i;:::-;19040:122;19194:6;19181:20;19171:30;;19224:18;19216:6;19213:30;19210:117;;;19246:79;;:::i;:::-;19210:117;19360:4;19352:6;19348:17;19336:29;;19414:3;19406:4;19398:6;19394:17;19384:8;19380:32;19377:41;19374:128;;;19421:79;;:::i;:::-;19374:128;18913:595;;;;;:::o;19514:1417::-;19726:6;19734;19742;19750;19758;19766;19815:2;19803:9;19794:7;19790:23;19786:32;19783:119;;;19821:79;;:::i;:::-;19783:119;19969:1;19958:9;19954:17;19941:31;19999:18;19991:6;19988:30;19985:117;;;20021:79;;:::i;:::-;19985:117;20134:80;20206:7;20197:6;20186:9;20182:22;20134:80;:::i;:::-;20116:98;;;;19912:312;20291:2;20280:9;20276:18;20263:32;20322:18;20314:6;20311:30;20308:117;;;20344:79;;:::i;:::-;20308:117;20457:107;20556:7;20547:6;20536:9;20532:22;20457:107;:::i;:::-;20439:125;;;;20234:340;20641:2;20630:9;20626:18;20613:32;20672:18;20664:6;20661:30;20658:117;;;20694:79;;:::i;:::-;20658:117;20807:107;20906:7;20897:6;20886:9;20882:22;20807:107;:::i;:::-;20789:125;;;;20584:340;19514:1417;;;;;;;;:::o;20951:553::-;21009:8;21019:6;21069:3;21062:4;21054:6;21050:17;21046:27;21036:122;;21077:79;;:::i;:::-;21036:122;21190:6;21177:20;21167:30;;21220:18;21212:6;21209:30;21206:117;;;21242:79;;:::i;:::-;21206:117;21356:4;21348:6;21344:17;21332:29;;21410:3;21402:4;21394:6;21390:17;21380:8;21376:32;21373:41;21370:128;;;21417:79;;:::i;:::-;21370:128;20951:553;;;;;:::o;21510:904::-;21617:6;21625;21633;21641;21690:2;21678:9;21669:7;21665:23;21661:32;21658:119;;;21696:79;;:::i;:::-;21658:119;21844:1;21833:9;21829:17;21816:31;21874:18;21866:6;21863:30;21860:117;;;21896:79;;:::i;:::-;21860:117;22009:80;22081:7;22072:6;22061:9;22057:22;22009:80;:::i;:::-;21991:98;;;;21787:312;22166:2;22155:9;22151:18;22138:32;22197:18;22189:6;22186:30;22183:117;;;22219:79;;:::i;:::-;22183:117;22332:65;22389:7;22380:6;22369:9;22365:22;22332:65;:::i;:::-;22314:83;;;;22109:298;21510:904;;;;;;;:::o;22420:468::-;22485:6;22493;22542:2;22530:9;22521:7;22517:23;22513:32;22510:119;;;22548:79;;:::i;:::-;22510:119;22668:1;22693:53;22738:7;22729:6;22718:9;22714:22;22693:53;:::i;:::-;22683:63;;22639:117;22795:2;22821:50;22863:7;22854:6;22843:9;22839:22;22821:50;:::i;:::-;22811:60;;22766:115;22420:468;;;;;:::o;22894:474::-;22962:6;22970;23019:2;23007:9;22998:7;22994:23;22990:32;22987:119;;;23025:79;;:::i;:::-;22987:119;23145:1;23170:53;23215:7;23206:6;23195:9;23191:22;23170:53;:::i;:::-;23160:63;;23116:117;23272:2;23298:53;23343:7;23334:6;23323:9;23319:22;23298:53;:::i;:::-;23288:63;;23243:118;22894:474;;;;;:::o;23374:1089::-;23478:6;23486;23494;23502;23510;23559:3;23547:9;23538:7;23534:23;23530:33;23527:120;;;23566:79;;:::i;:::-;23527:120;23686:1;23711:53;23756:7;23747:6;23736:9;23732:22;23711:53;:::i;:::-;23701:63;;23657:117;23813:2;23839:53;23884:7;23875:6;23864:9;23860:22;23839:53;:::i;:::-;23829:63;;23784:118;23941:2;23967:53;24012:7;24003:6;23992:9;23988:22;23967:53;:::i;:::-;23957:63;;23912:118;24069:2;24095:53;24140:7;24131:6;24120:9;24116:22;24095:53;:::i;:::-;24085:63;;24040:118;24225:3;24214:9;24210:19;24197:33;24257:18;24249:6;24246:30;24243:117;;;24279:79;;:::i;:::-;24243:117;24384:62;24438:7;24429:6;24418:9;24414:22;24384:62;:::i;:::-;24374:72;;24168:288;23374:1089;;;;;;;;:::o;24469:329::-;24528:6;24577:2;24565:9;24556:7;24552:23;24548:32;24545:119;;;24583:79;;:::i;:::-;24545:119;24703:1;24728:53;24773:7;24764:6;24753:9;24749:22;24728:53;:::i;:::-;24718:63;;24674:117;24469:329;;;;:::o;24804:230::-;24944:34;24940:1;24932:6;24928:14;24921:58;25013:13;25008:2;25000:6;24996:15;24989:38;24804:230;:::o;25040:366::-;25182:3;25203:67;25267:2;25262:3;25203:67;:::i;:::-;25196:74;;25279:93;25368:3;25279:93;:::i;:::-;25397:2;25392:3;25388:12;25381:19;;25040:366;;;:::o;25412:419::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:180::-;25885:77;25882:1;25875:88;25982:4;25979:1;25972:15;26006:4;26003:1;25996:15;26023:320;26067:6;26104:1;26098:4;26094:12;26084:22;;26151:1;26145:4;26141:12;26172:18;26162:81;;26228:4;26220:6;26216:17;26206:27;;26162:81;26290:2;26282:6;26279:14;26259:18;26256:38;26253:84;;;26309:18;;:::i;:::-;26253:84;26074:269;26023:320;;;:::o;26349:148::-;26451:11;26488:3;26473:18;;26349:148;;;;:::o;26503:141::-;26552:4;26575:3;26567:11;;26598:3;26595:1;26588:14;26632:4;26629:1;26619:18;26611:26;;26503:141;;;:::o;26674:845::-;26777:3;26814:5;26808:12;26843:36;26869:9;26843:36;:::i;:::-;26895:89;26977:6;26972:3;26895:89;:::i;:::-;26888:96;;27015:1;27004:9;27000:17;27031:1;27026:137;;;;27177:1;27172:341;;;;26993:520;;27026:137;27110:4;27106:9;27095;27091:25;27086:3;27079:38;27146:6;27141:3;27137:16;27130:23;;27026:137;;27172:341;27239:38;27271:5;27239:38;:::i;:::-;27299:1;27313:154;27327:6;27324:1;27321:13;27313:154;;;27401:7;27395:14;27391:1;27386:3;27382:11;27375:35;27451:1;27442:7;27438:15;27427:26;;27349:4;27346:1;27342:12;27337:17;;27313:154;;;27496:6;27491:3;27487:16;27480:23;;27179:334;;26993:520;;26781:738;;26674:845;;;;:::o;27525:377::-;27631:3;27659:39;27692:5;27659:39;:::i;:::-;27714:89;27796:6;27791:3;27714:89;:::i;:::-;27707:96;;27812:52;27857:6;27852:3;27845:4;27838:5;27834:16;27812:52;:::i;:::-;27889:6;27884:3;27880:16;27873:23;;27635:267;27525:377;;;;:::o;27908:155::-;28048:7;28044:1;28036:6;28032:14;28025:31;27908:155;:::o;28069:400::-;28229:3;28250:84;28332:1;28327:3;28250:84;:::i;:::-;28243:91;;28343:93;28432:3;28343:93;:::i;:::-;28461:1;28456:3;28452:11;28445:18;;28069:400;;;:::o;28475:695::-;28753:3;28775:92;28863:3;28854:6;28775:92;:::i;:::-;28768:99;;28884:95;28975:3;28966:6;28884:95;:::i;:::-;28877:102;;28996:148;29140:3;28996:148;:::i;:::-;28989:155;;29161:3;29154:10;;28475:695;;;;;:::o;29176:229::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:12;29380:2;29372:6;29368:15;29361:37;29176:229;:::o;29411:366::-;29553:3;29574:67;29638:2;29633:3;29574:67;:::i;:::-;29567:74;;29650:93;29739:3;29650:93;:::i;:::-;29768:2;29763:3;29759:12;29752:19;;29411:366;;;:::o;29783:419::-;29949:4;29987:2;29976:9;29972:18;29964:26;;30036:9;30030:4;30026:20;30022:1;30011:9;30007:17;30000:47;30064:131;30190:4;30064:131;:::i;:::-;30056:139;;29783:419;;;:::o;30208:237::-;30348:34;30344:1;30336:6;30332:14;30325:58;30417:20;30412:2;30404:6;30400:15;30393:45;30208:237;:::o;30451:366::-;30593:3;30614:67;30678:2;30673:3;30614:67;:::i;:::-;30607:74;;30690:93;30779:3;30690:93;:::i;:::-;30808:2;30803:3;30799:12;30792:19;;30451:366;;;:::o;30823:419::-;30989:4;31027:2;31016:9;31012:18;31004:26;;31076:9;31070:4;31066:20;31062:1;31051:9;31047:17;31040:47;31104:131;31230:4;31104:131;:::i;:::-;31096:139;;30823:419;;;:::o;31248:228::-;31388:34;31384:1;31376:6;31372:14;31365:58;31457:11;31452:2;31444:6;31440:15;31433:36;31248:228;:::o;31482:366::-;31624:3;31645:67;31709:2;31704:3;31645:67;:::i;:::-;31638:74;;31721:93;31810:3;31721:93;:::i;:::-;31839:2;31834:3;31830:12;31823:19;;31482:366;;;:::o;31854:419::-;32020:4;32058:2;32047:9;32043:18;32035:26;;32107:9;32101:4;32097:20;32093:1;32082:9;32078:17;32071:47;32135:131;32261:4;32135:131;:::i;:::-;32127:139;;31854:419;;;:::o;32279:180::-;32327:77;32324:1;32317:88;32424:4;32421:1;32414:15;32448:4;32445:1;32438:15;32465:180;32513:77;32510:1;32503:88;32610:4;32607:1;32600:15;32634:4;32631:1;32624:15;32651:233;32690:3;32713:24;32731:5;32713:24;:::i;:::-;32704:33;;32759:66;32752:5;32749:77;32746:103;;;32829:18;;:::i;:::-;32746:103;32876:1;32869:5;32865:13;32858:20;;32651:233;;;:::o;32890:182::-;33030:34;33026:1;33018:6;33014:14;33007:58;32890:182;:::o;33078:366::-;33220:3;33241:67;33305:2;33300:3;33241:67;:::i;:::-;33234:74;;33317:93;33406:3;33317:93;:::i;:::-;33435:2;33430:3;33426:12;33419:19;;33078:366;;;:::o;33450:419::-;33616:4;33654:2;33643:9;33639:18;33631:26;;33703:9;33697:4;33693:20;33689:1;33678:9;33674:17;33667:47;33731:131;33857:4;33731:131;:::i;:::-;33723:139;;33450:419;;;:::o;33875:301::-;34015:34;34011:1;34003:6;33999:14;33992:58;34084:34;34079:2;34071:6;34067:15;34060:59;34153:15;34148:2;34140:6;34136:15;34129:40;33875:301;:::o;34182:366::-;34324:3;34345:67;34409:2;34404:3;34345:67;:::i;:::-;34338:74;;34421:93;34510:3;34421:93;:::i;:::-;34539:2;34534:3;34530:12;34523:19;;34182:366;;;:::o;34554:419::-;34720:4;34758:2;34747:9;34743:18;34735:26;;34807:9;34801:4;34797:20;34793:1;34782:9;34778:17;34771:47;34835:131;34961:4;34835:131;:::i;:::-;34827:139;;34554:419;;;:::o;34979:348::-;35019:7;35042:20;35060:1;35042:20;:::i;:::-;35037:25;;35076:20;35094:1;35076:20;:::i;:::-;35071:25;;35264:1;35196:66;35192:74;35189:1;35186:81;35181:1;35174:9;35167:17;35163:105;35160:131;;;35271:18;;:::i;:::-;35160:131;35319:1;35316;35312:9;35301:20;;34979:348;;;;:::o;35333:180::-;35473:32;35469:1;35461:6;35457:14;35450:56;35333:180;:::o;35519:366::-;35661:3;35682:67;35746:2;35741:3;35682:67;:::i;:::-;35675:74;;35758:93;35847:3;35758:93;:::i;:::-;35876:2;35871:3;35867:12;35860:19;;35519:366;;;:::o;35891:419::-;36057:4;36095:2;36084:9;36080:18;36072:26;;36144:9;36138:4;36134:20;36130:1;36119:9;36115:17;36108:47;36172:131;36298:4;36172:131;:::i;:::-;36164:139;;35891:419;;;:::o;36316:171::-;36456:23;36452:1;36444:6;36440:14;36433:47;36316:171;:::o;36493:366::-;36635:3;36656:67;36720:2;36715:3;36656:67;:::i;:::-;36649:74;;36732:93;36821:3;36732:93;:::i;:::-;36850:2;36845:3;36841:12;36834:19;;36493:366;;;:::o;36865:419::-;37031:4;37069:2;37058:9;37054:18;37046:26;;37118:9;37112:4;37108:20;37104:1;37093:9;37089:17;37082:47;37146:131;37272:4;37146:131;:::i;:::-;37138:139;;36865:419;;;:::o;37290:225::-;37430:34;37426:1;37418:6;37414:14;37407:58;37499:8;37494:2;37486:6;37482:15;37475:33;37290:225;:::o;37521:366::-;37663:3;37684:67;37748:2;37743:3;37684:67;:::i;:::-;37677:74;;37760:93;37849:3;37760:93;:::i;:::-;37878:2;37873:3;37869:12;37862:19;;37521:366;;;:::o;37893:419::-;38059:4;38097:2;38086:9;38082:18;38074:26;;38146:9;38140:4;38136:20;38132:1;38121:9;38117:17;38110:47;38174:131;38300:4;38174:131;:::i;:::-;38166:139;;37893:419;;;:::o;38318:117::-;38427:1;38424;38417:12;38441:117;38550:1;38547;38540:12;38564:117;38673:1;38670;38663:12;38687:740;38780:4;38786:6;38842:11;38829:25;38942:1;38936:4;38932:12;38921:8;38905:14;38901:29;38897:48;38877:18;38873:73;38863:168;;38950:79;;:::i;:::-;38863:168;39062:18;39052:8;39048:33;39040:41;;39114:4;39101:18;39091:28;;39142:18;39134:6;39131:30;39128:117;;;39164:79;;:::i;:::-;39128:117;39272:2;39266:4;39262:13;39254:21;;39329:4;39321:6;39317:17;39301:14;39297:38;39291:4;39287:49;39284:136;;;39339:79;;:::i;:::-;39284:136;38793:634;38687:740;;;;;:::o;39433:170::-;39573:22;39569:1;39561:6;39557:14;39550:46;39433:170;:::o;39609:366::-;39751:3;39772:67;39836:2;39831:3;39772:67;:::i;:::-;39765:74;;39848:93;39937:3;39848:93;:::i;:::-;39966:2;39961:3;39957:12;39950:19;;39609:366;;;:::o;39981:419::-;40147:4;40185:2;40174:9;40170:18;40162:26;;40234:9;40228:4;40224:20;40220:1;40209:9;40205:17;40198:47;40262:131;40388:4;40262:131;:::i;:::-;40254:139;;39981:419;;;:::o;40430:317::-;40546:3;40567:89;40649:6;40644:3;40567:89;:::i;:::-;40560:96;;40666:43;40702:6;40697:3;40690:5;40666:43;:::i;:::-;40734:6;40729:3;40725:16;40718:23;;40430:317;;;;;:::o;40753:295::-;40895:3;40917:105;41018:3;41009:6;41001;40917:105;:::i;:::-;40910:112;;41039:3;41032:10;;40753:295;;;;;:::o;41054:269::-;41183:3;41205:92;41293:3;41284:6;41205:92;:::i;:::-;41198:99;;41314:3;41307:10;;41054:269;;;;:::o;41329:222::-;41469:34;41465:1;41457:6;41453:14;41446:58;41538:5;41533:2;41525:6;41521:15;41514:30;41329:222;:::o;41557:366::-;41699:3;41720:67;41784:2;41779:3;41720:67;:::i;:::-;41713:74;;41796:93;41885:3;41796:93;:::i;:::-;41914:2;41909:3;41905:12;41898:19;;41557:366;;;:::o;41929:419::-;42095:4;42133:2;42122:9;42118:18;42110:26;;42182:9;42176:4;42172:20;42168:1;42157:9;42153:17;42146:47;42210:131;42336:4;42210:131;:::i;:::-;42202:139;;41929:419;;;:::o;42354:228::-;42494:34;42490:1;42482:6;42478:14;42471:58;42563:11;42558:2;42550:6;42546:15;42539:36;42354:228;:::o;42588:366::-;42730:3;42751:67;42815:2;42810:3;42751:67;:::i;:::-;42744:74;;42827:93;42916:3;42827:93;:::i;:::-;42945:2;42940:3;42936:12;42929:19;;42588:366;;;:::o;42960:419::-;43126:4;43164:2;43153:9;43149:18;43141:26;;43213:9;43207:4;43203:20;43199:1;43188:9;43184:17;43177:47;43241:131;43367:4;43241:131;:::i;:::-;43233:139;;42960:419;;;:::o;43385:228::-;43525:34;43521:1;43513:6;43509:14;43502:58;43594:11;43589:2;43581:6;43577:15;43570:36;43385:228;:::o;43619:366::-;43761:3;43782:67;43846:2;43841:3;43782:67;:::i;:::-;43775:74;;43858:93;43947:3;43858:93;:::i;:::-;43976:2;43971:3;43967:12;43960:19;;43619:366;;;:::o;43991:419::-;44157:4;44195:2;44184:9;44180:18;44172:26;;44244:9;44238:4;44234:20;44230:1;44219:9;44215:17;44208:47;44272:131;44398:4;44272:131;:::i;:::-;44264:139;;43991:419;;;:::o;44416:225::-;44556:34;44552:1;44544:6;44540:14;44533:58;44625:8;44620:2;44612:6;44608:15;44601:33;44416:225;:::o;44647:366::-;44789:3;44810:67;44874:2;44869:3;44810:67;:::i;:::-;44803:74;;44886:93;44975:3;44886:93;:::i;:::-;45004:2;44999:3;44995:12;44988:19;;44647:366;;;:::o;45019:419::-;45185:4;45223:2;45212:9;45208:18;45200:26;;45272:9;45266:4;45262:20;45258:1;45247:9;45243:17;45236:47;45300:131;45426:4;45300:131;:::i;:::-;45292:139;;45019:419;;;:::o;45444:180::-;45492:77;45489:1;45482:88;45589:4;45586:1;45579:15;45613:4;45610:1;45603:15;45630:185;45670:1;45687:20;45705:1;45687:20;:::i;:::-;45682:25;;45721:20;45739:1;45721:20;:::i;:::-;45716:25;;45760:1;45750:35;;45765:18;;:::i;:::-;45750:35;45807:1;45804;45800:9;45795:14;;45630:185;;;;:::o;45821:191::-;45861:4;45881:20;45899:1;45881:20;:::i;:::-;45876:25;;45915:20;45933:1;45915:20;:::i;:::-;45910:25;;45954:1;45951;45948:8;45945:34;;;45959:18;;:::i;:::-;45945:34;46004:1;46001;45997:9;45989:17;;45821:191;;;;:::o;46018:176::-;46050:1;46067:20;46085:1;46067:20;:::i;:::-;46062:25;;46101:20;46119:1;46101:20;:::i;:::-;46096:25;;46140:1;46130:35;;46145:18;;:::i;:::-;46130:35;46186:1;46183;46179:9;46174:14;;46018:176;;;;:::o;46200:305::-;46240:3;46259:20;46277:1;46259:20;:::i;:::-;46254:25;;46293:20;46311:1;46293:20;:::i;:::-;46288:25;;46447:1;46379:66;46375:74;46372:1;46369:81;46366:107;;;46453:18;;:::i;:::-;46366:107;46497:1;46494;46490:9;46483:16;;46200:305;;;;:::o;46511:227::-;46651:34;46647:1;46639:6;46635:14;46628:58;46720:10;46715:2;46707:6;46703:15;46696:35;46511:227;:::o;46744:366::-;46886:3;46907:67;46971:2;46966:3;46907:67;:::i;:::-;46900:74;;46983:93;47072:3;46983:93;:::i;:::-;47101:2;47096:3;47092:12;47085:19;;46744:366;;;:::o;47116:419::-;47282:4;47320:2;47309:9;47305:18;47297:26;;47369:9;47363:4;47359:20;47355:1;47344:9;47340:17;47333:47;47397:131;47523:4;47397:131;:::i;:::-;47389:139;;47116:419;;;:::o;47541:224::-;47681:34;47677:1;47669:6;47665:14;47658:58;47750:7;47745:2;47737:6;47733:15;47726:32;47541:224;:::o;47771:366::-;47913:3;47934:67;47998:2;47993:3;47934:67;:::i;:::-;47927:74;;48010:93;48099:3;48010:93;:::i;:::-;48128:2;48123:3;48119:12;48112:19;;47771:366;;;:::o;48143:419::-;48309:4;48347:2;48336:9;48332:18;48324:26;;48396:9;48390:4;48386:20;48382:1;48371:9;48367:17;48360:47;48424:131;48550:4;48424:131;:::i;:::-;48416:139;;48143:419;;;:::o;48568:229::-;48708:34;48704:1;48696:6;48692:14;48685:58;48777:12;48772:2;48764:6;48760:15;48753:37;48568:229;:::o;48803:366::-;48945:3;48966:67;49030:2;49025:3;48966:67;:::i;:::-;48959:74;;49042:93;49131:3;49042:93;:::i;:::-;49160:2;49155:3;49151:12;49144:19;;48803:366;;;:::o;49175:419::-;49341:4;49379:2;49368:9;49364:18;49356:26;;49428:9;49422:4;49418:20;49414:1;49403:9;49399:17;49392:47;49456:131;49582:4;49456:131;:::i;:::-;49448:139;;49175:419;;;:::o;49600:634::-;49821:4;49859:2;49848:9;49844:18;49836:26;;49908:9;49902:4;49898:20;49894:1;49883:9;49879:17;49872:47;49936:108;50039:4;50030:6;49936:108;:::i;:::-;49928:116;;50091:9;50085:4;50081:20;50076:2;50065:9;50061:18;50054:48;50119:108;50222:4;50213:6;50119:108;:::i;:::-;50111:116;;49600:634;;;;;:::o;50240:220::-;50380:34;50376:1;50368:6;50364:14;50357:58;50449:3;50444:2;50436:6;50432:15;50425:28;50240:220;:::o;50466:366::-;50608:3;50629:67;50693:2;50688:3;50629:67;:::i;:::-;50622:74;;50705:93;50794:3;50705:93;:::i;:::-;50823:2;50818:3;50814:12;50807:19;;50466:366;;;:::o;50838:419::-;51004:4;51042:2;51031:9;51027:18;51019:26;;51091:9;51085:4;51081:20;51077:1;51066:9;51062:17;51055:47;51119:131;51245:4;51119:131;:::i;:::-;51111:139;;50838:419;;;:::o;51263:332::-;51384:4;51422:2;51411:9;51407:18;51399:26;;51435:71;51503:1;51492:9;51488:17;51479:6;51435:71;:::i;:::-;51516:72;51584:2;51573:9;51569:18;51560:6;51516:72;:::i;:::-;51263:332;;;;;:::o;51601:98::-;51652:6;51686:5;51680:12;51670:22;;51601:98;;;:::o;51705:168::-;51788:11;51822:6;51817:3;51810:19;51862:4;51857:3;51853:14;51838:29;;51705:168;;;;:::o;51879:360::-;51965:3;51993:38;52025:5;51993:38;:::i;:::-;52047:70;52110:6;52105:3;52047:70;:::i;:::-;52040:77;;52126:52;52171:6;52166:3;52159:4;52152:5;52148:16;52126:52;:::i;:::-;52203:29;52225:6;52203:29;:::i;:::-;52198:3;52194:39;52187:46;;51969:270;51879:360;;;;:::o;52245:1053::-;52568:4;52606:3;52595:9;52591:19;52583:27;;52620:71;52688:1;52677:9;52673:17;52664:6;52620:71;:::i;:::-;52701:72;52769:2;52758:9;52754:18;52745:6;52701:72;:::i;:::-;52820:9;52814:4;52810:20;52805:2;52794:9;52790:18;52783:48;52848:108;52951:4;52942:6;52848:108;:::i;:::-;52840:116;;53003:9;52997:4;52993:20;52988:2;52977:9;52973:18;52966:48;53031:108;53134:4;53125:6;53031:108;:::i;:::-;53023:116;;53187:9;53181:4;53177:20;53171:3;53160:9;53156:19;53149:49;53215:76;53286:4;53277:6;53215:76;:::i;:::-;53207:84;;52245:1053;;;;;;;;:::o;53304:141::-;53360:5;53391:6;53385:13;53376:22;;53407:32;53433:5;53407:32;:::i;:::-;53304:141;;;;:::o;53451:349::-;53520:6;53569:2;53557:9;53548:7;53544:23;53540:32;53537:119;;;53575:79;;:::i;:::-;53537:119;53695:1;53720:63;53775:7;53766:6;53755:9;53751:22;53720:63;:::i;:::-;53710:73;;53666:127;53451:349;;;;:::o;53806:106::-;53850:8;53899:5;53894:3;53890:15;53869:36;;53806:106;;;:::o;53918:183::-;53953:3;53991:1;53973:16;53970:23;53967:128;;;54029:1;54026;54023;54008:23;54051:34;54082:1;54076:8;54051:34;:::i;:::-;54044:41;;53967:128;53918:183;:::o;54107:711::-;54146:3;54184:4;54166:16;54163:26;54160:39;;;54192:5;;54160:39;54221:20;;:::i;:::-;54296:1;54278:16;54274:24;54271:1;54265:4;54250:49;54329:4;54323:11;54428:16;54421:4;54413:6;54409:17;54406:39;54373:18;54365:6;54362:30;54346:113;54343:146;;;54474:5;;;;54343:146;54520:6;54514:4;54510:17;54556:3;54550:10;54583:18;54575:6;54572:30;54569:43;;;54605:5;;;;;;54569:43;54653:6;54646:4;54641:3;54637:14;54633:27;54712:1;54694:16;54690:24;54684:4;54680:35;54675:3;54672:44;54669:57;;;54719:5;;;;;;;54669:57;54736;54784:6;54778:4;54774:17;54766:6;54762:30;54756:4;54736:57;:::i;:::-;54809:3;54802:10;;54150:668;;;;;54107:711;;:::o;54824:239::-;54964:34;54960:1;54952:6;54948:14;54941:58;55033:22;55028:2;55020:6;55016:15;55009:47;54824:239;:::o;55069:366::-;55211:3;55232:67;55296:2;55291:3;55232:67;:::i;:::-;55225:74;;55308:93;55397:3;55308:93;:::i;:::-;55426:2;55421:3;55417:12;55410:19;;55069:366;;;:::o;55441:419::-;55607:4;55645:2;55634:9;55630:18;55622:26;;55694:9;55688:4;55684:20;55680:1;55669:9;55665:17;55658:47;55722:131;55848:4;55722:131;:::i;:::-;55714:139;;55441:419;;;:::o;55866:227::-;56006:34;56002:1;55994:6;55990:14;55983:58;56075:10;56070:2;56062:6;56058:15;56051:35;55866:227;:::o;56099:366::-;56241:3;56262:67;56326:2;56321:3;56262:67;:::i;:::-;56255:74;;56338:93;56427:3;56338:93;:::i;:::-;56456:2;56451:3;56447:12;56440:19;;56099:366;;;:::o;56471:419::-;56637:4;56675:2;56664:9;56660:18;56652:26;;56724:9;56718:4;56714:20;56710:1;56699:9;56695:17;56688:47;56752:131;56878:4;56752:131;:::i;:::-;56744:139;;56471:419;;;:::o;56896:751::-;57119:4;57157:3;57146:9;57142:19;57134:27;;57171:71;57239:1;57228:9;57224:17;57215:6;57171:71;:::i;:::-;57252:72;57320:2;57309:9;57305:18;57296:6;57252:72;:::i;:::-;57334;57402:2;57391:9;57387:18;57378:6;57334:72;:::i;:::-;57416;57484:2;57473:9;57469:18;57460:6;57416:72;:::i;:::-;57536:9;57530:4;57526:20;57520:3;57509:9;57505:19;57498:49;57564:76;57635:4;57626:6;57564:76;:::i;:::-;57556:84;;56896:751;;;;;;;;:::o

Swarm Source

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