ETH Price: $3,155.47 (+1.14%)
Gas: 2 Gwei

Token

 

Overview

Max Total Supply

0

Holders

254

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xa8e61e09e297ffdf78104e004905006cf1d96495
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:
ADWKeys

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-01
*/

// SPDX-License-Identifier: MIT

// Sources flattened with hardhat v2.13.0 https://hardhat.org

// File @openzeppelin/contracts/utils/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File @openzeppelin/contracts/access/[email protected]

// OpenZeppelin Contracts v4.4.1 (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() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts v4.4.1 (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/contracts/token/ERC1155/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (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/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (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.
     *
     * NOTE: 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.
     *
     * NOTE: 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/contracts/utils/[email protected]

// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File @openzeppelin/contracts/utils/introspection/[email protected]

// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

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

// File @openzeppelin/contracts/token/ERC1155/[email protected]

// OpenZeppelin Contracts (last updated v4.6.0) (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 {
        _setApprovalForAll(_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();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, 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);

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

        _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);

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

        _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 `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

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

        _doSafeTransferAcceptanceCheck(
            operator,
            address(0),
            to,
            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);

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

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

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

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

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

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

        address operator = _msgSender();

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

        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: burn amount exceeds balance"
            );
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

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

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

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

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

    /**
     * @dev Hook that is called after 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 _afterTokenTransfer(
        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 @openzeppelin/contracts/token/ERC1155/extensions/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/ERC1155Burnable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(address account, uint256 id, uint256 value) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File @openzeppelin/contracts/token/ERC1155/extensions/[email protected]

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(
                    supply >= amount,
                    "ERC1155: burn amount exceeds totalSupply"
                );
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

// File contracts/ADWKeysNoUpgrade.sol

pragma solidity ^0.8.17;

// import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";

// import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155URIStorage.sol";

contract ADWKeys is Ownable, ERC1155Burnable, ERC1155Supply {
    uint256 public constant BASIC = 0;
    uint256 public constant DRIPPY = 1;
    uint256 public constant LEGENDARY = 2;
    uint256 public constant MYTHIC = 3;

    uint256 public basicPrice;
    uint256 public maxBasicAmount;

    uint256 public totalMintedBasic;

    bool public saleIsActive;

    constructor() ERC1155("") {
        basicPrice = 0.03 ether;
        maxBasicAmount = 3333;
        totalMintedBasic = 0;
        saleIsActive = false;

        mint(msg.sender, LEGENDARY, 10);
    }

    function setBaseMetadataURI(
        string memory _newBaseMetadataURI
    ) public onlyOwner {
        _setURI(_newBaseMetadataURI);
    }

    function mintBasic(uint256 amount) external payable {
        require(saleIsActive, "Sale not started");
        require(msg.value >= basicPrice * amount, "Invalid value");

        _mint(msg.sender, BASIC, amount, "");
        require(totalMintedBasic < maxBasicAmount, "Exceeds supply");
        // totalSupply(BASIC) will increment back after burning
        totalMintedBasic += amount;
    }

    function setBasicSupply(uint256 amount) external onlyOwner {
        maxBasicAmount = amount;
    }

    function setBasicPrice(uint256 newPrice) external onlyOwner {
        basicPrice = newPrice;
    }

    function flipSaleState() external onlyOwner {
        saleIsActive = !saleIsActive;
    }

    function mint(
        address account,
        uint256 id,
        uint256 amount
    ) public onlyOwner {
        _mint(account, id, amount, "");
    }

    function mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts
    ) public onlyOwner {
        _mintBatch(to, ids, amounts, "");
    }

    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override(ERC1155, ERC1155Supply) {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    function calculateBurnAmount(
        uint256 tokenId,
        uint256 finalItemId,
        uint256 wantedAmount
    ) internal pure returns (uint256) {
        return wantedAmount * 2 ** (finalItemId - tokenId);
    }

    function forge(
        uint256 tokenId,
        uint256 finalItemId,
        uint256 burnAmount,
        uint256 wantedAmount
    ) public {
        require(tokenId < finalItemId, "Invalid");
        require(
            calculateBurnAmount(tokenId, finalItemId, wantedAmount) ==
                burnAmount,
            "Invalid"
        );
        require(balanceOf(msg.sender, tokenId) >= burnAmount, "Invalid Keys");
        burn(msg.sender, tokenId, burnAmount);
        _mint(msg.sender, finalItemId, wantedAmount, "");
    }

    function withdrawMoney() external onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Failed");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[],"name":"BASIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DRIPPY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LEGENDARY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MYTHIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"basicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"finalItemId","type":"uint256"},{"internalType":"uint256","name":"burnAmount","type":"uint256"},{"internalType":"uint256","name":"wantedAmount","type":"uint256"}],"name":"forge","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":"maxBasicAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintBasic","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setBasicPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setBasicSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMintedBasic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawMoney","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b50604051806020016040528060008152506200004262000036620000a960201b60201c565b620000b160201b60201c565b62000053816200017560201b60201c565b50666a94d74f430000600581905550610d0560068190555060006007819055506000600860006101000a81548160ff021916908315150217905550620000a3336002600a6200018a60201b60201c565b620013cb565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806003908162000186919062000b94565b5050565b6200019a620000a960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620001c06200024160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002109062000cdc565b60405180910390fd5b6200023c838383604051806020016040528060008152506200026a60201b60201c565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620002dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002d39062000d74565b60405180910390fd5b6000620002ee620000a960201b60201c565b9050600062000303856200045260201b60201c565b9050600062000318856200045260201b60201c565b90506200033183600089858589620004d360201b60201c565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000393919062000dc5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516200041392919062000e11565b60405180910390a46200043283600089858589620004f660201b60201c565b6200044983600089898989620004fe60201b60201c565b50505050505050565b60606000600167ffffffffffffffff81111562000474576200047362000925565b5b604051908082528060200260200182016040528015620004a35781602001602082028036833780820191505090505b5090508281600081518110620004be57620004bd62000e3e565b5b60200260200101818152505080915050919050565b620004ee868686868686620006f760201b620016b41760201c565b505050505050565b505050505050565b6200052a8473ffffffffffffffffffffffffffffffffffffffff16620008ef60201b620018841760201c565b15620006ef578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016200057395949392919062000f4c565b6020604051808303816000875af1925050508015620005b257506040513d601f19601f82011682018060405250810190620005af91906200101c565b60015b6200066357620005c16200105b565b806308c379a003620006245750620005d8620010b6565b80620005e5575062000626565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200061b919062001192565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200065a906200122c565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614620006ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e490620012c4565b60405180910390fd5b505b505050505050565b620007128686868686866200091260201b620018a71760201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620007d05760005b8351811015620007ce578281815181106200076a576200076962000e3e565b5b6020026020010151600460008684815181106200078c576200078b62000e3e565b5b602002602001015181526020019081526020016000206000828254620007b3919062000dc5565b9250508190555080620007c690620012e6565b90506200074a565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603620008e75760005b8351811015620008e55760008482815181106200082a576200082962000e3e565b5b6020026020010151905060008483815181106200084c576200084b62000e3e565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015620008b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ab90620013a9565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080620008dd90620012e6565b905062000808565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099c57607f821691505b602082108103620009b257620009b162000954565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009dd565b62000a288683620009dd565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a7562000a6f62000a698462000a40565b62000a4a565b62000a40565b9050919050565b6000819050919050565b62000a918362000a54565b62000aa962000aa08262000a7c565b848454620009ea565b825550505050565b600090565b62000ac062000ab1565b62000acd81848462000a86565b505050565b5b8181101562000af55762000ae960008262000ab6565b60018101905062000ad3565b5050565b601f82111562000b445762000b0e81620009b8565b62000b1984620009cd565b8101602085101562000b29578190505b62000b4162000b3885620009cd565b83018262000ad2565b50505b505050565b600082821c905092915050565b600062000b696000198460080262000b49565b1980831691505092915050565b600062000b84838362000b56565b9150826002028217905092915050565b62000b9f826200091a565b67ffffffffffffffff81111562000bbb5762000bba62000925565b5b62000bc7825462000983565b62000bd482828562000af9565b600060209050601f83116001811462000c0c576000841562000bf7578287015190505b62000c03858262000b76565b86555062000c73565b601f19841662000c1c86620009b8565b60005b8281101562000c465784890151825560018201915060208501945060208101905062000c1f565b8683101562000c66578489015162000c62601f89168262000b56565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000cc460208362000c7b565b915062000cd18262000c8c565b602082019050919050565b6000602082019050818103600083015262000cf78162000cb5565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600062000d5c60218362000c7b565b915062000d698262000cfe565b604082019050919050565b6000602082019050818103600083015262000d8f8162000d4d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd28262000a40565b915062000ddf8362000a40565b925082820190508082111562000dfa5762000df962000d96565b5b92915050565b62000e0b8162000a40565b82525050565b600060408201905062000e28600083018562000e00565b62000e37602083018462000e00565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e9a8262000e6d565b9050919050565b62000eac8162000e8d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000eee57808201518184015260208101905062000ed1565b60008484015250505050565b6000601f19601f8301169050919050565b600062000f188262000eb2565b62000f24818562000ebd565b935062000f3681856020860162000ece565b62000f418162000efa565b840191505092915050565b600060a08201905062000f63600083018862000ea1565b62000f72602083018762000ea1565b62000f81604083018662000e00565b62000f90606083018562000e00565b818103608083015262000fa4818462000f0b565b90509695505050505050565b6000604051905090565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62000ff68162000fbf565b81146200100257600080fd5b50565b600081519050620010168162000feb565b92915050565b60006020828403121562001035576200103462000fba565b5b6000620010458482850162001005565b91505092915050565b60008160e01c9050919050565b600060033d11156200107d5760046000803e6200107a6000516200104e565b90505b90565b6200108b8262000efa565b810181811067ffffffffffffffff82111715620010ad57620010ac62000925565b5b80604052505050565b600060443d106200114e57620010cb62000fb0565b60043d036004823e80513d602482011167ffffffffffffffff82111715620010f55750506200114e565b808201805167ffffffffffffffff8111156200111557505050506200114e565b80602083010160043d038501811115620011345750505050506200114e565b620011458260200185018662001080565b82955050505050505b90565b60006200115e826200091a565b6200116a818562000c7b565b93506200117c81856020860162000ece565b620011878162000efa565b840191505092915050565b60006020820190508181036000830152620011ae818462001151565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006200121460348362000c7b565b91506200122182620011b6565b604082019050919050565b60006020820190508181036000830152620012478162001205565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000620012ac60288362000c7b565b9150620012b9826200124e565b604082019050919050565b60006020820190508181036000830152620012df816200129d565b9050919050565b6000620012f38262000a40565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362001328576200132762000d96565b5b600182019050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006200139160288362000c7b565b91506200139e8262001333565b604082019050919050565b60006020820190508181036000830152620013c48162001382565b9050919050565b614e0e80620013db6000396000f3fe6080604052600436106101e25760003560e01c80638da5cb5b11610102578063d81d0a1511610095578063eb8d244411610064578063eb8d2444146106bc578063f242432a146106e7578063f2fde38b14610710578063f5298aca14610739576101e2565b8063d81d0a1514610600578063db9191dd14610629578063e140d1e114610654578063e985e9c51461067f576101e2565b8063ae3a26bc116100d1578063ae3a26bc14610544578063b219693a1461056f578063b89870b414610598578063bd85b039146105c3576101e2565b80638da5cb5b146104ae5780639382b6f0146104d9578063a22cb46514610504578063ac4460021461052d576101e2565b806334918dfd1161017a57806365aa18b11161014957806365aa18b1146104295780636b20c45414610445578063715018a61461046e5780637e518ec814610485576101e2565b806334918dfd1461036d578063384d57b5146103845780634e1273f4146103af5780634f558e79146103ec576101e2565b806314f8cdd3116101b657806314f8cdd3146102c7578063156e29f6146102f2578063247a498b1461031b5780632eb2c2d614610344576101e2565b8062fdd58e146101e757806301ffc9a7146102245780630886c8c4146102615780630e89341c1461028a575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190612f38565b610762565b60405161021b9190612f87565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612ffa565b61082b565b6040516102589190613042565b60405180910390f35b34801561026d57600080fd5b506102886004803603810190610283919061305d565b61090d565b005b34801561029657600080fd5b506102b160048036038101906102ac91906130c4565b610a13565b6040516102be9190613181565b60405180910390f35b3480156102d357600080fd5b506102dc610aa7565b6040516102e99190612f87565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906131a3565b610aad565b005b34801561032757600080fd5b50610342600480360381019061033d91906130c4565b610b49565b005b34801561035057600080fd5b5061036b600480360381019061036691906133f3565b610bcf565b005b34801561037957600080fd5b50610382610c70565b005b34801561039057600080fd5b50610399610d18565b6040516103a69190612f87565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613585565b610d1d565b6040516103e391906136bb565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906130c4565b610e36565b6040516104209190613042565b60405180910390f35b610443600480360381019061043e91906130c4565b610e4a565b005b34801561045157600080fd5b5061046c600480360381019061046791906136dd565b610f67565b005b34801561047a57600080fd5b50610483611004565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613809565b61108c565b005b3480156104ba57600080fd5b506104c3611114565b6040516104d09190613861565b60405180910390f35b3480156104e557600080fd5b506104ee61113d565b6040516104fb9190612f87565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906138a8565b611142565b005b34801561053957600080fd5b50610542611158565b005b34801561055057600080fd5b50610559611283565b6040516105669190612f87565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906130c4565b611288565b005b3480156105a457600080fd5b506105ad61130e565b6040516105ba9190612f87565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e591906130c4565b611314565b6040516105f79190612f87565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906136dd565b611331565b005b34801561063557600080fd5b5061063e6113cd565b60405161064b9190612f87565b60405180910390f35b34801561066057600080fd5b506106696113d3565b6040516106769190612f87565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906138e8565b6113d8565b6040516106b39190613042565b60405180910390f35b3480156106c857600080fd5b506106d161146c565b6040516106de9190613042565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613928565b61147f565b005b34801561071c57600080fd5b50610737600480360381019061073291906139bf565b611520565b005b34801561074557600080fd5b50610760600480360381019061075b91906131a3565b611617565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c990613a5e565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109065750610905826118af565b5b9050919050565b82841061094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613aca565b60405180910390fd5b8161095b858584611919565b1461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613aca565b60405180910390fd5b816109a63386610762565b10156109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de90613b36565b60405180910390fd5b6109f2338584611617565b610a0d33848360405180602001604052806000815250611947565b50505050565b606060038054610a2290613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90613b85565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b50505050509050919050565b60065481565b610ab5611af8565b73ffffffffffffffffffffffffffffffffffffffff16610ad3611114565b73ffffffffffffffffffffffffffffffffffffffff1614610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613c02565b60405180910390fd5b610b4483838360405180602001604052806000815250611947565b505050565b610b51611af8565b73ffffffffffffffffffffffffffffffffffffffff16610b6f611114565b73ffffffffffffffffffffffffffffffffffffffff1614610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613c02565b60405180910390fd5b8060068190555050565b610bd7611af8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c1d5750610c1c85610c17611af8565b6113d8565b5b610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613c94565b60405180910390fd5b610c698585858585611b00565b5050505050565b610c78611af8565b73ffffffffffffffffffffffffffffffffffffffff16610c96611114565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613c02565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600081565b60608151835114610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613d26565b60405180910390fd5b6000835167ffffffffffffffff811115610d8057610d7f6131fb565b5b604051908082528060200260200182016040528015610dae5781602001602082028036833780820191505090505b50905060005b8451811015610e2b57610dfb858281518110610dd357610dd2613d46565b5b6020026020010151858381518110610dee57610ded613d46565b5b6020026020010151610762565b828281518110610e0e57610e0d613d46565b5b60200260200101818152505080610e2490613da4565b9050610db4565b508091505092915050565b600080610e4283611314565b119050919050565b600860009054906101000a900460ff16610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613e38565b60405180910390fd5b80600554610ea79190613e58565b341015610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090613ee6565b60405180910390fd5b610f053360008360405180602001604052806000815250611947565b60065460075410610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613f52565b60405180910390fd5b8060076000828254610f5d9190613f72565b9250508190555050565b610f6f611af8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb55750610fb483610faf611af8565b6113d8565b5b610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614018565b60405180910390fd5b610fff838383611e24565b505050565b61100c611af8565b73ffffffffffffffffffffffffffffffffffffffff1661102a611114565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c02565b60405180910390fd5b61108a60006120f4565b565b611094611af8565b73ffffffffffffffffffffffffffffffffffffffff166110b2611114565b73ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90613c02565b60405180910390fd5b611111816121b8565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b61115461114d611af8565b83836121cb565b5050565b611160611af8565b73ffffffffffffffffffffffffffffffffffffffff1661117e611114565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90613c02565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111fa90614069565b60006040518083038185875af1925050503d8060008114611237576040519150601f19603f3d011682016040523d82523d6000602084013e61123c565b606091505b5050905080611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906140ca565b60405180910390fd5b50565b600181565b611290611af8565b73ffffffffffffffffffffffffffffffffffffffff166112ae611114565b73ffffffffffffffffffffffffffffffffffffffff1614611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613c02565b60405180910390fd5b8060058190555050565b60075481565b600060046000838152602001908152602001600020549050919050565b611339611af8565b73ffffffffffffffffffffffffffffffffffffffff16611357611114565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613c02565b60405180910390fd5b6113c883838360405180602001604052806000815250612337565b505050565b60055481565b600281565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900460ff1681565b611487611af8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114cd57506114cc856114c7611af8565b6113d8565b5b61150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390614018565b60405180910390fd5b6115198585858585612564565b5050505050565b611528611af8565b73ffffffffffffffffffffffffffffffffffffffff16611546611114565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061415c565b60405180910390fd5b611614816120f4565b50565b61161f611af8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061166557506116648361165f611af8565b6113d8565b5b6116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614018565b60405180910390fd5b6116af838383612802565b505050565b6116c28686868686866118a7565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036117735760005b83518110156117715782818151811061171557611714613d46565b5b60200260200101516004600086848151811061173457611733613d46565b5b6020026020010151815260200190815260200160002060008282546117599190613f72565b925050819055508061176a90613da4565b90506116f9565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361187c5760005b835181101561187a5760008482815181106117c8576117c7613d46565b5b6020026020010151905060008483815181106117e7576117e6613d46565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906141ee565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061187390613da4565b90506117aa565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008383611927919061420e565b60026119339190614375565b8261193e9190613e58565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614432565b60405180910390fd5b60006119c0611af8565b905060006119cd85612a4a565b905060006119da85612a4a565b90506119eb83600089858589612ac4565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a4b9190613f72565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ac9929190614452565b60405180910390a4611ae083600089858589612ada565b611aef83600089898989612ae2565b50505050505050565b600033905090565b8151835114611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b906144ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061457f565b60405180910390fd5b6000611bbd611af8565b9050611bcd818787878787612ac4565b60005b8451811015611d81576000858281518110611bee57611bed613d46565b5b602002602001015190506000858381518110611c0d57611c0c613d46565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690614611565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d669190613f72565b9250508190555050505080611d7a90613da4565b9050611bd0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611df8929190614631565b60405180910390a4611e0e818787878787612ada565b611e1c818787878787612cb9565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a906146da565b60405180910390fd5b8051825114611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906144ed565b60405180910390fd5b6000611ee1611af8565b9050611f0181856000868660405180602001604052806000815250612ac4565b60005b8351811015612050576000848281518110611f2257611f21613d46565b5b602002602001015190506000848381518110611f4157611f40613d46565b5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061476c565b60405180910390fd5b8181036001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061204890613da4565b915050611f04565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516120c8929190614631565b60405180910390a46120ee81856000868660405180602001604052806000815250612ada565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600390816121c79190614938565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614a7c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232a9190613042565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614432565b60405180910390fd5b81518351146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e1906144ed565b60405180910390fd5b60006123f4611af8565b905061240581600087878787612ac4565b60005b84518110156124bf5783818151811061242457612423613d46565b5b60200260200101516001600087848151811061244357612442613d46565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a59190613f72565b9250508190555080806124b790613da4565b915050612408565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612537929190614631565b60405180910390a461254e81600087878787612ada565b61255d81600087878787612cb9565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca9061457f565b60405180910390fd5b60006125dd611af8565b905060006125ea85612a4a565b905060006125f785612a4a565b9050612607838989858589612ac4565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690614611565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127569190613f72565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516127d3929190614452565b60405180910390a46127e9848a8a86868a612ada565b6127f7848a8a8a8a8a612ae2565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612868906146da565b60405180910390fd5b600061287b611af8565b9050600061288884612a4a565b9050600061289584612a4a565b90506128b583876000858560405180602001604052806000815250612ac4565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561294d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129449061476c565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a1b929190614452565b60405180910390a4612a4184886000868660405180602001604052806000815250612ada565b50505050505050565b60606000600167ffffffffffffffff811115612a6957612a686131fb565b5b604051908082528060200260200182016040528015612a975781602001602082028036833780820191505090505b5090508281600081518110612aaf57612aae613d46565b5b60200260200101818152505080915050919050565b612ad28686868686866116b4565b505050505050565b505050505050565b612b018473ffffffffffffffffffffffffffffffffffffffff16611884565b15612cb1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b47959493929190614af1565b6020604051808303816000875af1925050508015612b8357506040513d601f19601f82011682018060405250810190612b809190614b60565b60015b612c2857612b8f614b9a565b806308c379a003612beb5750612ba3614bbc565b80612bae5750612bed565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be29190613181565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f90614cbe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614d50565b60405180910390fd5b505b505050505050565b612cd88473ffffffffffffffffffffffffffffffffffffffff16611884565b15612e88578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612d1e959493929190614d70565b6020604051808303816000875af1925050508015612d5a57506040513d601f19601f82011682018060405250810190612d579190614b60565b60015b612dff57612d66614b9a565b806308c379a003612dc25750612d7a614bbc565b80612d855750612dc4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db99190613181565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df690614cbe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614d50565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ecf82612ea4565b9050919050565b612edf81612ec4565b8114612eea57600080fd5b50565b600081359050612efc81612ed6565b92915050565b6000819050919050565b612f1581612f02565b8114612f2057600080fd5b50565b600081359050612f3281612f0c565b92915050565b60008060408385031215612f4f57612f4e612e9a565b5b6000612f5d85828601612eed565b9250506020612f6e85828601612f23565b9150509250929050565b612f8181612f02565b82525050565b6000602082019050612f9c6000830184612f78565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd781612fa2565b8114612fe257600080fd5b50565b600081359050612ff481612fce565b92915050565b6000602082840312156130105761300f612e9a565b5b600061301e84828501612fe5565b91505092915050565b60008115159050919050565b61303c81613027565b82525050565b60006020820190506130576000830184613033565b92915050565b6000806000806080858703121561307757613076612e9a565b5b600061308587828801612f23565b945050602061309687828801612f23565b93505060406130a787828801612f23565b92505060606130b887828801612f23565b91505092959194509250565b6000602082840312156130da576130d9612e9a565b5b60006130e884828501612f23565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561312b578082015181840152602081019050613110565b60008484015250505050565b6000601f19601f8301169050919050565b6000613153826130f1565b61315d81856130fc565b935061316d81856020860161310d565b61317681613137565b840191505092915050565b6000602082019050818103600083015261319b8184613148565b905092915050565b6000806000606084860312156131bc576131bb612e9a565b5b60006131ca86828701612eed565b93505060206131db86828701612f23565b92505060406131ec86828701612f23565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61323382613137565b810181811067ffffffffffffffff82111715613252576132516131fb565b5b80604052505050565b6000613265612e90565b9050613271828261322a565b919050565b600067ffffffffffffffff821115613291576132906131fb565b5b602082029050602081019050919050565b600080fd5b60006132ba6132b584613276565b61325b565b905080838252602082019050602084028301858111156132dd576132dc6132a2565b5b835b8181101561330657806132f28882612f23565b8452602084019350506020810190506132df565b5050509392505050565b600082601f830112613325576133246131f6565b5b81356133358482602086016132a7565b91505092915050565b600080fd5b600067ffffffffffffffff82111561335e5761335d6131fb565b5b61336782613137565b9050602081019050919050565b82818337600083830152505050565b600061339661339184613343565b61325b565b9050828152602081018484840111156133b2576133b161333e565b5b6133bd848285613374565b509392505050565b600082601f8301126133da576133d96131f6565b5b81356133ea848260208601613383565b91505092915050565b600080600080600060a0868803121561340f5761340e612e9a565b5b600061341d88828901612eed565b955050602061342e88828901612eed565b945050604086013567ffffffffffffffff81111561344f5761344e612e9f565b5b61345b88828901613310565b935050606086013567ffffffffffffffff81111561347c5761347b612e9f565b5b61348888828901613310565b925050608086013567ffffffffffffffff8111156134a9576134a8612e9f565b5b6134b5888289016133c5565b9150509295509295909350565b600067ffffffffffffffff8211156134dd576134dc6131fb565b5b602082029050602081019050919050565b60006135016134fc846134c2565b61325b565b90508083825260208201905060208402830185811115613524576135236132a2565b5b835b8181101561354d57806135398882612eed565b845260208401935050602081019050613526565b5050509392505050565b600082601f83011261356c5761356b6131f6565b5b813561357c8482602086016134ee565b91505092915050565b6000806040838503121561359c5761359b612e9a565b5b600083013567ffffffffffffffff8111156135ba576135b9612e9f565b5b6135c685828601613557565b925050602083013567ffffffffffffffff8111156135e7576135e6612e9f565b5b6135f385828601613310565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61363281612f02565b82525050565b60006136448383613629565b60208301905092915050565b6000602082019050919050565b6000613668826135fd565b6136728185613608565b935061367d83613619565b8060005b838110156136ae5781516136958882613638565b97506136a083613650565b925050600181019050613681565b5085935050505092915050565b600060208201905081810360008301526136d5818461365d565b905092915050565b6000806000606084860312156136f6576136f5612e9a565b5b600061370486828701612eed565b935050602084013567ffffffffffffffff81111561372557613724612e9f565b5b61373186828701613310565b925050604084013567ffffffffffffffff81111561375257613751612e9f565b5b61375e86828701613310565b9150509250925092565b600067ffffffffffffffff821115613783576137826131fb565b5b61378c82613137565b9050602081019050919050565b60006137ac6137a784613768565b61325b565b9050828152602081018484840111156137c8576137c761333e565b5b6137d3848285613374565b509392505050565b600082601f8301126137f0576137ef6131f6565b5b8135613800848260208601613799565b91505092915050565b60006020828403121561381f5761381e612e9a565b5b600082013567ffffffffffffffff81111561383d5761383c612e9f565b5b613849848285016137db565b91505092915050565b61385b81612ec4565b82525050565b60006020820190506138766000830184613852565b92915050565b61388581613027565b811461389057600080fd5b50565b6000813590506138a28161387c565b92915050565b600080604083850312156138bf576138be612e9a565b5b60006138cd85828601612eed565b92505060206138de85828601613893565b9150509250929050565b600080604083850312156138ff576138fe612e9a565b5b600061390d85828601612eed565b925050602061391e85828601612eed565b9150509250929050565b600080600080600060a0868803121561394457613943612e9a565b5b600061395288828901612eed565b955050602061396388828901612eed565b945050604061397488828901612f23565b935050606061398588828901612f23565b925050608086013567ffffffffffffffff8111156139a6576139a5612e9f565b5b6139b2888289016133c5565b9150509295509295909350565b6000602082840312156139d5576139d4612e9a565b5b60006139e384828501612eed565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a48602b836130fc565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000613ab46007836130fc565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f496e76616c6964204b6579730000000000000000000000000000000000000000600082015250565b6000613b20600c836130fc565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9d57607f821691505b602082108103613bb057613baf613b56565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bec6020836130fc565b9150613bf782613bb6565b602082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613c7e6032836130fc565b9150613c8982613c22565b604082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613d106029836130fc565b9150613d1b82613cb4565b604082019050919050565b60006020820190508181036000830152613d3f81613d03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613daf82612f02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613de157613de0613d75565b5b600182019050919050565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b6000613e226010836130fc565b9150613e2d82613dec565b602082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b6000613e6382612f02565b9150613e6e83612f02565b9250828202613e7c81612f02565b91508282048414831517613e9357613e92613d75565b5b5092915050565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b6000613ed0600d836130fc565b9150613edb82613e9a565b602082019050919050565b60006020820190508181036000830152613eff81613ec3565b9050919050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613f3c600e836130fc565b9150613f4782613f06565b602082019050919050565b60006020820190508181036000830152613f6b81613f2f565b9050919050565b6000613f7d82612f02565b9150613f8883612f02565b9250828201905080821115613fa057613f9f613d75565b5b92915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006140026029836130fc565b915061400d82613fa6565b604082019050919050565b6000602082019050818103600083015261403181613ff5565b9050919050565b600081905092915050565b50565b6000614053600083614038565b915061405e82614043565b600082019050919050565b600061407482614046565b9150819050919050565b7f4661696c65640000000000000000000000000000000000000000000000000000600082015250565b60006140b46006836130fc565b91506140bf8261407e565b602082019050919050565b600060208201905081810360008301526140e3816140a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141466026836130fc565b9150614151826140ea565b604082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006141d86028836130fc565b91506141e38261417c565b604082019050919050565b60006020820190508181036000830152614207816141cb565b9050919050565b600061421982612f02565b915061422483612f02565b925082820390508181111561423c5761423b613d75565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156142995780860481111561427557614274613d75565b5b60018516156142845780820291505b808102905061429285614242565b9450614259565b94509492505050565b6000826142b2576001905061436e565b816142c0576000905061436e565b81600181146142d657600281146142e05761430f565b600191505061436e565b60ff8411156142f2576142f1613d75565b5b8360020a91508482111561430957614308613d75565b5b5061436e565b5060208310610133831016604e8410600b84101617156143445782820a90508381111561433f5761433e613d75565b5b61436e565b614351848484600161424f565b9250905081840481111561436857614367613d75565b5b81810290505b9392505050565b600061438082612f02565b915061438b83612f02565b92506143b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142a2565b905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061441c6021836130fc565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b60006040820190506144676000830185612f78565b6144746020830184612f78565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006144d76028836130fc565b91506144e28261447b565b604082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145696025836130fc565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006145fb602a836130fc565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b6000604082019050818103600083015261464b818561365d565b9050818103602083015261465f818461365d565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146c46023836130fc565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006147566024836130fc565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826147b1565b6147f886836147b1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061483561483061482b84612f02565b614810565b612f02565b9050919050565b6000819050919050565b61484f8361481a565b61486361485b8261483c565b8484546147be565b825550505050565b600090565b61487861486b565b614883818484614846565b505050565b5b818110156148a75761489c600082614870565b600181019050614889565b5050565b601f8211156148ec576148bd8161478c565b6148c6846147a1565b810160208510156148d5578190505b6148e96148e1856147a1565b830182614888565b50505b505050565b600082821c905092915050565b600061490f600019846008026148f1565b1980831691505092915050565b600061492883836148fe565b9150826002028217905092915050565b614941826130f1565b67ffffffffffffffff81111561495a576149596131fb565b5b6149648254613b85565b61496f8282856148ab565b600060209050601f8311600181146149a25760008415614990578287015190505b61499a858261491c565b865550614a02565b601f1984166149b08661478c565b60005b828110156149d8578489015182556001820191506020850194506020810190506149b3565b868310156149f557848901516149f1601f8916826148fe565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614a666029836130fc565b9150614a7182614a0a565b604082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ac382614a9c565b614acd8185614aa7565b9350614add81856020860161310d565b614ae681613137565b840191505092915050565b600060a082019050614b066000830188613852565b614b136020830187613852565b614b206040830186612f78565b614b2d6060830185612f78565b8181036080830152614b3f8184614ab8565b90509695505050505050565b600081519050614b5a81612fce565b92915050565b600060208284031215614b7657614b75612e9a565b5b6000614b8484828501614b4b565b91505092915050565b60008160e01c9050919050565b600060033d1115614bb95760046000803e614bb6600051614b8d565b90505b90565b600060443d10614c4957614bce612e90565b60043d036004823e80513d602482011167ffffffffffffffff82111715614bf6575050614c49565b808201805167ffffffffffffffff811115614c145750505050614c49565b80602083010160043d038501811115614c31575050505050614c49565b614c408260200185018661322a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614ca86034836130fc565b9150614cb382614c4c565b604082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614d3a6028836130fc565b9150614d4582614cde565b604082019050919050565b60006020820190508181036000830152614d6981614d2d565b9050919050565b600060a082019050614d856000830188613852565b614d926020830187613852565b8181036040830152614da4818661365d565b90508181036060830152614db8818561365d565b90508181036080830152614dcc8184614ab8565b9050969550505050505056fea26469706673582212205bdeee4a3cab554980fdb71240c846185bc993012a6727a4ae3c688512ed6db364736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101e25760003560e01c80638da5cb5b11610102578063d81d0a1511610095578063eb8d244411610064578063eb8d2444146106bc578063f242432a146106e7578063f2fde38b14610710578063f5298aca14610739576101e2565b8063d81d0a1514610600578063db9191dd14610629578063e140d1e114610654578063e985e9c51461067f576101e2565b8063ae3a26bc116100d1578063ae3a26bc14610544578063b219693a1461056f578063b89870b414610598578063bd85b039146105c3576101e2565b80638da5cb5b146104ae5780639382b6f0146104d9578063a22cb46514610504578063ac4460021461052d576101e2565b806334918dfd1161017a57806365aa18b11161014957806365aa18b1146104295780636b20c45414610445578063715018a61461046e5780637e518ec814610485576101e2565b806334918dfd1461036d578063384d57b5146103845780634e1273f4146103af5780634f558e79146103ec576101e2565b806314f8cdd3116101b657806314f8cdd3146102c7578063156e29f6146102f2578063247a498b1461031b5780632eb2c2d614610344576101e2565b8062fdd58e146101e757806301ffc9a7146102245780630886c8c4146102615780630e89341c1461028a575b600080fd5b3480156101f357600080fd5b5061020e60048036038101906102099190612f38565b610762565b60405161021b9190612f87565b60405180910390f35b34801561023057600080fd5b5061024b60048036038101906102469190612ffa565b61082b565b6040516102589190613042565b60405180910390f35b34801561026d57600080fd5b506102886004803603810190610283919061305d565b61090d565b005b34801561029657600080fd5b506102b160048036038101906102ac91906130c4565b610a13565b6040516102be9190613181565b60405180910390f35b3480156102d357600080fd5b506102dc610aa7565b6040516102e99190612f87565b60405180910390f35b3480156102fe57600080fd5b50610319600480360381019061031491906131a3565b610aad565b005b34801561032757600080fd5b50610342600480360381019061033d91906130c4565b610b49565b005b34801561035057600080fd5b5061036b600480360381019061036691906133f3565b610bcf565b005b34801561037957600080fd5b50610382610c70565b005b34801561039057600080fd5b50610399610d18565b6040516103a69190612f87565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d19190613585565b610d1d565b6040516103e391906136bb565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e91906130c4565b610e36565b6040516104209190613042565b60405180910390f35b610443600480360381019061043e91906130c4565b610e4a565b005b34801561045157600080fd5b5061046c600480360381019061046791906136dd565b610f67565b005b34801561047a57600080fd5b50610483611004565b005b34801561049157600080fd5b506104ac60048036038101906104a79190613809565b61108c565b005b3480156104ba57600080fd5b506104c3611114565b6040516104d09190613861565b60405180910390f35b3480156104e557600080fd5b506104ee61113d565b6040516104fb9190612f87565b60405180910390f35b34801561051057600080fd5b5061052b600480360381019061052691906138a8565b611142565b005b34801561053957600080fd5b50610542611158565b005b34801561055057600080fd5b50610559611283565b6040516105669190612f87565b60405180910390f35b34801561057b57600080fd5b50610596600480360381019061059191906130c4565b611288565b005b3480156105a457600080fd5b506105ad61130e565b6040516105ba9190612f87565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e591906130c4565b611314565b6040516105f79190612f87565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906136dd565b611331565b005b34801561063557600080fd5b5061063e6113cd565b60405161064b9190612f87565b60405180910390f35b34801561066057600080fd5b506106696113d3565b6040516106769190612f87565b60405180910390f35b34801561068b57600080fd5b506106a660048036038101906106a191906138e8565b6113d8565b6040516106b39190613042565b60405180910390f35b3480156106c857600080fd5b506106d161146c565b6040516106de9190613042565b60405180910390f35b3480156106f357600080fd5b5061070e60048036038101906107099190613928565b61147f565b005b34801561071c57600080fd5b50610737600480360381019061073291906139bf565b611520565b005b34801561074557600080fd5b50610760600480360381019061075b91906131a3565b611617565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036107d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c990613a5e565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109065750610905826118af565b5b9050919050565b82841061094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094690613aca565b60405180910390fd5b8161095b858584611919565b1461099b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099290613aca565b60405180910390fd5b816109a63386610762565b10156109e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109de90613b36565b60405180910390fd5b6109f2338584611617565b610a0d33848360405180602001604052806000815250611947565b50505050565b606060038054610a2290613b85565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4e90613b85565b8015610a9b5780601f10610a7057610100808354040283529160200191610a9b565b820191906000526020600020905b815481529060010190602001808311610a7e57829003601f168201915b50505050509050919050565b60065481565b610ab5611af8565b73ffffffffffffffffffffffffffffffffffffffff16610ad3611114565b73ffffffffffffffffffffffffffffffffffffffff1614610b29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2090613c02565b60405180910390fd5b610b4483838360405180602001604052806000815250611947565b505050565b610b51611af8565b73ffffffffffffffffffffffffffffffffffffffff16610b6f611114565b73ffffffffffffffffffffffffffffffffffffffff1614610bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbc90613c02565b60405180910390fd5b8060068190555050565b610bd7611af8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c1d5750610c1c85610c17611af8565b6113d8565b5b610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613c94565b60405180910390fd5b610c698585858585611b00565b5050505050565b610c78611af8565b73ffffffffffffffffffffffffffffffffffffffff16610c96611114565b73ffffffffffffffffffffffffffffffffffffffff1614610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613c02565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b600081565b60608151835114610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90613d26565b60405180910390fd5b6000835167ffffffffffffffff811115610d8057610d7f6131fb565b5b604051908082528060200260200182016040528015610dae5781602001602082028036833780820191505090505b50905060005b8451811015610e2b57610dfb858281518110610dd357610dd2613d46565b5b6020026020010151858381518110610dee57610ded613d46565b5b6020026020010151610762565b828281518110610e0e57610e0d613d46565b5b60200260200101818152505080610e2490613da4565b9050610db4565b508091505092915050565b600080610e4283611314565b119050919050565b600860009054906101000a900460ff16610e99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9090613e38565b60405180910390fd5b80600554610ea79190613e58565b341015610ee9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee090613ee6565b60405180910390fd5b610f053360008360405180602001604052806000815250611947565b60065460075410610f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4290613f52565b60405180910390fd5b8060076000828254610f5d9190613f72565b9250508190555050565b610f6f611af8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610fb55750610fb483610faf611af8565b6113d8565b5b610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614018565b60405180910390fd5b610fff838383611e24565b505050565b61100c611af8565b73ffffffffffffffffffffffffffffffffffffffff1661102a611114565b73ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107790613c02565b60405180910390fd5b61108a60006120f4565b565b611094611af8565b73ffffffffffffffffffffffffffffffffffffffff166110b2611114565b73ffffffffffffffffffffffffffffffffffffffff1614611108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ff90613c02565b60405180910390fd5b611111816121b8565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600381565b61115461114d611af8565b83836121cb565b5050565b611160611af8565b73ffffffffffffffffffffffffffffffffffffffff1661117e611114565b73ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90613c02565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff16476040516111fa90614069565b60006040518083038185875af1925050503d8060008114611237576040519150601f19603f3d011682016040523d82523d6000602084013e61123c565b606091505b5050905080611280576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611277906140ca565b60405180910390fd5b50565b600181565b611290611af8565b73ffffffffffffffffffffffffffffffffffffffff166112ae611114565b73ffffffffffffffffffffffffffffffffffffffff1614611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90613c02565b60405180910390fd5b8060058190555050565b60075481565b600060046000838152602001908152602001600020549050919050565b611339611af8565b73ffffffffffffffffffffffffffffffffffffffff16611357611114565b73ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490613c02565b60405180910390fd5b6113c883838360405180602001604052806000815250612337565b505050565b60055481565b600281565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900460ff1681565b611487611af8565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806114cd57506114cc856114c7611af8565b6113d8565b5b61150c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150390614018565b60405180910390fd5b6115198585858585612564565b5050505050565b611528611af8565b73ffffffffffffffffffffffffffffffffffffffff16611546611114565b73ffffffffffffffffffffffffffffffffffffffff161461159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390613c02565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361160b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116029061415c565b60405180910390fd5b611614816120f4565b50565b61161f611af8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061166557506116648361165f611af8565b6113d8565b5b6116a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169b90614018565b60405180910390fd5b6116af838383612802565b505050565b6116c28686868686866118a7565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036117735760005b83518110156117715782818151811061171557611714613d46565b5b60200260200101516004600086848151811061173457611733613d46565b5b6020026020010151815260200190815260200160002060008282546117599190613f72565b925050819055508061176a90613da4565b90506116f9565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361187c5760005b835181101561187a5760008482815181106117c8576117c7613d46565b5b6020026020010151905060008483815181106117e7576117e6613d46565b5b602002602001015190506000600460008481526020019081526020016000205490508181101561184c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611843906141ee565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061187390613da4565b90506117aa565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008383611927919061420e565b60026119339190614375565b8261193e9190613e58565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90614432565b60405180910390fd5b60006119c0611af8565b905060006119cd85612a4a565b905060006119da85612a4a565b90506119eb83600089858589612ac4565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a4b9190613f72565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051611ac9929190614452565b60405180910390a4611ae083600089858589612ada565b611aef83600089898989612ae2565b50505050505050565b600033905090565b8151835114611b44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3b906144ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa9061457f565b60405180910390fd5b6000611bbd611af8565b9050611bcd818787878787612ac4565b60005b8451811015611d81576000858281518110611bee57611bed613d46565b5b602002602001015190506000858381518110611c0d57611c0c613d46565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca690614611565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d669190613f72565b9250508190555050505080611d7a90613da4565b9050611bd0565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611df8929190614631565b60405180910390a4611e0e818787878787612ada565b611e1c818787878787612cb9565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8a906146da565b60405180910390fd5b8051825114611ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ece906144ed565b60405180910390fd5b6000611ee1611af8565b9050611f0181856000868660405180602001604052806000815250612ac4565b60005b8351811015612050576000848281518110611f2257611f21613d46565b5b602002602001015190506000848381518110611f4157611f40613d46565b5b6020026020010151905060006001600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fe3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fda9061476c565b60405180910390fd5b8181036001600085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061204890613da4565b915050611f04565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516120c8929190614631565b60405180910390a46120ee81856000868660405180602001604052806000815250612ada565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600390816121c79190614938565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223090614a7c565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161232a9190613042565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239d90614432565b60405180910390fd5b81518351146123ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e1906144ed565b60405180910390fd5b60006123f4611af8565b905061240581600087878787612ac4565b60005b84518110156124bf5783818151811061242457612423613d46565b5b60200260200101516001600087848151811061244357612442613d46565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124a59190613f72565b9250508190555080806124b790613da4565b915050612408565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612537929190614631565b60405180910390a461254e81600087878787612ada565b61255d81600087878787612cb9565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ca9061457f565b60405180910390fd5b60006125dd611af8565b905060006125ea85612a4a565b905060006125f785612a4a565b9050612607838989858589612ac4565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561269f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269690614611565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546127569190613f72565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516127d3929190614452565b60405180910390a46127e9848a8a86868a612ada565b6127f7848a8a8a8a8a612ae2565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612868906146da565b60405180910390fd5b600061287b611af8565b9050600061288884612a4a565b9050600061289584612a4a565b90506128b583876000858560405180602001604052806000815250612ac4565b60006001600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508481101561294d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129449061476c565b60405180910390fd5b8481036001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612a1b929190614452565b60405180910390a4612a4184886000868660405180602001604052806000815250612ada565b50505050505050565b60606000600167ffffffffffffffff811115612a6957612a686131fb565b5b604051908082528060200260200182016040528015612a975781602001602082028036833780820191505090505b5090508281600081518110612aaf57612aae613d46565b5b60200260200101818152505080915050919050565b612ad28686868686866116b4565b505050505050565b505050505050565b612b018473ffffffffffffffffffffffffffffffffffffffff16611884565b15612cb1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612b47959493929190614af1565b6020604051808303816000875af1925050508015612b8357506040513d601f19601f82011682018060405250810190612b809190614b60565b60015b612c2857612b8f614b9a565b806308c379a003612beb5750612ba3614bbc565b80612bae5750612bed565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be29190613181565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1f90614cbe565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca690614d50565b60405180910390fd5b505b505050505050565b612cd88473ffffffffffffffffffffffffffffffffffffffff16611884565b15612e88578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612d1e959493929190614d70565b6020604051808303816000875af1925050508015612d5a57506040513d601f19601f82011682018060405250810190612d579190614b60565b60015b612dff57612d66614b9a565b806308c379a003612dc25750612d7a614bbc565b80612d855750612dc4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db99190613181565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df690614cbe565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7d90614d50565b60405180910390fd5b505b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ecf82612ea4565b9050919050565b612edf81612ec4565b8114612eea57600080fd5b50565b600081359050612efc81612ed6565b92915050565b6000819050919050565b612f1581612f02565b8114612f2057600080fd5b50565b600081359050612f3281612f0c565b92915050565b60008060408385031215612f4f57612f4e612e9a565b5b6000612f5d85828601612eed565b9250506020612f6e85828601612f23565b9150509250929050565b612f8181612f02565b82525050565b6000602082019050612f9c6000830184612f78565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612fd781612fa2565b8114612fe257600080fd5b50565b600081359050612ff481612fce565b92915050565b6000602082840312156130105761300f612e9a565b5b600061301e84828501612fe5565b91505092915050565b60008115159050919050565b61303c81613027565b82525050565b60006020820190506130576000830184613033565b92915050565b6000806000806080858703121561307757613076612e9a565b5b600061308587828801612f23565b945050602061309687828801612f23565b93505060406130a787828801612f23565b92505060606130b887828801612f23565b91505092959194509250565b6000602082840312156130da576130d9612e9a565b5b60006130e884828501612f23565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561312b578082015181840152602081019050613110565b60008484015250505050565b6000601f19601f8301169050919050565b6000613153826130f1565b61315d81856130fc565b935061316d81856020860161310d565b61317681613137565b840191505092915050565b6000602082019050818103600083015261319b8184613148565b905092915050565b6000806000606084860312156131bc576131bb612e9a565b5b60006131ca86828701612eed565b93505060206131db86828701612f23565b92505060406131ec86828701612f23565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61323382613137565b810181811067ffffffffffffffff82111715613252576132516131fb565b5b80604052505050565b6000613265612e90565b9050613271828261322a565b919050565b600067ffffffffffffffff821115613291576132906131fb565b5b602082029050602081019050919050565b600080fd5b60006132ba6132b584613276565b61325b565b905080838252602082019050602084028301858111156132dd576132dc6132a2565b5b835b8181101561330657806132f28882612f23565b8452602084019350506020810190506132df565b5050509392505050565b600082601f830112613325576133246131f6565b5b81356133358482602086016132a7565b91505092915050565b600080fd5b600067ffffffffffffffff82111561335e5761335d6131fb565b5b61336782613137565b9050602081019050919050565b82818337600083830152505050565b600061339661339184613343565b61325b565b9050828152602081018484840111156133b2576133b161333e565b5b6133bd848285613374565b509392505050565b600082601f8301126133da576133d96131f6565b5b81356133ea848260208601613383565b91505092915050565b600080600080600060a0868803121561340f5761340e612e9a565b5b600061341d88828901612eed565b955050602061342e88828901612eed565b945050604086013567ffffffffffffffff81111561344f5761344e612e9f565b5b61345b88828901613310565b935050606086013567ffffffffffffffff81111561347c5761347b612e9f565b5b61348888828901613310565b925050608086013567ffffffffffffffff8111156134a9576134a8612e9f565b5b6134b5888289016133c5565b9150509295509295909350565b600067ffffffffffffffff8211156134dd576134dc6131fb565b5b602082029050602081019050919050565b60006135016134fc846134c2565b61325b565b90508083825260208201905060208402830185811115613524576135236132a2565b5b835b8181101561354d57806135398882612eed565b845260208401935050602081019050613526565b5050509392505050565b600082601f83011261356c5761356b6131f6565b5b813561357c8482602086016134ee565b91505092915050565b6000806040838503121561359c5761359b612e9a565b5b600083013567ffffffffffffffff8111156135ba576135b9612e9f565b5b6135c685828601613557565b925050602083013567ffffffffffffffff8111156135e7576135e6612e9f565b5b6135f385828601613310565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61363281612f02565b82525050565b60006136448383613629565b60208301905092915050565b6000602082019050919050565b6000613668826135fd565b6136728185613608565b935061367d83613619565b8060005b838110156136ae5781516136958882613638565b97506136a083613650565b925050600181019050613681565b5085935050505092915050565b600060208201905081810360008301526136d5818461365d565b905092915050565b6000806000606084860312156136f6576136f5612e9a565b5b600061370486828701612eed565b935050602084013567ffffffffffffffff81111561372557613724612e9f565b5b61373186828701613310565b925050604084013567ffffffffffffffff81111561375257613751612e9f565b5b61375e86828701613310565b9150509250925092565b600067ffffffffffffffff821115613783576137826131fb565b5b61378c82613137565b9050602081019050919050565b60006137ac6137a784613768565b61325b565b9050828152602081018484840111156137c8576137c761333e565b5b6137d3848285613374565b509392505050565b600082601f8301126137f0576137ef6131f6565b5b8135613800848260208601613799565b91505092915050565b60006020828403121561381f5761381e612e9a565b5b600082013567ffffffffffffffff81111561383d5761383c612e9f565b5b613849848285016137db565b91505092915050565b61385b81612ec4565b82525050565b60006020820190506138766000830184613852565b92915050565b61388581613027565b811461389057600080fd5b50565b6000813590506138a28161387c565b92915050565b600080604083850312156138bf576138be612e9a565b5b60006138cd85828601612eed565b92505060206138de85828601613893565b9150509250929050565b600080604083850312156138ff576138fe612e9a565b5b600061390d85828601612eed565b925050602061391e85828601612eed565b9150509250929050565b600080600080600060a0868803121561394457613943612e9a565b5b600061395288828901612eed565b955050602061396388828901612eed565b945050604061397488828901612f23565b935050606061398588828901612f23565b925050608086013567ffffffffffffffff8111156139a6576139a5612e9f565b5b6139b2888289016133c5565b9150509295509295909350565b6000602082840312156139d5576139d4612e9a565b5b60006139e384828501612eed565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613a48602b836130fc565b9150613a53826139ec565b604082019050919050565b60006020820190508181036000830152613a7781613a3b565b9050919050565b7f496e76616c696400000000000000000000000000000000000000000000000000600082015250565b6000613ab46007836130fc565b9150613abf82613a7e565b602082019050919050565b60006020820190508181036000830152613ae381613aa7565b9050919050565b7f496e76616c6964204b6579730000000000000000000000000000000000000000600082015250565b6000613b20600c836130fc565b9150613b2b82613aea565b602082019050919050565b60006020820190508181036000830152613b4f81613b13565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b9d57607f821691505b602082108103613bb057613baf613b56565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bec6020836130fc565b9150613bf782613bb6565b602082019050919050565b60006020820190508181036000830152613c1b81613bdf565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000613c7e6032836130fc565b9150613c8982613c22565b604082019050919050565b60006020820190508181036000830152613cad81613c71565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613d106029836130fc565b9150613d1b82613cb4565b604082019050919050565b60006020820190508181036000830152613d3f81613d03565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613daf82612f02565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613de157613de0613d75565b5b600182019050919050565b7f53616c65206e6f74207374617274656400000000000000000000000000000000600082015250565b6000613e226010836130fc565b9150613e2d82613dec565b602082019050919050565b60006020820190508181036000830152613e5181613e15565b9050919050565b6000613e6382612f02565b9150613e6e83612f02565b9250828202613e7c81612f02565b91508282048414831517613e9357613e92613d75565b5b5092915050565b7f496e76616c69642076616c756500000000000000000000000000000000000000600082015250565b6000613ed0600d836130fc565b9150613edb82613e9a565b602082019050919050565b60006020820190508181036000830152613eff81613ec3565b9050919050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613f3c600e836130fc565b9150613f4782613f06565b602082019050919050565b60006020820190508181036000830152613f6b81613f2f565b9050919050565b6000613f7d82612f02565b9150613f8883612f02565b9250828201905080821115613fa057613f9f613d75565b5b92915050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006140026029836130fc565b915061400d82613fa6565b604082019050919050565b6000602082019050818103600083015261403181613ff5565b9050919050565b600081905092915050565b50565b6000614053600083614038565b915061405e82614043565b600082019050919050565b600061407482614046565b9150819050919050565b7f4661696c65640000000000000000000000000000000000000000000000000000600082015250565b60006140b46006836130fc565b91506140bf8261407e565b602082019050919050565b600060208201905081810360008301526140e3816140a7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006141466026836130fc565b9150614151826140ea565b604082019050919050565b6000602082019050818103600083015261417581614139565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006141d86028836130fc565b91506141e38261417c565b604082019050919050565b60006020820190508181036000830152614207816141cb565b9050919050565b600061421982612f02565b915061422483612f02565b925082820390508181111561423c5761423b613d75565b5b92915050565b60008160011c9050919050565b6000808291508390505b60018511156142995780860481111561427557614274613d75565b5b60018516156142845780820291505b808102905061429285614242565b9450614259565b94509492505050565b6000826142b2576001905061436e565b816142c0576000905061436e565b81600181146142d657600281146142e05761430f565b600191505061436e565b60ff8411156142f2576142f1613d75565b5b8360020a91508482111561430957614308613d75565b5b5061436e565b5060208310610133831016604e8410600b84101617156143445782820a90508381111561433f5761433e613d75565b5b61436e565b614351848484600161424f565b9250905081840481111561436857614367613d75565b5b81810290505b9392505050565b600061438082612f02565b915061438b83612f02565b92506143b87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142a2565b905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061441c6021836130fc565b9150614427826143c0565b604082019050919050565b6000602082019050818103600083015261444b8161440f565b9050919050565b60006040820190506144676000830185612f78565b6144746020830184612f78565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006144d76028836130fc565b91506144e28261447b565b604082019050919050565b60006020820190508181036000830152614506816144ca565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145696025836130fc565b91506145748261450d565b604082019050919050565b600060208201905081810360008301526145988161455c565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006145fb602a836130fc565b91506146068261459f565b604082019050919050565b6000602082019050818103600083015261462a816145ee565b9050919050565b6000604082019050818103600083015261464b818561365d565b9050818103602083015261465f818461365d565b90509392505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146c46023836130fc565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006147566024836130fc565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026147ee7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826147b1565b6147f886836147b1565b95508019841693508086168417925050509392505050565b6000819050919050565b600061483561483061482b84612f02565b614810565b612f02565b9050919050565b6000819050919050565b61484f8361481a565b61486361485b8261483c565b8484546147be565b825550505050565b600090565b61487861486b565b614883818484614846565b505050565b5b818110156148a75761489c600082614870565b600181019050614889565b5050565b601f8211156148ec576148bd8161478c565b6148c6846147a1565b810160208510156148d5578190505b6148e96148e1856147a1565b830182614888565b50505b505050565b600082821c905092915050565b600061490f600019846008026148f1565b1980831691505092915050565b600061492883836148fe565b9150826002028217905092915050565b614941826130f1565b67ffffffffffffffff81111561495a576149596131fb565b5b6149648254613b85565b61496f8282856148ab565b600060209050601f8311600181146149a25760008415614990578287015190505b61499a858261491c565b865550614a02565b601f1984166149b08661478c565b60005b828110156149d8578489015182556001820191506020850194506020810190506149b3565b868310156149f557848901516149f1601f8916826148fe565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614a666029836130fc565b9150614a7182614a0a565b604082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614ac382614a9c565b614acd8185614aa7565b9350614add81856020860161310d565b614ae681613137565b840191505092915050565b600060a082019050614b066000830188613852565b614b136020830187613852565b614b206040830186612f78565b614b2d6060830185612f78565b8181036080830152614b3f8184614ab8565b90509695505050505050565b600081519050614b5a81612fce565b92915050565b600060208284031215614b7657614b75612e9a565b5b6000614b8484828501614b4b565b91505092915050565b60008160e01c9050919050565b600060033d1115614bb95760046000803e614bb6600051614b8d565b90505b90565b600060443d10614c4957614bce612e90565b60043d036004823e80513d602482011167ffffffffffffffff82111715614bf6575050614c49565b808201805167ffffffffffffffff811115614c145750505050614c49565b80602083010160043d038501811115614c31575050505050614c49565b614c408260200185018661322a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614ca86034836130fc565b9150614cb382614c4c565b604082019050919050565b60006020820190508181036000830152614cd781614c9b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614d3a6028836130fc565b9150614d4582614cde565b604082019050919050565b60006020820190508181036000830152614d6981614d2d565b9050919050565b600060a082019050614d856000830188613852565b614d926020830187613852565b8181036040830152614da4818661365d565b90508181036060830152614db8818561365d565b90508181036080830152614dcc8184614ab8565b9050969550505050505056fea26469706673582212205bdeee4a3cab554980fdb71240c846185bc993012a6727a4ae3c688512ed6db364736f6c63430008110033

Deployed Bytecode Sourcemap

43973:3120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24198:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23205:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46368:546;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23942:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44240:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45443:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45127:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26261:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45344:91;;;;;;;;;;;;;:::i;:::-;;44040:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24657:536;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42554:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44716:403;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41241:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2737:103;;;;;;;;;;;;;:::i;:::-;;44565:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2086:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44165:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25266:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46922:168;;;;;;;;;;;;;:::i;:::-;;44080:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45236:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44278:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42343:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45610:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44208:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44121:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25518:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44318:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25783:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2995:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40946:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24198:293;24309:7;24370:1;24351:21;;:7;:21;;;24329:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;24461:9;:13;24471:2;24461:13;;;;;;;;;;;:22;24475:7;24461:22;;;;;;;;;;;;;;;;24454:29;;24198:293;;;;:::o;23205:326::-;23323:4;23375:26;23360:41;;;:11;:41;;;;:110;;;;23433:37;23418:52;;;:11;:52;;;;23360:110;:163;;;;23487:36;23511:11;23487:23;:36::i;:::-;23360:163;23340:183;;23205:326;;;:::o;46368:546::-;46542:11;46532:7;:21;46524:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;46674:10;46598:55;46618:7;46627:11;46640:12;46598:19;:55::i;:::-;:86;46576:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;46772:10;46738:30;46748:10;46760:7;46738:9;:30::i;:::-;:44;;46730:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;46810:37;46815:10;46827:7;46836:10;46810:4;:37::i;:::-;46858:48;46864:10;46876:11;46889:12;46858:48;;;;;;;;;;;;:5;:48::i;:::-;46368:546;;;;:::o;23942:105::-;24002:13;24035:4;24028:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23942:105;;;:::o;44240:29::-;;;;:::o;45443:159::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45564:30:::1;45570:7;45579:2;45583:6;45564:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;45443:159:::0;;;:::o;45127:101::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45214:6:::1;45197:14;:23;;;;45127:101:::0;:::o;26261:442::-;26502:12;:10;:12::i;:::-;26494:20;;:4;:20;;;:60;;;;26518:36;26535:4;26541:12;:10;:12::i;:::-;26518:16;:36::i;:::-;26494:60;26472:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;26643:52;26666:4;26672:2;26676:3;26681:7;26690:4;26643:22;:52::i;:::-;26261:442;;;;;:::o;45344:91::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45415:12:::1;;;;;;;;;;;45414:13;45399:12;;:28;;;;;;;;;;;;;;;;;;45344:91::o:0;44040:33::-;44072:1;44040:33;:::o;24657:536::-;24793:16;24863:3;:10;24844:8;:15;:29;24822:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;24955:30;25002:8;:15;24988:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24955:63;;25036:9;25031:122;25055:8;:15;25051:1;:19;25031:122;;;25111:30;25121:8;25130:1;25121:11;;;;;;;;:::i;:::-;;;;;;;;25134:3;25138:1;25134:6;;;;;;;;:::i;:::-;;;;;;;;25111:9;:30::i;:::-;25092:13;25106:1;25092:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25072:3;;;;:::i;:::-;;;25031:122;;;;25172:13;25165:20;;;24657:536;;;;:::o;42554:122::-;42611:4;42667:1;42635:29;42661:2;42635:25;:29::i;:::-;:33;42628:40;;42554:122;;;:::o;44716:403::-;44787:12;;;;;;;;;;;44779:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;44865:6;44852:10;;:19;;;;:::i;:::-;44839:9;:32;;44831:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;44902:36;44908:10;44072:1;44927:6;44902:36;;;;;;;;;;;;:5;:36::i;:::-;44976:14;;44957:16;;:33;44949:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;45105:6;45085:16;;:26;;;;;;;:::i;:::-;;;;;;;;44716:403;:::o;41241:353::-;41417:12;:10;:12::i;:::-;41406:23;;:7;:23;;;:66;;;;41433:39;41450:7;41459:12;:10;:12::i;:::-;41433:16;:39::i;:::-;41406:66;41384:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;41554:32;41565:7;41574:3;41579:6;41554:10;:32::i;:::-;41241:353;;;:::o;2737:103::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2802:30:::1;2829:1;2802:18;:30::i;:::-;2737:103::o:0;44565:143::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44672:28:::1;44680:19;44672:7;:28::i;:::-;44565:143:::0;:::o;2086:87::-;2132:7;2159:6;;;;;;;;;;;2152:13;;2086:87;:::o;44165:34::-;44198:1;44165:34;:::o;25266:180::-;25386:52;25405:12;:10;:12::i;:::-;25419:8;25429;25386:18;:52::i;:::-;25266:180;;:::o;46922:168::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46978:12:::1;46996:10;:15;;47019:21;46996:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46977:68;;;47064:7;47056:26;;;;;;;;;;;;:::i;:::-;;;;;;;;;46966:124;46922:168::o:0;44080:34::-;44113:1;44080:34;:::o;45236:100::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45320:8:::1;45307:10;:21;;;;45236:100:::0;:::o;44278:31::-;;;;:::o;42343:113::-;42405:7;42432:12;:16;42445:2;42432:16;;;;;;;;;;;;42425:23;;42343:113;;;:::o;45610:181::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45751:32:::1;45762:2;45766:3;45771:7;45751:32;;;;;;;;;;;::::0;:10:::1;:32::i;:::-;45610:181:::0;;;:::o;44208:25::-;;;;:::o;44121:37::-;44157:1;44121:37;:::o;25518:193::-;25642:4;25666:18;:27;25685:7;25666:27;;;;;;;;;;;;;;;:37;25694:8;25666:37;;;;;;;;;;;;;;;;;;;;;;;;;25659:44;;25518:193;;;;:::o;44318:24::-;;;;;;;;;;;;;:::o;25783:401::-;25999:12;:10;:12::i;:::-;25991:20;;:4;:20;;;:60;;;;26015:36;26032:4;26038:12;:10;:12::i;:::-;26015:16;:36::i;:::-;25991:60;25969:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26131:45;26149:4;26155:2;26159;26163:6;26171:4;26131:17;:45::i;:::-;25783:401;;;;;:::o;2995:238::-;2317:12;:10;:12::i;:::-;2306:23;;:7;:5;:7::i;:::-;:23;;;2298:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3118:1:::1;3098:22;;:8;:22;;::::0;3076:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3197:28;3216:8;3197:18;:28::i;:::-;2995:238:::0;:::o;40946:287::-;41063:12;:10;:12::i;:::-;41052:23;;:7;:23;;;:66;;;;41079:39;41096:7;41105:12;:10;:12::i;:::-;41079:16;:39::i;:::-;41052:66;41030:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;41200:25;41206:7;41215:2;41219:5;41200;:25::i;:::-;40946:287;;;:::o;42751:992::-;42990:66;43017:8;43027:4;43033:2;43037:3;43042:7;43051:4;42990:26;:66::i;:::-;43089:1;43073:18;;:4;:18;;;43069:160;;43113:9;43108:110;43132:3;:10;43128:1;:14;43108:110;;;43192:7;43200:1;43192:10;;;;;;;;:::i;:::-;;;;;;;;43168:12;:20;43181:3;43185:1;43181:6;;;;;;;;:::i;:::-;;;;;;;;43168:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;43144:3;;;;:::i;:::-;;;43108:110;;;;43069:160;43259:1;43245:16;;:2;:16;;;43241:495;;43283:9;43278:447;43302:3;:10;43298:1;:14;43278:447;;;43338:10;43351:3;43355:1;43351:6;;;;;;;;:::i;:::-;;;;;;;;43338:19;;43376:14;43393:7;43401:1;43393:10;;;;;;;;:::i;:::-;;;;;;;;43376:27;;43422:14;43439:12;:16;43452:2;43439:16;;;;;;;;;;;;43422:33;;43514:6;43504;:16;;43474:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;43684:6;43675;:15;43656:12;:16;43669:2;43656:16;;;;;;;;;;;:34;;;;43319:406;;;43314:3;;;;:::i;:::-;;;43278:447;;;;43241:495;42751:992;;;;;;:::o;13340:326::-;13400:4;13657:1;13635:7;:19;;;:23;13628:30;;13340:326;;;:::o;36999:221::-;;;;;;;:::o;21941:173::-;22042:4;22081:25;22066:40;;;:11;:40;;;;22059:47;;21941:173;;;:::o;46136:224::-;46282:7;46344;46330:11;:21;;;;:::i;:::-;46324:1;:28;;;;:::i;:::-;46309:12;:43;;;;:::i;:::-;46302:50;;46136:224;;;;;:::o;31175:818::-;31342:1;31328:16;;:2;:16;;;31320:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31395:16;31414:12;:10;:12::i;:::-;31395:31;;31437:20;31460:21;31478:2;31460:17;:21::i;:::-;31437:44;;31492:24;31519:25;31537:6;31519:17;:25::i;:::-;31492:52;;31557:66;31578:8;31596:1;31600:2;31604:3;31609:7;31618:4;31557:20;:66::i;:::-;31657:6;31636:9;:13;31646:2;31636:13;;;;;;;;;;;:17;31650:2;31636:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31716:2;31679:52;;31712:1;31679:52;;31694:8;31679:52;;;31720:2;31724:6;31679:52;;;;;;;:::i;:::-;;;;;;;;31744:65;31764:8;31782:1;31786:2;31790:3;31795:7;31804:4;31744:19;:65::i;:::-;31822:163;31867:8;31898:1;31915:2;31932;31949:6;31970:4;31822:30;:163::i;:::-;31309:684;;;31175:818;;;;:::o;783:98::-;836:7;863:10;856:17;;783:98;:::o;28536:1321::-;28777:7;:14;28763:3;:10;:28;28741:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;28892:1;28878:16;;:2;:16;;;28870:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;28949:16;28968:12;:10;:12::i;:::-;28949:31;;28993:60;29014:8;29024:4;29030:2;29034:3;29039:7;29048:4;28993:20;:60::i;:::-;29071:9;29066:470;29090:3;:10;29086:1;:14;29066:470;;;29122:10;29135:3;29139:1;29135:6;;;;;;;;:::i;:::-;;;;;;;;29122:19;;29156:14;29173:7;29181:1;29173:10;;;;;;;;:::i;:::-;;;;;;;;29156:27;;29200:19;29222:9;:13;29232:2;29222:13;;;;;;;;;;;:19;29236:4;29222:19;;;;;;;;;;;;;;;;29200:41;;29297:6;29282:11;:21;;29256:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;29461:6;29447:11;:20;29425:9;:13;29435:2;29425:13;;;;;;;;;;;:19;29439:4;29425:19;;;;;;;;;;;;;;;:42;;;;29518:6;29497:9;:13;29507:2;29497:13;;;;;;;;;;;:17;29511:2;29497:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29107:429;;;29102:3;;;;:::i;:::-;;;29066:470;;;;29583:2;29553:47;;29577:4;29553:47;;29567:8;29553:47;;;29587:3;29592:7;29553:47;;;;;;;:::i;:::-;;;;;;;;29613:59;29633:8;29643:4;29649:2;29653:3;29658:7;29667:4;29613:19;:59::i;:::-;29685:164;29735:8;29758:4;29777:2;29794:3;29812:7;29834:4;29685:35;:164::i;:::-;28730:1127;28536:1321;;;;;:::o;34515:1055::-;34683:1;34667:18;;:4;:18;;;34659:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34772:7;:14;34758:3;:10;:28;34736:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;34867:16;34886:12;:10;:12::i;:::-;34867:31;;34911:66;34932:8;34942:4;34956:1;34960:3;34965:7;34911:66;;;;;;;;;;;;:20;:66::i;:::-;34995:9;34990:422;35014:3;:10;35010:1;:14;34990:422;;;35046:10;35059:3;35063:1;35059:6;;;;;;;;:::i;:::-;;;;;;;;35046:19;;35080:14;35097:7;35105:1;35097:10;;;;;;;;:::i;:::-;;;;;;;;35080:27;;35124:19;35146:9;:13;35156:2;35146:13;;;;;;;;;;;:19;35160:4;35146:19;;;;;;;;;;;;;;;;35124:41;;35221:6;35206:11;:21;;35180:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;35379:6;35365:11;:20;35343:9;:13;35353:2;35343:13;;;;;;;;;;;:19;35357:4;35343:19;;;;;;;;;;;;;;;:42;;;;35031:381;;;35026:3;;;;;:::i;:::-;;;;34990:422;;;;35467:1;35429:55;;35453:4;35429:55;;35443:8;35429:55;;;35471:3;35476:7;35429:55;;;;;;;:::i;:::-;;;;;;;;35497:65;35517:8;35527:4;35541:1;35545:3;35550:7;35497:65;;;;;;;;;;;;:19;:65::i;:::-;34648:922;34515:1055;;;:::o;3393:191::-;3467:16;3486:6;;;;;;;;;;;3467:25;;3512:8;3503:6;;:17;;;;;;;;;;;;;;;;;;3567:8;3536:40;;3557:8;3536:40;;;;;;;;;;;;3456:128;3393:191;:::o;30701:88::-;30775:6;30768:4;:13;;;;;;:::i;:::-;;30701:88;:::o;35712:331::-;35867:8;35858:17;;:5;:17;;;35850:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35970:8;35932:18;:25;35951:5;35932:25;;;;;;;;;;;;;;;:35;35958:8;35932:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36016:8;35994:41;;36009:5;35994:41;;;36026:8;35994:41;;;;;;:::i;:::-;;;;;;;;35712:331;;;:::o;32349:939::-;32541:1;32527:16;;:2;:16;;;32519:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32628:7;:14;32614:3;:10;:28;32592:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;32723:16;32742:12;:10;:12::i;:::-;32723:31;;32767:66;32788:8;32806:1;32810:2;32814:3;32819:7;32828:4;32767:20;:66::i;:::-;32851:9;32846:103;32870:3;:10;32866:1;:14;32846:103;;;32927:7;32935:1;32927:10;;;;;;;;:::i;:::-;;;;;;;;32902:9;:17;32912:3;32916:1;32912:6;;;;;;;;:::i;:::-;;;;;;;;32902:17;;;;;;;;;;;:21;32920:2;32902:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32882:3;;;;;:::i;:::-;;;;32846:103;;;;33002:2;32966:53;;32998:1;32966:53;;32980:8;32966:53;;;33006:3;33011:7;32966:53;;;;;;;:::i;:::-;;;;;;;;33032:65;33052:8;33070:1;33074:2;33078:3;33083:7;33092:4;33032:19;:65::i;:::-;33110:170;33160:8;33191:1;33208:2;33225:3;33243:7;33265:4;33110:35;:170::i;:::-;32508:780;32349:939;;;;:::o;27167:1011::-;27369:1;27355:16;;:2;:16;;;27347:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27426:16;27445:12;:10;:12::i;:::-;27426:31;;27468:20;27491:21;27509:2;27491:17;:21::i;:::-;27468:44;;27523:24;27550:25;27568:6;27550:17;:25::i;:::-;27523:52;;27588:60;27609:8;27619:4;27625:2;27629:3;27634:7;27643:4;27588:20;:60::i;:::-;27661:19;27683:9;:13;27693:2;27683:13;;;;;;;;;;;:19;27697:4;27683:19;;;;;;;;;;;;;;;;27661:41;;27750:6;27735:11;:21;;27713:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;27898:6;27884:11;:20;27862:9;:13;27872:2;27862:13;;;;;;;;;;;:19;27876:4;27862:19;;;;;;;;;;;;;;;:42;;;;27947:6;27926:9;:13;27936:2;27926:13;;;;;;;;;;;:17;27940:2;27926:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28002:2;27971:46;;27996:4;27971:46;;27986:8;27971:46;;;28006:2;28010:6;27971:46;;;;;;;:::i;:::-;;;;;;;;28030:59;28050:8;28060:4;28066:2;28070:3;28075:7;28084:4;28030:19;:59::i;:::-;28102:68;28133:8;28143:4;28149:2;28153;28157:6;28165:4;28102:30;:68::i;:::-;27336:842;;;;27167:1011;;;;;:::o;33538:774::-;33647:1;33631:18;;:4;:18;;;33623:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33702:16;33721:12;:10;:12::i;:::-;33702:31;;33744:20;33767:21;33785:2;33767:17;:21::i;:::-;33744:44;;33799:24;33826:25;33844:6;33826:17;:25::i;:::-;33799:52;;33864:66;33885:8;33895:4;33909:1;33913:3;33918:7;33864:66;;;;;;;;;;;;:20;:66::i;:::-;33943:19;33965:9;:13;33975:2;33965:13;;;;;;;;;;;:19;33979:4;33965:19;;;;;;;;;;;;;;;;33943:41;;34018:6;34003:11;:21;;33995:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;34137:6;34123:11;:20;34101:9;:13;34111:2;34101:13;;;;;;;;;;;:19;34115:4;34101:19;;;;;;;;;;;;;;;:42;;;;34211:1;34172:54;;34197:4;34172:54;;34187:8;34172:54;;;34215:2;34219:6;34172:54;;;;;;;:::i;:::-;;;;;;;;34239:65;34259:8;34269:4;34283:1;34287:3;34292:7;34239:65;;;;;;;;;;;;:19;:65::i;:::-;33612:700;;;;33538:774;;;:::o;40292:214::-;40374:16;40403:22;40442:1;40428:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40403:41;;40466:7;40455:5;40461:1;40455:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40493:5;40486:12;;;40292:214;;;:::o;45799:329::-;46054:66;46081:8;46091:4;46097:2;46101:3;46106:7;46115:4;46054:26;:66::i;:::-;45799:329;;;;;;:::o;38175:220::-;;;;;;;:::o;38403:898::-;38618:15;:2;:13;;;:15::i;:::-;38614:680;;;38688:2;38671:38;;;38732:8;38763:4;38790:2;38815:6;38844:4;38671:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38650:633;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39156:6;39149:14;;;;;;;;;;;:::i;:::-;;;;;;;;38650:633;;;39205:62;;;;;;;;;;:::i;:::-;;;;;;;;38650:633;38942:43;;;38930:55;;;:8;:55;;;;38926:154;;39010:50;;;;;;;;;;:::i;:::-;;;;;;;;38926:154;38881:214;38614:680;38403:898;;;;;;:::o;39309:975::-;39549:15;:2;:13;;;:15::i;:::-;39545:732;;;39619:2;39602:43;;;39668:8;39699:4;39726:3;39752:7;39782:4;39602:203;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39581:685;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;40139:6;40132:14;;;;;;;;;;;:::i;:::-;;;;;;;;39581:685;;;40188:62;;;;;;;;;;:::i;:::-;;;;;;;;39581:685;39902:48;;;39890:60;;;:8;:60;;;;39864:199;;39993:50;;;;;;;;;;:::i;:::-;;;;;;;;39864:199;39819:259;39545:732;39309:975;;;;;;:::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:765::-;3299:6;3307;3315;3323;3372:3;3360:9;3351:7;3347:23;3343:33;3340:120;;;3379:79;;:::i;:::-;3340:120;3499:1;3524:53;3569:7;3560:6;3549:9;3545:22;3524:53;:::i;:::-;3514:63;;3470:117;3626:2;3652:53;3697:7;3688:6;3677:9;3673:22;3652:53;:::i;:::-;3642:63;;3597:118;3754:2;3780:53;3825:7;3816:6;3805:9;3801:22;3780:53;:::i;:::-;3770:63;;3725:118;3882:2;3908:53;3953:7;3944:6;3933:9;3929:22;3908:53;:::i;:::-;3898:63;;3853:118;3213:765;;;;;;;:::o;3984:329::-;4043:6;4092:2;4080:9;4071:7;4067:23;4063:32;4060:119;;;4098:79;;:::i;:::-;4060:119;4218:1;4243:53;4288:7;4279:6;4268:9;4264:22;4243:53;:::i;:::-;4233:63;;4189:117;3984:329;;;;:::o;4319:99::-;4371:6;4405:5;4399:12;4389:22;;4319:99;;;:::o;4424:169::-;4508:11;4542:6;4537:3;4530:19;4582:4;4577:3;4573:14;4558:29;;4424:169;;;;:::o;4599:246::-;4680:1;4690:113;4704:6;4701:1;4698:13;4690:113;;;4789:1;4784:3;4780:11;4774:18;4770:1;4765:3;4761:11;4754:39;4726:2;4723:1;4719:10;4714:15;;4690:113;;;4837:1;4828:6;4823:3;4819:16;4812:27;4661:184;4599:246;;;:::o;4851:102::-;4892:6;4943:2;4939:7;4934:2;4927:5;4923:14;4919:28;4909:38;;4851:102;;;:::o;4959:377::-;5047:3;5075:39;5108:5;5075:39;:::i;:::-;5130:71;5194:6;5189:3;5130:71;:::i;:::-;5123:78;;5210:65;5268:6;5263:3;5256:4;5249:5;5245:16;5210:65;:::i;:::-;5300:29;5322:6;5300:29;:::i;:::-;5295:3;5291:39;5284:46;;5051:285;4959:377;;;;:::o;5342:313::-;5455:4;5493:2;5482:9;5478:18;5470:26;;5542:9;5536:4;5532:20;5528:1;5517:9;5513:17;5506:47;5570:78;5643:4;5634:6;5570:78;:::i;:::-;5562:86;;5342:313;;;;:::o;5661:619::-;5738:6;5746;5754;5803:2;5791:9;5782:7;5778:23;5774:32;5771:119;;;5809:79;;:::i;:::-;5771:119;5929:1;5954:53;5999:7;5990:6;5979:9;5975:22;5954:53;:::i;:::-;5944:63;;5900:117;6056:2;6082:53;6127:7;6118:6;6107:9;6103:22;6082:53;:::i;:::-;6072:63;;6027:118;6184:2;6210:53;6255:7;6246:6;6235:9;6231:22;6210:53;:::i;:::-;6200:63;;6155:118;5661:619;;;;;:::o;6286:117::-;6395:1;6392;6385:12;6409:180;6457:77;6454:1;6447:88;6554:4;6551:1;6544:15;6578:4;6575:1;6568:15;6595:281;6678:27;6700:4;6678:27;:::i;:::-;6670:6;6666:40;6808:6;6796:10;6793:22;6772:18;6760:10;6757:34;6754:62;6751:88;;;6819:18;;:::i;:::-;6751:88;6859:10;6855:2;6848:22;6638:238;6595:281;;:::o;6882:129::-;6916:6;6943:20;;:::i;:::-;6933:30;;6972:33;7000:4;6992:6;6972:33;:::i;:::-;6882:129;;;:::o;7017:311::-;7094:4;7184:18;7176:6;7173:30;7170:56;;;7206:18;;:::i;:::-;7170:56;7256:4;7248:6;7244:17;7236:25;;7316:4;7310;7306:15;7298:23;;7017:311;;;:::o;7334:117::-;7443:1;7440;7433:12;7474:710;7570:5;7595:81;7611:64;7668:6;7611:64;:::i;:::-;7595:81;:::i;:::-;7586:90;;7696:5;7725:6;7718:5;7711:21;7759:4;7752:5;7748:16;7741:23;;7812:4;7804:6;7800:17;7792:6;7788:30;7841:3;7833:6;7830:15;7827:122;;;7860:79;;:::i;:::-;7827:122;7975:6;7958:220;7992:6;7987:3;7984:15;7958:220;;;8067:3;8096:37;8129:3;8117:10;8096:37;:::i;:::-;8091:3;8084:50;8163:4;8158:3;8154:14;8147:21;;8034:144;8018:4;8013:3;8009:14;8002:21;;7958:220;;;7962:21;7576:608;;7474:710;;;;;:::o;8207:370::-;8278:5;8327:3;8320:4;8312:6;8308:17;8304:27;8294:122;;8335:79;;:::i;:::-;8294:122;8452:6;8439:20;8477:94;8567:3;8559:6;8552:4;8544:6;8540:17;8477:94;:::i;:::-;8468:103;;8284:293;8207:370;;;;:::o;8583:117::-;8692:1;8689;8682:12;8706:307;8767:4;8857:18;8849:6;8846:30;8843:56;;;8879:18;;:::i;:::-;8843:56;8917:29;8939:6;8917:29;:::i;:::-;8909:37;;9001:4;8995;8991:15;8983:23;;8706:307;;;:::o;9019:146::-;9116:6;9111:3;9106;9093:30;9157:1;9148:6;9143:3;9139:16;9132:27;9019:146;;;:::o;9171:423::-;9248:5;9273:65;9289:48;9330:6;9289:48;:::i;:::-;9273:65;:::i;:::-;9264:74;;9361:6;9354:5;9347:21;9399:4;9392:5;9388:16;9437:3;9428:6;9423:3;9419:16;9416:25;9413:112;;;9444:79;;:::i;:::-;9413:112;9534:54;9581:6;9576:3;9571;9534:54;:::i;:::-;9254:340;9171:423;;;;;:::o;9613:338::-;9668:5;9717:3;9710:4;9702:6;9698:17;9694:27;9684:122;;9725:79;;:::i;:::-;9684:122;9842:6;9829:20;9867:78;9941:3;9933:6;9926:4;9918:6;9914:17;9867:78;:::i;:::-;9858:87;;9674:277;9613:338;;;;:::o;9957:1509::-;10111:6;10119;10127;10135;10143;10192:3;10180:9;10171:7;10167:23;10163:33;10160:120;;;10199:79;;:::i;:::-;10160:120;10319:1;10344:53;10389:7;10380:6;10369:9;10365:22;10344:53;:::i;:::-;10334:63;;10290:117;10446:2;10472:53;10517:7;10508:6;10497:9;10493:22;10472:53;:::i;:::-;10462:63;;10417:118;10602:2;10591:9;10587:18;10574:32;10633:18;10625:6;10622:30;10619:117;;;10655:79;;:::i;:::-;10619:117;10760:78;10830:7;10821:6;10810:9;10806:22;10760:78;:::i;:::-;10750:88;;10545:303;10915:2;10904:9;10900:18;10887:32;10946:18;10938:6;10935:30;10932:117;;;10968:79;;:::i;:::-;10932:117;11073:78;11143:7;11134:6;11123:9;11119:22;11073:78;:::i;:::-;11063:88;;10858:303;11228:3;11217:9;11213:19;11200:33;11260:18;11252:6;11249:30;11246:117;;;11282:79;;:::i;:::-;11246:117;11387:62;11441:7;11432:6;11421:9;11417:22;11387:62;:::i;:::-;11377:72;;11171:288;9957:1509;;;;;;;;:::o;11472:311::-;11549:4;11639:18;11631:6;11628:30;11625:56;;;11661:18;;:::i;:::-;11625:56;11711:4;11703:6;11699:17;11691:25;;11771:4;11765;11761:15;11753:23;;11472:311;;;:::o;11806:710::-;11902:5;11927:81;11943:64;12000:6;11943:64;:::i;:::-;11927:81;:::i;:::-;11918:90;;12028:5;12057:6;12050:5;12043:21;12091:4;12084:5;12080:16;12073:23;;12144:4;12136:6;12132:17;12124:6;12120:30;12173:3;12165:6;12162:15;12159:122;;;12192:79;;:::i;:::-;12159:122;12307:6;12290:220;12324:6;12319:3;12316:15;12290:220;;;12399:3;12428:37;12461:3;12449:10;12428:37;:::i;:::-;12423:3;12416:50;12495:4;12490:3;12486:14;12479:21;;12366:144;12350:4;12345:3;12341:14;12334:21;;12290:220;;;12294:21;11908:608;;11806:710;;;;;:::o;12539:370::-;12610:5;12659:3;12652:4;12644:6;12640:17;12636:27;12626:122;;12667:79;;:::i;:::-;12626:122;12784:6;12771:20;12809:94;12899:3;12891:6;12884:4;12876:6;12872:17;12809:94;:::i;:::-;12800:103;;12616:293;12539:370;;;;:::o;12915:894::-;13033:6;13041;13090:2;13078:9;13069:7;13065:23;13061:32;13058:119;;;13096:79;;:::i;:::-;13058:119;13244:1;13233:9;13229:17;13216:31;13274:18;13266:6;13263:30;13260:117;;;13296:79;;:::i;:::-;13260:117;13401:78;13471:7;13462:6;13451:9;13447:22;13401:78;:::i;:::-;13391:88;;13187:302;13556:2;13545:9;13541:18;13528:32;13587:18;13579:6;13576:30;13573:117;;;13609:79;;:::i;:::-;13573:117;13714:78;13784:7;13775:6;13764:9;13760:22;13714:78;:::i;:::-;13704:88;;13499:303;12915:894;;;;;:::o;13815:114::-;13882:6;13916:5;13910:12;13900:22;;13815:114;;;:::o;13935:184::-;14034:11;14068:6;14063:3;14056:19;14108:4;14103:3;14099:14;14084:29;;13935:184;;;;:::o;14125:132::-;14192:4;14215:3;14207:11;;14245:4;14240:3;14236:14;14228:22;;14125:132;;;:::o;14263:108::-;14340:24;14358:5;14340:24;:::i;:::-;14335:3;14328:37;14263:108;;:::o;14377:179::-;14446:10;14467:46;14509:3;14501:6;14467:46;:::i;:::-;14545:4;14540:3;14536:14;14522:28;;14377:179;;;;:::o;14562:113::-;14632:4;14664;14659:3;14655:14;14647:22;;14562:113;;;:::o;14711:732::-;14830:3;14859:54;14907:5;14859:54;:::i;:::-;14929:86;15008:6;15003:3;14929:86;:::i;:::-;14922:93;;15039:56;15089:5;15039:56;:::i;:::-;15118:7;15149:1;15134:284;15159:6;15156:1;15153:13;15134:284;;;15235:6;15229:13;15262:63;15321:3;15306:13;15262:63;:::i;:::-;15255:70;;15348:60;15401:6;15348:60;:::i;:::-;15338:70;;15194:224;15181:1;15178;15174:9;15169:14;;15134:284;;;15138:14;15434:3;15427:10;;14835:608;;;14711:732;;;;:::o;15449:373::-;15592:4;15630:2;15619:9;15615:18;15607:26;;15679:9;15673:4;15669:20;15665:1;15654:9;15650:17;15643:47;15707:108;15810:4;15801:6;15707:108;:::i;:::-;15699:116;;15449:373;;;;:::o;15828:1039::-;15955:6;15963;15971;16020:2;16008:9;15999:7;15995:23;15991:32;15988:119;;;16026:79;;:::i;:::-;15988:119;16146:1;16171:53;16216:7;16207:6;16196:9;16192:22;16171:53;:::i;:::-;16161:63;;16117:117;16301:2;16290:9;16286:18;16273:32;16332:18;16324:6;16321:30;16318:117;;;16354:79;;:::i;:::-;16318:117;16459:78;16529:7;16520:6;16509:9;16505:22;16459:78;:::i;:::-;16449:88;;16244:303;16614:2;16603:9;16599:18;16586:32;16645:18;16637:6;16634:30;16631:117;;;16667:79;;:::i;:::-;16631:117;16772:78;16842:7;16833:6;16822:9;16818:22;16772:78;:::i;:::-;16762:88;;16557:303;15828:1039;;;;;:::o;16873:308::-;16935:4;17025:18;17017:6;17014:30;17011:56;;;17047:18;;:::i;:::-;17011:56;17085:29;17107:6;17085:29;:::i;:::-;17077:37;;17169:4;17163;17159:15;17151:23;;16873:308;;;:::o;17187:425::-;17265:5;17290:66;17306:49;17348:6;17306:49;:::i;:::-;17290:66;:::i;:::-;17281:75;;17379:6;17372:5;17365:21;17417:4;17410:5;17406:16;17455:3;17446:6;17441:3;17437:16;17434:25;17431:112;;;17462:79;;:::i;:::-;17431:112;17552:54;17599:6;17594:3;17589;17552:54;:::i;:::-;17271:341;17187:425;;;;;:::o;17632:340::-;17688:5;17737:3;17730:4;17722:6;17718:17;17714:27;17704:122;;17745:79;;:::i;:::-;17704:122;17862:6;17849:20;17887:79;17962:3;17954:6;17947:4;17939:6;17935:17;17887:79;:::i;:::-;17878:88;;17694:278;17632:340;;;;:::o;17978:509::-;18047:6;18096:2;18084:9;18075:7;18071:23;18067:32;18064:119;;;18102:79;;:::i;:::-;18064:119;18250:1;18239:9;18235:17;18222:31;18280:18;18272:6;18269:30;18266:117;;;18302:79;;:::i;:::-;18266:117;18407:63;18462:7;18453:6;18442:9;18438:22;18407:63;:::i;:::-;18397:73;;18193:287;17978:509;;;;:::o;18493:118::-;18580:24;18598:5;18580:24;:::i;:::-;18575:3;18568:37;18493:118;;:::o;18617:222::-;18710:4;18748:2;18737:9;18733:18;18725:26;;18761:71;18829:1;18818:9;18814:17;18805:6;18761:71;:::i;:::-;18617:222;;;;:::o;18845:116::-;18915:21;18930:5;18915:21;:::i;:::-;18908:5;18905:32;18895:60;;18951:1;18948;18941:12;18895:60;18845:116;:::o;18967:133::-;19010:5;19048:6;19035:20;19026:29;;19064:30;19088:5;19064:30;:::i;:::-;18967:133;;;;:::o;19106:468::-;19171:6;19179;19228:2;19216:9;19207:7;19203:23;19199:32;19196:119;;;19234:79;;:::i;:::-;19196:119;19354:1;19379:53;19424:7;19415:6;19404:9;19400:22;19379:53;:::i;:::-;19369:63;;19325:117;19481:2;19507:50;19549:7;19540:6;19529:9;19525:22;19507:50;:::i;:::-;19497:60;;19452:115;19106:468;;;;;:::o;19580:474::-;19648:6;19656;19705:2;19693:9;19684:7;19680:23;19676:32;19673:119;;;19711:79;;:::i;:::-;19673:119;19831:1;19856:53;19901:7;19892:6;19881:9;19877:22;19856:53;:::i;:::-;19846:63;;19802:117;19958:2;19984:53;20029:7;20020:6;20009:9;20005:22;19984:53;:::i;:::-;19974:63;;19929:118;19580:474;;;;;:::o;20060:1089::-;20164:6;20172;20180;20188;20196;20245:3;20233:9;20224:7;20220:23;20216:33;20213:120;;;20252:79;;:::i;:::-;20213:120;20372:1;20397:53;20442:7;20433:6;20422:9;20418:22;20397:53;:::i;:::-;20387:63;;20343:117;20499:2;20525:53;20570:7;20561:6;20550:9;20546:22;20525:53;:::i;:::-;20515:63;;20470:118;20627:2;20653:53;20698:7;20689:6;20678:9;20674:22;20653:53;:::i;:::-;20643:63;;20598:118;20755:2;20781:53;20826:7;20817:6;20806:9;20802:22;20781:53;:::i;:::-;20771:63;;20726:118;20911:3;20900:9;20896:19;20883:33;20943:18;20935:6;20932:30;20929:117;;;20965:79;;:::i;:::-;20929:117;21070:62;21124:7;21115:6;21104:9;21100:22;21070:62;:::i;:::-;21060:72;;20854:288;20060:1089;;;;;;;;:::o;21155:329::-;21214:6;21263:2;21251:9;21242:7;21238:23;21234:32;21231:119;;;21269:79;;:::i;:::-;21231:119;21389:1;21414:53;21459:7;21450:6;21439:9;21435:22;21414:53;:::i;:::-;21404:63;;21360:117;21155:329;;;;:::o;21490:230::-;21630:34;21626:1;21618:6;21614:14;21607:58;21699:13;21694:2;21686:6;21682:15;21675:38;21490:230;:::o;21726:366::-;21868:3;21889:67;21953:2;21948:3;21889:67;:::i;:::-;21882:74;;21965:93;22054:3;21965:93;:::i;:::-;22083:2;22078:3;22074:12;22067:19;;21726:366;;;:::o;22098:419::-;22264:4;22302:2;22291:9;22287:18;22279:26;;22351:9;22345:4;22341:20;22337:1;22326:9;22322:17;22315:47;22379:131;22505:4;22379:131;:::i;:::-;22371:139;;22098:419;;;:::o;22523:157::-;22663:9;22659:1;22651:6;22647:14;22640:33;22523:157;:::o;22686:365::-;22828:3;22849:66;22913:1;22908:3;22849:66;:::i;:::-;22842:73;;22924:93;23013:3;22924:93;:::i;:::-;23042:2;23037:3;23033:12;23026:19;;22686:365;;;:::o;23057:419::-;23223:4;23261:2;23250:9;23246:18;23238:26;;23310:9;23304:4;23300:20;23296:1;23285:9;23281:17;23274:47;23338:131;23464:4;23338:131;:::i;:::-;23330:139;;23057:419;;;:::o;23482:162::-;23622:14;23618:1;23610:6;23606:14;23599:38;23482:162;:::o;23650:366::-;23792:3;23813:67;23877:2;23872:3;23813:67;:::i;:::-;23806:74;;23889:93;23978:3;23889:93;:::i;:::-;24007:2;24002:3;23998:12;23991:19;;23650:366;;;:::o;24022:419::-;24188:4;24226:2;24215:9;24211:18;24203:26;;24275:9;24269:4;24265:20;24261:1;24250:9;24246:17;24239:47;24303:131;24429:4;24303:131;:::i;:::-;24295:139;;24022:419;;;:::o;24447:180::-;24495:77;24492:1;24485:88;24592:4;24589:1;24582:15;24616:4;24613:1;24606:15;24633:320;24677:6;24714:1;24708:4;24704:12;24694:22;;24761:1;24755:4;24751:12;24782:18;24772:81;;24838:4;24830:6;24826:17;24816:27;;24772:81;24900:2;24892:6;24889:14;24869:18;24866:38;24863:84;;24919:18;;:::i;:::-;24863:84;24684:269;24633:320;;;:::o;24959:182::-;25099:34;25095:1;25087:6;25083:14;25076:58;24959:182;:::o;25147:366::-;25289:3;25310:67;25374:2;25369:3;25310:67;:::i;:::-;25303:74;;25386:93;25475:3;25386:93;:::i;:::-;25504:2;25499:3;25495:12;25488:19;;25147:366;;;:::o;25519:419::-;25685:4;25723:2;25712:9;25708:18;25700:26;;25772:9;25766:4;25762:20;25758:1;25747:9;25743:17;25736:47;25800:131;25926:4;25800:131;:::i;:::-;25792:139;;25519:419;;;:::o;25944:237::-;26084:34;26080:1;26072:6;26068:14;26061:58;26153:20;26148:2;26140:6;26136:15;26129:45;25944:237;:::o;26187:366::-;26329:3;26350:67;26414:2;26409:3;26350:67;:::i;:::-;26343:74;;26426:93;26515:3;26426:93;:::i;:::-;26544:2;26539:3;26535:12;26528:19;;26187:366;;;:::o;26559:419::-;26725:4;26763:2;26752:9;26748:18;26740:26;;26812:9;26806:4;26802:20;26798:1;26787:9;26783:17;26776:47;26840:131;26966:4;26840:131;:::i;:::-;26832:139;;26559:419;;;:::o;26984:228::-;27124:34;27120:1;27112:6;27108:14;27101:58;27193:11;27188:2;27180:6;27176:15;27169:36;26984:228;:::o;27218:366::-;27360:3;27381:67;27445:2;27440:3;27381:67;:::i;:::-;27374:74;;27457:93;27546:3;27457:93;:::i;:::-;27575:2;27570:3;27566:12;27559:19;;27218:366;;;:::o;27590:419::-;27756:4;27794:2;27783:9;27779:18;27771:26;;27843:9;27837:4;27833:20;27829:1;27818:9;27814:17;27807:47;27871:131;27997:4;27871:131;:::i;:::-;27863:139;;27590:419;;;:::o;28015:180::-;28063:77;28060:1;28053:88;28160:4;28157:1;28150:15;28184:4;28181:1;28174:15;28201:180;28249:77;28246:1;28239:88;28346:4;28343:1;28336:15;28370:4;28367:1;28360:15;28387:233;28426:3;28449:24;28467:5;28449:24;:::i;:::-;28440:33;;28495:66;28488:5;28485:77;28482:103;;28565:18;;:::i;:::-;28482:103;28612:1;28605:5;28601:13;28594:20;;28387:233;;;:::o;28626:166::-;28766:18;28762:1;28754:6;28750:14;28743:42;28626:166;:::o;28798:366::-;28940:3;28961:67;29025:2;29020:3;28961:67;:::i;:::-;28954:74;;29037:93;29126:3;29037:93;:::i;:::-;29155:2;29150:3;29146:12;29139:19;;28798:366;;;:::o;29170:419::-;29336:4;29374:2;29363:9;29359:18;29351:26;;29423:9;29417:4;29413:20;29409:1;29398:9;29394:17;29387:47;29451:131;29577:4;29451:131;:::i;:::-;29443:139;;29170:419;;;:::o;29595:410::-;29635:7;29658:20;29676:1;29658:20;:::i;:::-;29653:25;;29692:20;29710:1;29692:20;:::i;:::-;29687:25;;29747:1;29744;29740:9;29769:30;29787:11;29769:30;:::i;:::-;29758:41;;29948:1;29939:7;29935:15;29932:1;29929:22;29909:1;29902:9;29882:83;29859:139;;29978:18;;:::i;:::-;29859:139;29643:362;29595:410;;;;:::o;30011:163::-;30151:15;30147:1;30139:6;30135:14;30128:39;30011:163;:::o;30180:366::-;30322:3;30343:67;30407:2;30402:3;30343:67;:::i;:::-;30336:74;;30419:93;30508:3;30419:93;:::i;:::-;30537:2;30532:3;30528:12;30521:19;;30180:366;;;:::o;30552:419::-;30718:4;30756:2;30745:9;30741:18;30733:26;;30805:9;30799:4;30795:20;30791:1;30780:9;30776:17;30769:47;30833:131;30959:4;30833:131;:::i;:::-;30825:139;;30552:419;;;:::o;30977:164::-;31117:16;31113:1;31105:6;31101:14;31094:40;30977:164;:::o;31147:366::-;31289:3;31310:67;31374:2;31369:3;31310:67;:::i;:::-;31303:74;;31386:93;31475:3;31386:93;:::i;:::-;31504:2;31499:3;31495:12;31488:19;;31147:366;;;:::o;31519:419::-;31685:4;31723:2;31712:9;31708:18;31700:26;;31772:9;31766:4;31762:20;31758:1;31747:9;31743:17;31736:47;31800:131;31926:4;31800:131;:::i;:::-;31792:139;;31519:419;;;:::o;31944:191::-;31984:3;32003:20;32021:1;32003:20;:::i;:::-;31998:25;;32037:20;32055:1;32037:20;:::i;:::-;32032:25;;32080:1;32077;32073:9;32066:16;;32101:3;32098:1;32095:10;32092:36;;;32108:18;;:::i;:::-;32092:36;31944:191;;;;:::o;32141:228::-;32281:34;32277:1;32269:6;32265:14;32258:58;32350:11;32345:2;32337:6;32333:15;32326:36;32141:228;:::o;32375:366::-;32517:3;32538:67;32602:2;32597:3;32538:67;:::i;:::-;32531:74;;32614:93;32703:3;32614:93;:::i;:::-;32732:2;32727:3;32723:12;32716:19;;32375:366;;;:::o;32747:419::-;32913:4;32951:2;32940:9;32936:18;32928:26;;33000:9;32994:4;32990:20;32986:1;32975:9;32971:17;32964:47;33028:131;33154:4;33028:131;:::i;:::-;33020:139;;32747:419;;;:::o;33172:147::-;33273:11;33310:3;33295:18;;33172:147;;;;:::o;33325:114::-;;:::o;33445:398::-;33604:3;33625:83;33706:1;33701:3;33625:83;:::i;:::-;33618:90;;33717:93;33806:3;33717:93;:::i;:::-;33835:1;33830:3;33826:11;33819:18;;33445:398;;;:::o;33849:379::-;34033:3;34055:147;34198:3;34055:147;:::i;:::-;34048:154;;34219:3;34212:10;;33849:379;;;:::o;34234:156::-;34374:8;34370:1;34362:6;34358:14;34351:32;34234:156;:::o;34396:365::-;34538:3;34559:66;34623:1;34618:3;34559:66;:::i;:::-;34552:73;;34634:93;34723:3;34634:93;:::i;:::-;34752:2;34747:3;34743:12;34736:19;;34396:365;;;:::o;34767:419::-;34933:4;34971:2;34960:9;34956:18;34948:26;;35020:9;35014:4;35010:20;35006:1;34995:9;34991:17;34984:47;35048:131;35174:4;35048:131;:::i;:::-;35040:139;;34767:419;;;:::o;35192:225::-;35332:34;35328:1;35320:6;35316:14;35309:58;35401:8;35396:2;35388:6;35384:15;35377:33;35192:225;:::o;35423:366::-;35565:3;35586:67;35650:2;35645:3;35586:67;:::i;:::-;35579:74;;35662:93;35751:3;35662:93;:::i;:::-;35780:2;35775:3;35771:12;35764:19;;35423:366;;;:::o;35795:419::-;35961:4;35999:2;35988:9;35984:18;35976:26;;36048:9;36042:4;36038:20;36034:1;36023:9;36019:17;36012:47;36076:131;36202:4;36076:131;:::i;:::-;36068:139;;35795:419;;;:::o;36220:227::-;36360:34;36356:1;36348:6;36344:14;36337:58;36429:10;36424:2;36416:6;36412:15;36405:35;36220:227;:::o;36453:366::-;36595:3;36616:67;36680:2;36675:3;36616:67;:::i;:::-;36609:74;;36692:93;36781:3;36692:93;:::i;:::-;36810:2;36805:3;36801:12;36794:19;;36453:366;;;:::o;36825:419::-;36991:4;37029:2;37018:9;37014:18;37006:26;;37078:9;37072:4;37068:20;37064:1;37053:9;37049:17;37042:47;37106:131;37232:4;37106:131;:::i;:::-;37098:139;;36825:419;;;:::o;37250:194::-;37290:4;37310:20;37328:1;37310:20;:::i;:::-;37305:25;;37344:20;37362:1;37344:20;:::i;:::-;37339:25;;37388:1;37385;37381:9;37373:17;;37412:1;37406:4;37403:11;37400:37;;;37417:18;;:::i;:::-;37400:37;37250:194;;;;:::o;37450:102::-;37492:8;37539:5;37536:1;37532:13;37511:34;;37450:102;;;:::o;37558:848::-;37619:5;37626:4;37650:6;37641:15;;37674:5;37665:14;;37688:712;37709:1;37699:8;37696:15;37688:712;;;37804:4;37799:3;37795:14;37789:4;37786:24;37783:50;;;37813:18;;:::i;:::-;37783:50;37863:1;37853:8;37849:16;37846:451;;;38278:4;38271:5;38267:16;38258:25;;37846:451;38328:4;38322;38318:15;38310:23;;38358:32;38381:8;38358:32;:::i;:::-;38346:44;;37688:712;;;37558:848;;;;;;;:::o;38412:1073::-;38466:5;38657:8;38647:40;;38678:1;38669:10;;38680:5;;38647:40;38706:4;38696:36;;38723:1;38714:10;;38725:5;;38696:36;38792:4;38840:1;38835:27;;;;38876:1;38871:191;;;;38785:277;;38835:27;38853:1;38844:10;;38855:5;;;38871:191;38916:3;38906:8;38903:17;38900:43;;;38923:18;;:::i;:::-;38900:43;38972:8;38969:1;38965:16;38956:25;;39007:3;39000:5;38997:14;38994:40;;;39014:18;;:::i;:::-;38994:40;39047:5;;;38785:277;;39171:2;39161:8;39158:16;39152:3;39146:4;39143:13;39139:36;39121:2;39111:8;39108:16;39103:2;39097:4;39094:12;39090:35;39074:111;39071:246;;;39227:8;39221:4;39217:19;39208:28;;39262:3;39255:5;39252:14;39249:40;;;39269:18;;:::i;:::-;39249:40;39302:5;;39071:246;39342:42;39380:3;39370:8;39364:4;39361:1;39342:42;:::i;:::-;39327:57;;;;39416:4;39411:3;39407:14;39400:5;39397:25;39394:51;;;39425:18;;:::i;:::-;39394:51;39474:4;39467:5;39463:16;39454:25;;38412:1073;;;;;;:::o;39491:285::-;39551:5;39575:23;39593:4;39575:23;:::i;:::-;39567:31;;39619:27;39637:8;39619:27;:::i;:::-;39607:39;;39665:104;39702:66;39692:8;39686:4;39665:104;:::i;:::-;39656:113;;39491:285;;;;:::o;39782:220::-;39922:34;39918:1;39910:6;39906:14;39899:58;39991:3;39986:2;39978:6;39974:15;39967:28;39782:220;:::o;40008:366::-;40150:3;40171:67;40235:2;40230:3;40171:67;:::i;:::-;40164:74;;40247:93;40336:3;40247:93;:::i;:::-;40365:2;40360:3;40356:12;40349:19;;40008:366;;;:::o;40380:419::-;40546:4;40584:2;40573:9;40569:18;40561:26;;40633:9;40627:4;40623:20;40619:1;40608:9;40604:17;40597:47;40661:131;40787:4;40661:131;:::i;:::-;40653:139;;40380:419;;;:::o;40805:332::-;40926:4;40964:2;40953:9;40949:18;40941:26;;40977:71;41045:1;41034:9;41030:17;41021:6;40977:71;:::i;:::-;41058:72;41126:2;41115:9;41111:18;41102:6;41058:72;:::i;:::-;40805:332;;;;;:::o;41143:227::-;41283:34;41279:1;41271:6;41267:14;41260:58;41352:10;41347:2;41339:6;41335:15;41328:35;41143:227;:::o;41376:366::-;41518:3;41539:67;41603:2;41598:3;41539:67;:::i;:::-;41532:74;;41615:93;41704:3;41615:93;:::i;:::-;41733:2;41728:3;41724:12;41717:19;;41376:366;;;:::o;41748:419::-;41914:4;41952:2;41941:9;41937:18;41929:26;;42001:9;41995:4;41991:20;41987:1;41976:9;41972:17;41965:47;42029:131;42155:4;42029:131;:::i;:::-;42021:139;;41748:419;;;:::o;42173:224::-;42313:34;42309:1;42301:6;42297:14;42290:58;42382:7;42377:2;42369:6;42365:15;42358:32;42173:224;:::o;42403:366::-;42545:3;42566:67;42630:2;42625:3;42566:67;:::i;:::-;42559:74;;42642:93;42731:3;42642:93;:::i;:::-;42760:2;42755:3;42751:12;42744:19;;42403:366;;;:::o;42775:419::-;42941:4;42979:2;42968:9;42964:18;42956:26;;43028:9;43022:4;43018:20;43014:1;43003:9;42999:17;42992:47;43056:131;43182:4;43056:131;:::i;:::-;43048:139;;42775:419;;;:::o;43200:229::-;43340:34;43336:1;43328:6;43324:14;43317:58;43409:12;43404:2;43396:6;43392:15;43385:37;43200:229;:::o;43435:366::-;43577:3;43598:67;43662:2;43657:3;43598:67;:::i;:::-;43591:74;;43674:93;43763:3;43674:93;:::i;:::-;43792:2;43787:3;43783:12;43776:19;;43435:366;;;:::o;43807:419::-;43973:4;44011:2;44000:9;43996:18;43988:26;;44060:9;44054:4;44050:20;44046:1;44035:9;44031:17;44024:47;44088:131;44214:4;44088:131;:::i;:::-;44080:139;;43807:419;;;:::o;44232:634::-;44453:4;44491:2;44480:9;44476:18;44468:26;;44540:9;44534:4;44530:20;44526:1;44515:9;44511:17;44504:47;44568:108;44671:4;44662:6;44568:108;:::i;:::-;44560:116;;44723:9;44717:4;44713:20;44708:2;44697:9;44693:18;44686:48;44751:108;44854:4;44845:6;44751:108;:::i;:::-;44743:116;;44232:634;;;;;:::o;44872:222::-;45012:34;45008:1;45000:6;44996:14;44989:58;45081:5;45076:2;45068:6;45064:15;45057:30;44872:222;:::o;45100:366::-;45242:3;45263:67;45327:2;45322:3;45263:67;:::i;:::-;45256:74;;45339:93;45428:3;45339:93;:::i;:::-;45457:2;45452:3;45448:12;45441:19;;45100:366;;;:::o;45472:419::-;45638:4;45676:2;45665:9;45661:18;45653:26;;45725:9;45719:4;45715:20;45711:1;45700:9;45696:17;45689:47;45753:131;45879:4;45753:131;:::i;:::-;45745:139;;45472:419;;;:::o;45897:223::-;46037:34;46033:1;46025:6;46021:14;46014:58;46106:6;46101:2;46093:6;46089:15;46082:31;45897:223;:::o;46126:366::-;46268:3;46289:67;46353:2;46348:3;46289:67;:::i;:::-;46282:74;;46365:93;46454:3;46365:93;:::i;:::-;46483:2;46478:3;46474:12;46467:19;;46126:366;;;:::o;46498:419::-;46664:4;46702:2;46691:9;46687:18;46679:26;;46751:9;46745:4;46741:20;46737:1;46726:9;46722:17;46715:47;46779:131;46905:4;46779:131;:::i;:::-;46771:139;;46498:419;;;:::o;46923:141::-;46972:4;46995:3;46987:11;;47018:3;47015:1;47008:14;47052:4;47049:1;47039:18;47031:26;;46923:141;;;:::o;47070:93::-;47107:6;47154:2;47149;47142:5;47138:14;47134:23;47124:33;;47070:93;;;:::o;47169:107::-;47213:8;47263:5;47257:4;47253:16;47232:37;;47169:107;;;;:::o;47282:393::-;47351:6;47401:1;47389:10;47385:18;47424:97;47454:66;47443:9;47424:97;:::i;:::-;47542:39;47572:8;47561:9;47542:39;:::i;:::-;47530:51;;47614:4;47610:9;47603:5;47599:21;47590:30;;47663:4;47653:8;47649:19;47642:5;47639:30;47629:40;;47358:317;;47282:393;;;;;:::o;47681:60::-;47709:3;47730:5;47723:12;;47681:60;;;:::o;47747:142::-;47797:9;47830:53;47848:34;47857:24;47875:5;47857:24;:::i;:::-;47848:34;:::i;:::-;47830:53;:::i;:::-;47817:66;;47747:142;;;:::o;47895:75::-;47938:3;47959:5;47952:12;;47895:75;;;:::o;47976:269::-;48086:39;48117:7;48086:39;:::i;:::-;48147:91;48196:41;48220:16;48196:41;:::i;:::-;48188:6;48181:4;48175:11;48147:91;:::i;:::-;48141:4;48134:105;48052:193;47976:269;;;:::o;48251:73::-;48296:3;48251:73;:::o;48330:189::-;48407:32;;:::i;:::-;48448:65;48506:6;48498;48492:4;48448:65;:::i;:::-;48383:136;48330:189;;:::o;48525:186::-;48585:120;48602:3;48595:5;48592:14;48585:120;;;48656:39;48693:1;48686:5;48656:39;:::i;:::-;48629:1;48622:5;48618:13;48609:22;;48585:120;;;48525:186;;:::o;48717:543::-;48818:2;48813:3;48810:11;48807:446;;;48852:38;48884:5;48852:38;:::i;:::-;48936:29;48954:10;48936:29;:::i;:::-;48926:8;48922:44;49119:2;49107:10;49104:18;49101:49;;;49140:8;49125:23;;49101:49;49163:80;49219:22;49237:3;49219:22;:::i;:::-;49209:8;49205:37;49192:11;49163:80;:::i;:::-;48822:431;;48807:446;48717:543;;;:::o;49266:117::-;49320:8;49370:5;49364:4;49360:16;49339:37;;49266:117;;;;:::o;49389:169::-;49433:6;49466:51;49514:1;49510:6;49502:5;49499:1;49495:13;49466:51;:::i;:::-;49462:56;49547:4;49541;49537:15;49527:25;;49440:118;49389:169;;;;:::o;49563:295::-;49639:4;49785:29;49810:3;49804:4;49785:29;:::i;:::-;49777:37;;49847:3;49844:1;49840:11;49834:4;49831:21;49823:29;;49563:295;;;;:::o;49863:1395::-;49980:37;50013:3;49980:37;:::i;:::-;50082:18;50074:6;50071:30;50068:56;;;50104:18;;:::i;:::-;50068:56;50148:38;50180:4;50174:11;50148:38;:::i;:::-;50233:67;50293:6;50285;50279:4;50233:67;:::i;:::-;50327:1;50351:4;50338:17;;50383:2;50375:6;50372:14;50400:1;50395:618;;;;51057:1;51074:6;51071:77;;;51123:9;51118:3;51114:19;51108:26;51099:35;;51071:77;51174:67;51234:6;51227:5;51174:67;:::i;:::-;51168:4;51161:81;51030:222;50365:887;;50395:618;50447:4;50443:9;50435:6;50431:22;50481:37;50513:4;50481:37;:::i;:::-;50540:1;50554:208;50568:7;50565:1;50562:14;50554:208;;;50647:9;50642:3;50638:19;50632:26;50624:6;50617:42;50698:1;50690:6;50686:14;50676:24;;50745:2;50734:9;50730:18;50717:31;;50591:4;50588:1;50584:12;50579:17;;50554:208;;;50790:6;50781:7;50778:19;50775:179;;;50848:9;50843:3;50839:19;50833:26;50891:48;50933:4;50925:6;50921:17;50910:9;50891:48;:::i;:::-;50883:6;50876:64;50798:156;50775:179;51000:1;50996;50988:6;50984:14;50980:22;50974:4;50967:36;50402:611;;;50365:887;;49955:1303;;;49863:1395;;:::o;51264:228::-;51404:34;51400:1;51392:6;51388:14;51381:58;51473:11;51468:2;51460:6;51456:15;51449:36;51264:228;:::o;51498:366::-;51640:3;51661:67;51725:2;51720:3;51661:67;:::i;:::-;51654:74;;51737:93;51826:3;51737:93;:::i;:::-;51855:2;51850:3;51846:12;51839:19;;51498:366;;;:::o;51870:419::-;52036:4;52074:2;52063:9;52059:18;52051:26;;52123:9;52117:4;52113:20;52109:1;52098:9;52094:17;52087:47;52151:131;52277:4;52151:131;:::i;:::-;52143:139;;51870:419;;;:::o;52295:98::-;52346:6;52380:5;52374:12;52364:22;;52295:98;;;:::o;52399:168::-;52482:11;52516:6;52511:3;52504:19;52556:4;52551:3;52547:14;52532:29;;52399:168;;;;:::o;52573:373::-;52659:3;52687:38;52719:5;52687:38;:::i;:::-;52741:70;52804:6;52799:3;52741:70;:::i;:::-;52734:77;;52820:65;52878:6;52873:3;52866:4;52859:5;52855:16;52820:65;:::i;:::-;52910:29;52932:6;52910:29;:::i;:::-;52905:3;52901:39;52894:46;;52663:283;52573:373;;;;:::o;52952:751::-;53175:4;53213:3;53202:9;53198:19;53190:27;;53227:71;53295:1;53284:9;53280:17;53271:6;53227:71;:::i;:::-;53308:72;53376:2;53365:9;53361:18;53352:6;53308:72;:::i;:::-;53390;53458:2;53447:9;53443:18;53434:6;53390:72;:::i;:::-;53472;53540:2;53529:9;53525:18;53516:6;53472:72;:::i;:::-;53592:9;53586:4;53582:20;53576:3;53565:9;53561:19;53554:49;53620:76;53691:4;53682:6;53620:76;:::i;:::-;53612:84;;52952:751;;;;;;;;:::o;53709:141::-;53765:5;53796:6;53790:13;53781:22;;53812:32;53838:5;53812:32;:::i;:::-;53709:141;;;;:::o;53856:349::-;53925:6;53974:2;53962:9;53953:7;53949:23;53945:32;53942:119;;;53980:79;;:::i;:::-;53942:119;54100:1;54125:63;54180:7;54171:6;54160:9;54156:22;54125:63;:::i;:::-;54115:73;;54071:127;53856:349;;;;:::o;54211:106::-;54255:8;54304:5;54299:3;54295:15;54274:36;;54211:106;;;:::o;54323:183::-;54358:3;54396:1;54378:16;54375:23;54372:128;;;54434:1;54431;54428;54413:23;54456:34;54487:1;54481:8;54456:34;:::i;:::-;54449:41;;54372:128;54323:183;:::o;54512:711::-;54551:3;54589:4;54571:16;54568:26;54597:5;54565:39;54626:20;;:::i;:::-;54701:1;54683:16;54679:24;54676:1;54670:4;54655:49;54734:4;54728:11;54833:16;54826:4;54818:6;54814:17;54811:39;54778:18;54770:6;54767:30;54751:113;54748:146;;;54879:5;;;;54748:146;54925:6;54919:4;54915:17;54961:3;54955:10;54988:18;54980:6;54977:30;54974:43;;;55010:5;;;;;;54974:43;55058:6;55051:4;55046:3;55042:14;55038:27;55117:1;55099:16;55095:24;55089:4;55085:35;55080:3;55077:44;55074:57;;;55124:5;;;;;;;55074:57;55141;55189:6;55183:4;55179:17;55171:6;55167:30;55161:4;55141:57;:::i;:::-;55214:3;55207:10;;54555:668;;;;;54512:711;;:::o;55229:239::-;55369:34;55365:1;55357:6;55353:14;55346:58;55438:22;55433:2;55425:6;55421:15;55414:47;55229:239;:::o;55474:366::-;55616:3;55637:67;55701:2;55696:3;55637:67;:::i;:::-;55630:74;;55713:93;55802:3;55713:93;:::i;:::-;55831:2;55826:3;55822:12;55815:19;;55474:366;;;:::o;55846:419::-;56012:4;56050:2;56039:9;56035:18;56027:26;;56099:9;56093:4;56089:20;56085:1;56074:9;56070:17;56063:47;56127:131;56253:4;56127:131;:::i;:::-;56119:139;;55846:419;;;:::o;56271:227::-;56411:34;56407:1;56399:6;56395:14;56388:58;56480:10;56475:2;56467:6;56463:15;56456:35;56271:227;:::o;56504:366::-;56646:3;56667:67;56731:2;56726:3;56667:67;:::i;:::-;56660:74;;56743:93;56832:3;56743:93;:::i;:::-;56861:2;56856:3;56852:12;56845:19;;56504:366;;;:::o;56876:419::-;57042:4;57080:2;57069:9;57065:18;57057:26;;57129:9;57123:4;57119:20;57115:1;57104:9;57100:17;57093:47;57157:131;57283:4;57157:131;:::i;:::-;57149:139;;56876:419;;;:::o;57301:1053::-;57624:4;57662:3;57651:9;57647:19;57639:27;;57676:71;57744:1;57733:9;57729:17;57720:6;57676:71;:::i;:::-;57757:72;57825:2;57814:9;57810:18;57801:6;57757:72;:::i;:::-;57876:9;57870:4;57866:20;57861:2;57850:9;57846:18;57839:48;57904:108;58007:4;57998:6;57904:108;:::i;:::-;57896:116;;58059:9;58053:4;58049:20;58044:2;58033:9;58029:18;58022:48;58087:108;58190:4;58181:6;58087:108;:::i;:::-;58079:116;;58243:9;58237:4;58233:20;58227:3;58216:9;58212:19;58205:49;58271:76;58342:4;58333:6;58271:76;:::i;:::-;58263:84;;57301:1053;;;;;;;;:::o

Swarm Source

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