ETH Price: $3,313.93 (+0.19%)
Gas: 11 Gwei

Token

Metaverse Land Club (MLC)
 

Overview

Max Total Supply

125 MLC

Holders

81

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x9898A234C33167B6c24DcE114FBa6E4C6042cCD1
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:
MLC

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


// 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/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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


// OpenZeppelin Contracts (last updated v4.7.0) (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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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/Address.sol


// OpenZeppelin Contracts (last updated v4.7.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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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


// 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/utils/introspection/ERC165.sol


// 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/IERC1155Receiver.sol


// 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/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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 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/IERC1155MetadataURI.sol


// 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/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.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: address zero is not a valid owner");
        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 token 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: caller is not token 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}.
     *
     * 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 _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`
     *
     * Emits a {TransferSingle} event.
     *
     * 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}.
     *
     * Emits a {TransferBatch} event.
     *
     * 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 an {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 `ids` and `amounts` 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/ERC1155Supply.sol


// 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: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (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 token 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 token owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}

// File: contracts/fsw3_MetaverseLandClub.sol


pragma solidity ^0.8.4;

//                                                                                           .',.         .....                   
//            ':c:cclllllcc:cc;'.          ...',;;,..        .'','.         .;loddoc,.      'oO0xc...';:codxkkxdc;,..             
//          .lk0KKKKKKKK000000Oxo:.    .,cdkkkOO00Odl;'.   .lO000Odc.      .:xKXXXKOkdc.   .:kKXKxoxOKKKXXXXKKK00Okxdc,.          
//         'cx0NNXXXXXXXXXXXKKKXKx:..;lk0KXXXNNXXKK0Oxdl' .:kXNXKKX0l.    .;d0XXKKK0KX0l.  .cO0kdokKNXXKKKKKKKKK0KKKK0Od;.        
//        .:d0XXKK0000KKKKKKKKXWNOdloO0XNNXXKKKKKK000KX0d,.:kKKK00XXd,    ,d0XKK00000XXx,  .lkkc;o0XXXX0kxddxkO000000KXXk:.       
//       .;oOXXKK00KXNN0xddddxk0kxdxOXNXXXXK0OO00OO00KNNkl,:k0K000XXx,   'o0XXK000000KNk;. 'lkd;,oO0K0xc,....;d0K00000KNXd.       
//       'lOXXKK000XWNOc'.....',;coOXXKXWWKxl:::coxOOKWN0o.;x0K000XXx'  .cOXXK0000000KNO:. ,dOx:,:cc;'.     .;dKXK000KXNXl.       
//      .:xKXXK0000NW0xoc:cc:,..'lOXXKXWNk:...   .':loxd:. ,d0K000NKo. .;xKXK0KKK0000KNk;..cOK0kOxc.       ,okKXK000KNNOc.        
//      .lOXXK00000KXK00O000Oxdl:oOKX0XWKo;.............   'oO0K00XXkc:lx0XKKXNKxdk00KN0c.'dKXKKN0l.    .;oOKXXKK0KXNNx'          
//      ,d0XXK00000KKKKKKKKKXNKkooxO00KXKOxxxolooddxdl:,'. .lO0K00KKK0KXXXKKNW0c.'oO0KXXkod0XX0KN0c.  .;d0XNXXKK0KNN0d;..         
//     .;xKXK00000XWXkodxxxxOK0d;'cxOOO0KKKK0KKKKKK000Oxxo:,lk0K000KKKKKKKKXWXl  .:x000KXXXXXK0XNO:   'oOXXKKK0K0KXK0OOko:,.      
//     .:xKXK0000KNNOc...'',,;,.  .,codxkkkkOO00000KKKKKK0kddxOK0000000000XWNd.   ,dO000KKKK000XXx,   .cxkkkkxkOOO0KKKK00OOd,     
//     .:xKXK00000XNOc.              ..'',;;;:clodxkO00000XX0dk0KK0000000KNWk'    .lO0K0000000KNKd'    .',,,'..';ok0KKK00KNKo.    
//     .cx0XK00000KNXOl.                        ..;ok0KK00KXNxd0KK000000KNW0:     .:k0K0000000KN0l.             .;xKK00000XNk,    
//     .:x0KK000000KNXOl.             ....        .;x0XK000XW0kKKK000000XNXo.      ;x0K0000000XNk;   ..........;ok0XK0000KNWO'    
//     .:xOKK0000000KNXx:.        .,lddxkxoc::;'',:oOXXK00XWWK0000K0000KNNk,       'dOK000000KNKd,'ldxkOOOkxxxOKXXXKK000KNXk;     
//      ,dO0K00000000XWOl,       .:d0XXXK0OOO0K0O0KXXXK0KXWXkookO0K0000XNKc.       .lO0K00000KNk:;o0XXXXKKKXXXXXXKK000KNWXd'      
//      .lkO000000000XWXk;       .cx0XXKKKKKXXXXXXXXKKKNWWKd,.,dkO0000KNNk'        .:x0000000XKo',o0KKKKKKKKKKK0000KKNNXOc.       
//       'lkOO00000KXWX0o.       .;dOOOO00KKKKKKKKKXNNNK0x:.  .:dxO0KKNNK:          .ckOO0KKXNKl..;dOO000000000KKXXXK0d;.         
//        .,cllllllldxl,           .:lodxxxxkkkkxxxxkko;..     .';dxOKKx,            .,codxkK0d'   .;loxkOOOOOkkkOko;.            
//           .........                ...'',,,;,,,'''..           .',;,.                ...','        ..',,,,,,''..                                                                                                                                              









contract MLC is ERC1155, Ownable, Pausable, ERC1155Burnable, ERC1155Supply, ReentrancyGuard {
    using Counters for Counters.Counter;
    using Strings for uint256;
    
    Counters.Counter private _tokenCounter;
    string private salt;

    uint256 public referralRate = 1000;
    uint256 public maxMintsPerWallet = 15;
    mapping(uint256 => uint256) public tokenPrice;
    mapping(uint256 => uint256) public maxSupply;
    mapping (uint256 => mapping (address => uint256)) mintCount;
    mapping(address => mapping(address => bool)) public referralConsumed; 

    string public URIExtension = ".json";
    bool public publicSaleActive = false;
    string public name;
    string public symbol;

    constructor(string memory _name, string memory _symbol, string memory s) ERC1155("") { 
        name = _name;
        symbol = _symbol;
        salt = s;
        _pause();
    }
    
    modifier checkWl(address account, bytes32 hash) {
        if(!publicSaleActive) {
            require(keccak256(abi.encodePacked(salt, account)) == hash, "Wallet address not on the allow list");
        }
        _;
    }

    modifier preMintChecks(address account, uint256 tokenId, uint256 amount) {
        require(tokenId <= _tokenCounter.current(), "Invalid tokenId");
        require(account != address(0), "Cannot mint to null account");

        uint256 _currentMints = mintCount[tokenId][account];
        uint256 _nextMintCount = _currentMints + amount;

        require(_nextMintCount <= maxMintsPerWallet, "Minting would exceed user minting limit");
        uint256 _currentSupply = totalSupply(tokenId);
        uint256 _nextSupply = _currentSupply + amount;

        require(_nextSupply <= maxSupply[tokenId], "Minting would exceed max supply");
        uint256 _price = tokenPrice[tokenId] * amount;
        require(msg.value >= _price, "Insufficient value to cover price");
        mintCount[tokenId][account] = _nextMintCount;
        _;
    }
    
    function setSalt(string memory _s) public onlyOwner {
        salt = _s;
    }

    function setMaxMintsPerWallet(uint256 _maxMints) public onlyOwner {
        maxMintsPerWallet = _maxMints;
    }

    function addToken(uint256 _tokenPrice, uint256 _maxSupply) public onlyOwner {
        require(_maxSupply > 0, "Max supply cannot be 0");

        _tokenCounter.increment();
        tokenPrice[_tokenCounter.current()] = _tokenPrice;
        maxSupply[_tokenCounter.current()] = _maxSupply;
        
    }

    function setTokenPrice(uint256 _tokenId, uint256 _tokenPrice) public onlyOwner {
        require(_tokenId <= _tokenCounter.current(), "Invalid tokenId");
        tokenPrice[_tokenId] = _tokenPrice;
    }

    function setTokenSupply(uint256 _tokenId, uint256 _tokenSupply) public onlyOwner {
        require(_tokenId <= _tokenCounter.current(), "Invalid tokenId");
        require(_tokenSupply >= totalSupply(_tokenId), "New supply is lower than current supply");
        maxSupply[_tokenCounter.current()] = _tokenSupply;
    }

    function setURI(string memory newuri) public onlyOwner {
        _setURI(newuri);
    }

    function setPauseTrue() public onlyOwner {
        _pause();
    }
    function setPauseFalse() public onlyOwner {
        _unpause();
    }

    function setPublicSale(bool publicSaleStatus) public onlyOwner {
        publicSaleActive = publicSaleStatus;
    }

    function referrerComissionRate() public view returns (uint256) {
        return referralRate/100;
    }

    function setReferrerComissionRate(uint256 percentage) public onlyOwner {
        referralRate = percentage * 100;
    }

    function mint(address account, uint256 id, uint256 amount, address referrer, bytes32 hash)
        public
        payable
        whenNotPaused
        checkWl(account, hash) preMintChecks(account, id, amount)
    {
        _mint(account, id, amount, bytes(""));
        if(account!=referrer && !checkReferralConsumption(account, referrer)) {
            _refferalHandler(referrer);
        }
    }

    function checkReferralConsumption(address account, address referrer) private returns(bool) {
        bool _check = referralConsumed[referrer][account];
        if(!_check){
            referralConsumed[referrer][account] = true;
        }
        return _check;
    }

    function _refferalHandler(address _referrer) private nonReentrant {
        if(_referrer == address(0)) { return; }
        uint256 _referrerBalance = 0;
        for(uint256 i = 1; i <= _tokenCounter.current(); i++) {
            _referrerBalance = _referrerBalance + balanceOf(_referrer, i);
        }
        if(_referrerBalance == 0) {return;}
        uint256 referralAmount =  msg.value * referralRate / 10000;
        (bool sent, ) = _referrer.call{value: referralAmount}("");
        require(sent, "Failed to transfer referral amount");
    }

    function withdraw() public onlyOwner {
        uint256 amount = address(this).balance;
        (bool sent, ) = owner().call{value: amount}("");
        require(sent, "Failed to withdraw");
    }

    function uri(uint256 id) public view virtual override returns (string memory) {
        require(totalSupply(id) > 0, "Invalid token id");
        string memory _uri = string(abi.encodePacked(super.uri(id), id.toString(), URIExtension));
        return _uri;
    }

    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 _mint(address to, uint256 id, uint256 amount, bytes memory data) 
        internal
        whenNotPaused
        override(ERC1155)
    {
        super._mint(to, id, amount, data);
    }

    function renounceOwnershipAndPause() public onlyOwner {
        _pause();
        renounceOwnership();
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"s","type":"string"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"URIExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenPrice","type":"uint256"},{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"addToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":[{"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":"maxMintsPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupply","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"},{"internalType":"address","name":"referrer","type":"address"},{"internalType":"bytes32","name":"hash","type":"bytes32"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"referralConsumed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referrerComissionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnershipAndPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMints","type":"uint256"}],"name":"setMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPauseFalse","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPauseTrue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"publicSaleStatus","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setReferrerComissionRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_s","type":"string"}],"name":"setSalt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_tokenPrice","type":"uint256"}],"name":"setTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_tokenSupply","type":"uint256"}],"name":"setTokenSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrice","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":"id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526103e8600855600f6009556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e90805190602001906200005c9291906200033f565b506000600f60006101000a81548160ff0219169083151502179055503480156200008557600080fd5b50604051620061f9380380620061f98339818101604052810190620000ab919062000461565b60405180602001604052806000815250620000cc816200017460201b60201c565b50620000ed620000e16200019060201b60201c565b6200019860201b60201c565b6000600360146101000a81548160ff02191690831515021790555060016005819055508260109080519060200190620001289291906200033f565b508160119080519060200190620001419291906200033f565b5080600790805190602001906200015a9291906200033f565b506200016b6200025e60201b60201c565b50505062000757565b80600290805190602001906200018c9291906200033f565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200026e620002d360201b60201c565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620002ba6200019060201b60201c565b604051620002c991906200053a565b60405180910390a1565b620002e36200032860201b60201c565b1562000326576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200031d9062000557565b60405180910390fd5b565b6000600360149054906101000a900460ff16905090565b8280546200034d9062000653565b90600052602060002090601f016020900481019282620003715760008555620003bd565b82601f106200038c57805160ff1916838001178555620003bd565b82800160010185558215620003bd579182015b82811115620003bc5782518255916020019190600101906200039f565b5b509050620003cc9190620003d0565b5090565b5b80821115620003eb576000816000905550600101620003d1565b5090565b6000620004066200040084620005a2565b62000579565b9050828152602081018484840111156200041f57600080fd5b6200042c8482856200061d565b509392505050565b600082601f8301126200044657600080fd5b815162000458848260208601620003ef565b91505092915050565b6000806000606084860312156200047757600080fd5b600084015167ffffffffffffffff8111156200049257600080fd5b620004a08682870162000434565b935050602084015167ffffffffffffffff811115620004be57600080fd5b620004cc8682870162000434565b925050604084015167ffffffffffffffff811115620004ea57600080fd5b620004f88682870162000434565b9150509250925092565b6200050d81620005e9565b82525050565b600062000522601083620005d8565b91506200052f826200072e565b602082019050919050565b600060208201905062000551600083018462000502565b92915050565b60006020820190508181036000830152620005728162000513565b9050919050565b60006200058562000598565b905062000593828262000689565b919050565b6000604051905090565b600067ffffffffffffffff821115620005c057620005bf620006ee565b5b620005cb826200071d565b9050602081019050919050565b600082825260208201905092915050565b6000620005f682620005fd565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b838110156200063d57808201518184015260208101905062000620565b838111156200064d576000848401525b50505050565b600060028204905060018216806200066c57607f821691505b60208210811415620006835762000682620006bf565b5b50919050565b62000694826200071d565b810181811067ffffffffffffffff82111715620006b657620006b5620006ee565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b615a9280620007676000396000f3fe60806040526004361061022f5760003560e01c806378553e4d1161012e578063bc8893b4116100ab578063eb685c471161006f578063eb685c4714610817578063f242432a14610840578063f2fde38b14610869578063f516a2e614610892578063f5298aca146108bd5761022f565b8063bc8893b41461070c578063bd85b03914610737578063c9fd012714610774578063d4ddce8a1461079d578063e985e9c5146107da5761022f565b8063963c3546116100f2578063963c35461461064d578063a053ce1f14610676578063a22cb465146106a1578063abd97263146106ca578063afcadf00146106f55761022f565b806378553e4d1461058c578063869f7594146105a35780638da5cb5b146105e057806394b7bf731461060b57806395d89b41146106225761022f565b80633b076399116101bc5780635aca1bb6116101805780635aca1bb6146104cd5780635c975abb146104f65780635cfbd28b146105215780636b20c4541461054c578063715018a6146105755761022f565b80633b076399146103d65780633ccfd60b146104135780634e1273f41461042a5780634f558e791461046757806354e81f41146104a45761022f565b806306fdde031161020357806306fdde03146102f35780630e89341c1461031e57806317b9ebec1461035b578063278d17ad146103845780632eb2c2d6146103ad5761022f565b8062fdd58e1461023457806301ffc9a71461027157806302fe5305146102ae57806304c87d7b146102d7575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613e26565b6108e6565b6040516102689190614c3b565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613fbd565b6109af565b6040516102a5919061485e565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061400f565b610a91565b005b6102f160048036038101906102ec9190613eb1565b610aa5565b005b3480156102ff57600080fd5b50610308610e44565b6040516103159190614879565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190614050565b610ed2565b6040516103529190614879565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614079565b610f61565b005b34801561039057600080fd5b506103ab60048036038101906103a69190614079565b610ffc565b005b3480156103b957600080fd5b506103d460048036038101906103cf9190613c1d565b6110c0565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190613be1565b611161565b60405161040a919061485e565b60405180910390f35b34801561041f57600080fd5b50610428611190565b005b34801561043657600080fd5b50610451600480360381019061044c9190613f28565b611254565b60405161045e9190614805565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614050565b611405565b60405161049b919061485e565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614050565b611419565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613f94565b611437565b005b34801561050257600080fd5b5061050b61145c565b604051610518919061485e565b60405180910390f35b34801561052d57600080fd5b50610536611473565b6040516105439190614879565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613d6b565b611501565b005b34801561058157600080fd5b5061058a61159e565b005b34801561059857600080fd5b506105a16115b2565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190614050565b6115c4565b6040516105d79190614c3b565b60405180910390f35b3480156105ec57600080fd5b506105f56115dc565b6040516106029190614728565b60405180910390f35b34801561061757600080fd5b50610620611606565b005b34801561062e57600080fd5b50610637611620565b6040516106449190614879565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190614050565b6116ae565b005b34801561068257600080fd5b5061068b6116c0565b6040516106989190614c3b565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190613dea565b6116c6565b005b3480156106d657600080fd5b506106df6116dc565b6040516106ec9190614c3b565b60405180910390f35b34801561070157600080fd5b5061070a6116f2565b005b34801561071857600080fd5b50610721611704565b60405161072e919061485e565b60405180910390f35b34801561074357600080fd5b5061075e60048036038101906107599190614050565b611717565b60405161076b9190614c3b565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061400f565b611734565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190614050565b611756565b6040516107d19190614c3b565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613be1565b61176e565b60405161080e919061485e565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190614079565b611802565b005b34801561084c57600080fd5b5061086760048036038101906108629190613cdc565b611872565b005b34801561087557600080fd5b50610890600480360381019061088b9190613bb8565b611913565b005b34801561089e57600080fd5b506108a7611997565b6040516108b49190614c3b565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190613e62565b61199d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061499b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8a5750610a8982611a3a565b5b9050919050565b610a99611aa4565b610aa281611b22565b50565b610aad611b3c565b8481600f60009054906101000a900460ff16610b2f5780600783604051602001610ad89291906146eb565b6040516020818303038152906040528051906020012014610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614c1b565b60405180910390fd5b5b868686610b3c6006611b86565b821115610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906149bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614a5b565b60405180910390fd5b6000600c600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008282610c519190614dfa565b9050600954811115610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90614b3b565b60405180910390fd5b6000610ca385611717565b905060008482610cb39190614dfa565b9050600b600087815260200190815260200160002054811115610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290614a3b565b60405180910390fd5b600085600a600089815260200190815260200160002054610d2c9190614e81565b905080341015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890614bbb565b60405180910390fd5b83600c600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de18f8f8f60405180602001604052806000815250611b94565b8b73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff1614158015610e245750610e228f8d611bae565b155b15610e3357610e328c611ce2565b5b505050505050505050505050505050565b60108054610e5190614fcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7d90614fcf565b8015610eca5780601f10610e9f57610100808354040283529160200191610eca565b820191906000526020600020905b815481529060010190602001808311610ead57829003601f168201915b505050505081565b60606000610edf83611717565b11610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906149db565b60405180910390fd5b6000610f2a83611e96565b610f3384611f2a565b600e604051602001610f47939291906146ba565b604051602081830303815290604052905080915050919050565b610f69611aa4565b60008111610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa39061495b565b60405180910390fd5b610fb660066120d7565b81600a6000610fc56006611b86565b81526020019081526020016000208190555080600b6000610fe66006611b86565b8152602001908152602001600020819055505050565b611004611aa4565b61100e6006611b86565b821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906149bb565b60405180910390fd5b61105982611717565b81101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614afb565b60405180910390fd5b80600b60006110aa6006611b86565b8152602001908152602001600020819055505050565b6110c86120ed565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061110e575061110d856111086120ed565b61176e565b5b61114d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611144906148bb565b60405180910390fd5b61115a85858585856120f5565b5050505050565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611198611aa4565b600047905060006111a76115dc565b73ffffffffffffffffffffffffffffffffffffffff16826040516111ca90614713565b60006040518083038185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b5050905080611250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112479061491b565b60405180910390fd5b5050565b6060815183511461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614b7b565b60405180910390fd5b6000835167ffffffffffffffff8111156112dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b84518110156113fa576113a4858281518110611356577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611397577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516108e6565b8282815181106113dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806113f390615032565b9050611311565b508091505092915050565b60008061141183611717565b119050919050565b611421611aa4565b60648161142e9190614e81565b60088190555050565b61143f611aa4565b80600f60006101000a81548160ff02191690831515021790555050565b6000600360149054906101000a900460ff16905090565b600e805461148090614fcf565b80601f01602080910402602001604051908101604052809291908181526020018280546114ac90614fcf565b80156114f95780601f106114ce576101008083540402835291602001916114f9565b820191906000526020600020905b8154815290600101906020018083116114dc57829003601f168201915b505050505081565b6115096120ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e836115496120ed565b61176e565b5b61158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906148bb565b60405180910390fd5b611599838383612463565b505050565b6115a6611aa4565b6115b0600061277e565b565b6115ba611aa4565b6115c2612844565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160e611aa4565b611616612844565b61161e61159e565b565b6011805461162d90614fcf565b80601f016020809104026020016040519081016040528092919081815260200182805461165990614fcf565b80156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b505050505081565b6116b6611aa4565b8060098190555050565b60085481565b6116d86116d16120ed565b83836128a7565b5050565b600060646008546116ed9190614e50565b905090565b6116fa611aa4565b611702612a14565b565b600f60009054906101000a900460ff1681565b600060046000838152602001908152602001600020549050919050565b61173c611aa4565b806007908051906020019061175292919061389b565b5050565b600a6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61180a611aa4565b6118146006611b86565b821115611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d906149bb565b60405180910390fd5b80600a6000848152602001908152602001600020819055505050565b61187a6120ed565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118c057506118bf856118ba6120ed565b61176e565b5b6118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f6906148bb565b60405180910390fd5b61190c8585858585612a77565b5050505050565b61191b611aa4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061493b565b60405180910390fd5b6119948161277e565b50565b60095481565b6119a56120ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806119eb57506119ea836119e56120ed565b61176e565b5b611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906148bb565b60405180910390fd5b611a35838383612d13565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611aac6120ed565b73ffffffffffffffffffffffffffffffffffffffff16611aca6115dc565b73ffffffffffffffffffffffffffffffffffffffff1614611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790614abb565b60405180910390fd5b565b8060029080519060200190611b3892919061389b565b5050565b611b4461145c565b15611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906149fb565b60405180910390fd5b565b600081600001549050919050565b611b9c611b3c565b611ba884848484612f5a565b50505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080611cd8576001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8091505092915050565b60026005541415611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90614bfb565b60405180910390fd5b6002600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d6a57611e8b565b600080600190505b611d7c6006611b86565b8111611dac57611d8c83826108e6565b82611d979190614dfa565b91508080611da490615032565b915050611d72565b506000811415611dbc5750611e8b565b600061271060085434611dcf9190614e81565b611dd99190614e50565b905060008373ffffffffffffffffffffffffffffffffffffffff1682604051611e0190614713565b60006040518083038185875af1925050503d8060008114611e3e576040519150601f19603f3d011682016040523d82523d6000602084013e611e43565b606091505b5050905080611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90614b1b565b60405180910390fd5b5050505b600160058190555050565b606060028054611ea590614fcf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed190614fcf565b8015611f1e5780601f10611ef357610100808354040283529160200191611f1e565b820191906000526020600020905b815481529060010190602001808311611f0157829003601f168201915b50505050509050919050565b60606000821415611f72576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120d2565b600082905060005b60008214611fa4578080611f8d90615032565b915050600a82611f9d9190614e50565b9150611f7a565b60008167ffffffffffffffff811115611fe6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120185781602001600182028036833780820191505090505b5090505b600085146120cb576001826120319190614edb565b9150600a85612040919061509f565b603061204c9190614dfa565b60f81b818381518110612088577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120c49190614e50565b945061201c565b8093505050505b919050565b6001816000016000828254019250508190555050565b600033905090565b8151835114612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614a1b565b60405180910390fd5b60006121b36120ed565b90506121c381878787878761310b565b60005b84518110156123c057600085828151811061220a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061224f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614a9b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a59190614dfa565b92505081905550505050806123b990615032565b90506121c6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612437929190614827565b60405180910390a461244d818787878787613121565b61245b818787878787613129565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614a7b565b60405180910390fd5b8051825114612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614b9b565b60405180910390fd5b60006125216120ed565b90506125418185600086866040518060200160405280600081525061310b565b60005b83518110156126da576000848281518110612588577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106125cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561266e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126659061497b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806126d290615032565b915050612544565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612752929190614827565b60405180910390a461277881856000868660405180602001604052806000815250613121565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61284c611b3c565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128906120ed565b60405161289d9190614728565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614b5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a07919061485e565b60405180910390a3505050565b612a1c613310565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a606120ed565b604051612a6d9190614728565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90614a1b565b60405180910390fd5b6000612af16120ed565b90506000612afe85613359565b90506000612b0b85613359565b9050612b1b83898985858961310b565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba990614a9b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c679190614dfa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612ce4929190614c56565b60405180910390a4612cfa848a8a86868a613121565b612d08848a8a8a8a8a61341f565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614a7b565b60405180910390fd5b6000612d8d6120ed565b90506000612d9a84613359565b90506000612da784613359565b9050612dc78387600085856040518060200160405280600081525061310b565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e559061497b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612f2b929190614c56565b60405180910390a4612f5184886000868660405180602001604052806000815250613121565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614bdb565b60405180910390fd5b6000612fd46120ed565b90506000612fe185613359565b90506000612fee85613359565b9050612fff8360008985858961310b565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305e9190614dfa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516130dc929190614c56565b60405180910390a46130f383600089858589613121565b6131028360008989898961341f565b50505050505050565b613119868686868686613606565b505050505050565b505050505050565b6131488473ffffffffffffffffffffffffffffffffffffffff16613870565b15613308578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161318e959493929190614743565b602060405180830381600087803b1580156131a857600080fd5b505af19250505080156131d957506040513d601f19601f820116820180604052508101906131d69190613fe6565b60015b61327f576131e561518c565b806308c379a0141561324257506131fa615953565b806132055750613244565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132399190614879565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132769061489b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fd906148db565b60405180910390fd5b505b505050505050565b61331861145c565b613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e906148fb565b60405180910390fd5b565b60606000600167ffffffffffffffff81111561339e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133cc5781602001602082028036833780820191505090505b509050828160008151811061340a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61343e8473ffffffffffffffffffffffffffffffffffffffff16613870565b156135fe578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016134849594939291906147ab565b602060405180830381600087803b15801561349e57600080fd5b505af19250505080156134cf57506040513d601f19601f820116820180604052508101906134cc9190613fe6565b60015b613575576134db61518c565b806308c379a0141561353857506134f0615953565b806134fb575061353a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352f9190614879565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356c9061489b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906148db565b60405180910390fd5b505b505050505050565b613614868686868686613893565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156137125760005b83518110156137105782818151811061368e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600460008684815181106136d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546136f89190614dfa565b925050819055508061370990615032565b905061364c565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138685760005b835181101561386657600084828151811061378e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106137d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015613838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382f90614adb565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061385f90615032565b905061374a565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546138a790614fcf565b90600052602060002090601f0160209004810192826138c95760008555613910565b82601f106138e257805160ff1916838001178555613910565b82800160010185558215613910579182015b8281111561390f5782518255916020019190600101906138f4565b5b50905061391d9190613921565b5090565b5b8082111561393a576000816000905550600101613922565b5090565b600061395161394c84614ca4565b614c7f565b9050808382526020820190508285602086028201111561397057600080fd5b60005b858110156139a057816139868882613a92565b845260208401935060208301925050600181019050613973565b5050509392505050565b60006139bd6139b884614cd0565b614c7f565b905080838252602082019050828560208602820111156139dc57600080fd5b60005b85811015613a0c57816139f28882613ba3565b8452602084019350602083019250506001810190506139df565b5050509392505050565b6000613a29613a2484614cfc565b614c7f565b905082815260208101848484011115613a4157600080fd5b613a4c848285614f8d565b509392505050565b6000613a67613a6284614d2d565b614c7f565b905082815260208101848484011115613a7f57600080fd5b613a8a848285614f8d565b509392505050565b600081359050613aa1816159e9565b92915050565b600082601f830112613ab857600080fd5b8135613ac884826020860161393e565b91505092915050565b600082601f830112613ae257600080fd5b8135613af28482602086016139aa565b91505092915050565b600081359050613b0a81615a00565b92915050565b600081359050613b1f81615a17565b92915050565b600081359050613b3481615a2e565b92915050565b600081519050613b4981615a2e565b92915050565b600082601f830112613b6057600080fd5b8135613b70848260208601613a16565b91505092915050565b600082601f830112613b8a57600080fd5b8135613b9a848260208601613a54565b91505092915050565b600081359050613bb281615a45565b92915050565b600060208284031215613bca57600080fd5b6000613bd884828501613a92565b91505092915050565b60008060408385031215613bf457600080fd5b6000613c0285828601613a92565b9250506020613c1385828601613a92565b9150509250929050565b600080600080600060a08688031215613c3557600080fd5b6000613c4388828901613a92565b9550506020613c5488828901613a92565b945050604086013567ffffffffffffffff811115613c7157600080fd5b613c7d88828901613ad1565b935050606086013567ffffffffffffffff811115613c9a57600080fd5b613ca688828901613ad1565b925050608086013567ffffffffffffffff811115613cc357600080fd5b613ccf88828901613b4f565b9150509295509295909350565b600080600080600060a08688031215613cf457600080fd5b6000613d0288828901613a92565b9550506020613d1388828901613a92565b9450506040613d2488828901613ba3565b9350506060613d3588828901613ba3565b925050608086013567ffffffffffffffff811115613d5257600080fd5b613d5e88828901613b4f565b9150509295509295909350565b600080600060608486031215613d8057600080fd5b6000613d8e86828701613a92565b935050602084013567ffffffffffffffff811115613dab57600080fd5b613db786828701613ad1565b925050604084013567ffffffffffffffff811115613dd457600080fd5b613de086828701613ad1565b9150509250925092565b60008060408385031215613dfd57600080fd5b6000613e0b85828601613a92565b9250506020613e1c85828601613afb565b9150509250929050565b60008060408385031215613e3957600080fd5b6000613e4785828601613a92565b9250506020613e5885828601613ba3565b9150509250929050565b600080600060608486031215613e7757600080fd5b6000613e8586828701613a92565b9350506020613e9686828701613ba3565b9250506040613ea786828701613ba3565b9150509250925092565b600080600080600060a08688031215613ec957600080fd5b6000613ed788828901613a92565b9550506020613ee888828901613ba3565b9450506040613ef988828901613ba3565b9350506060613f0a88828901613a92565b9250506080613f1b88828901613b10565b9150509295509295909350565b60008060408385031215613f3b57600080fd5b600083013567ffffffffffffffff811115613f5557600080fd5b613f6185828601613aa7565b925050602083013567ffffffffffffffff811115613f7e57600080fd5b613f8a85828601613ad1565b9150509250929050565b600060208284031215613fa657600080fd5b6000613fb484828501613afb565b91505092915050565b600060208284031215613fcf57600080fd5b6000613fdd84828501613b25565b91505092915050565b600060208284031215613ff857600080fd5b600061400684828501613b3a565b91505092915050565b60006020828403121561402157600080fd5b600082013567ffffffffffffffff81111561403b57600080fd5b61404784828501613b79565b91505092915050565b60006020828403121561406257600080fd5b600061407084828501613ba3565b91505092915050565b6000806040838503121561408c57600080fd5b600061409a85828601613ba3565b92505060206140ab85828601613ba3565b9150509250929050565b60006140c1838361469c565b60208301905092915050565b6140d681614f0f565b82525050565b6140ed6140e882614f0f565b61507b565b82525050565b60006140fe82614d83565b6141088185614db1565b935061411383614d5e565b8060005b8381101561414457815161412b88826140b5565b975061413683614da4565b925050600181019050614117565b5085935050505092915050565b61415a81614f21565b82525050565b600061416b82614d8e565b6141758185614dc2565b9350614185818560208601614f9c565b61418e816151ae565b840191505092915050565b60006141a482614d99565b6141ae8185614dde565b93506141be818560208601614f9c565b6141c7816151ae565b840191505092915050565b60006141dd82614d99565b6141e78185614def565b93506141f7818560208601614f9c565b80840191505092915050565b6000815461421081614fcf565b61421a8186614def565b94506001821660008114614235576001811461424657614279565b60ff19831686528186019350614279565b61424f85614d6e565b60005b8381101561427157815481890152600182019150602081019050614252565b838801955050505b50505092915050565b600061428f603483614dde565b915061429a826151d9565b604082019050919050565b60006142b2602f83614dde565b91506142bd82615228565b604082019050919050565b60006142d5602883614dde565b91506142e082615277565b604082019050919050565b60006142f8601483614dde565b9150614303826152c6565b602082019050919050565b600061431b601283614dde565b9150614326826152ef565b602082019050919050565b600061433e602683614dde565b915061434982615318565b604082019050919050565b6000614361601683614dde565b915061436c82615367565b602082019050919050565b6000614384602483614dde565b915061438f82615390565b604082019050919050565b60006143a7602a83614dde565b91506143b2826153df565b604082019050919050565b60006143ca600f83614dde565b91506143d58261542e565b602082019050919050565b60006143ed601083614dde565b91506143f882615457565b602082019050919050565b6000614410601083614dde565b915061441b82615480565b602082019050919050565b6000614433602583614dde565b915061443e826154a9565b604082019050919050565b6000614456601f83614dde565b9150614461826154f8565b602082019050919050565b6000614479601b83614dde565b915061448482615521565b602082019050919050565b600061449c602383614dde565b91506144a78261554a565b604082019050919050565b60006144bf602a83614dde565b91506144ca82615599565b604082019050919050565b60006144e2602083614dde565b91506144ed826155e8565b602082019050919050565b6000614505602883614dde565b915061451082615611565b604082019050919050565b6000614528602783614dde565b915061453382615660565b604082019050919050565b600061454b602283614dde565b9150614556826156af565b604082019050919050565b600061456e600083614dd3565b9150614579826156fe565b600082019050919050565b6000614591602783614dde565b915061459c82615701565b604082019050919050565b60006145b4602983614dde565b91506145bf82615750565b604082019050919050565b60006145d7602983614dde565b91506145e28261579f565b604082019050919050565b60006145fa602883614dde565b9150614605826157ee565b604082019050919050565b600061461d602183614dde565b91506146288261583d565b604082019050919050565b6000614640602183614dde565b915061464b8261588c565b604082019050919050565b6000614663601f83614dde565b915061466e826158db565b602082019050919050565b6000614686602483614dde565b915061469182615904565b604082019050919050565b6146a581614f83565b82525050565b6146b481614f83565b82525050565b60006146c682866141d2565b91506146d282856141d2565b91506146de8284614203565b9150819050949350505050565b60006146f78285614203565b915061470382846140dc565b6014820191508190509392505050565b600061471e82614561565b9150819050919050565b600060208201905061473d60008301846140cd565b92915050565b600060a08201905061475860008301886140cd565b61476560208301876140cd565b818103604083015261477781866140f3565b9050818103606083015261478b81856140f3565b9050818103608083015261479f8184614160565b90509695505050505050565b600060a0820190506147c060008301886140cd565b6147cd60208301876140cd565b6147da60408301866146ab565b6147e760608301856146ab565b81810360808301526147f98184614160565b90509695505050505050565b6000602082019050818103600083015261481f81846140f3565b905092915050565b6000604082019050818103600083015261484181856140f3565b9050818103602083015261485581846140f3565b90509392505050565b60006020820190506148736000830184614151565b92915050565b600060208201905081810360008301526148938184614199565b905092915050565b600060208201905081810360008301526148b481614282565b9050919050565b600060208201905081810360008301526148d4816142a5565b9050919050565b600060208201905081810360008301526148f4816142c8565b9050919050565b60006020820190508181036000830152614914816142eb565b9050919050565b600060208201905081810360008301526149348161430e565b9050919050565b6000602082019050818103600083015261495481614331565b9050919050565b6000602082019050818103600083015261497481614354565b9050919050565b6000602082019050818103600083015261499481614377565b9050919050565b600060208201905081810360008301526149b48161439a565b9050919050565b600060208201905081810360008301526149d4816143bd565b9050919050565b600060208201905081810360008301526149f4816143e0565b9050919050565b60006020820190508181036000830152614a1481614403565b9050919050565b60006020820190508181036000830152614a3481614426565b9050919050565b60006020820190508181036000830152614a5481614449565b9050919050565b60006020820190508181036000830152614a748161446c565b9050919050565b60006020820190508181036000830152614a948161448f565b9050919050565b60006020820190508181036000830152614ab4816144b2565b9050919050565b60006020820190508181036000830152614ad4816144d5565b9050919050565b60006020820190508181036000830152614af4816144f8565b9050919050565b60006020820190508181036000830152614b148161451b565b9050919050565b60006020820190508181036000830152614b348161453e565b9050919050565b60006020820190508181036000830152614b5481614584565b9050919050565b60006020820190508181036000830152614b74816145a7565b9050919050565b60006020820190508181036000830152614b94816145ca565b9050919050565b60006020820190508181036000830152614bb4816145ed565b9050919050565b60006020820190508181036000830152614bd481614610565b9050919050565b60006020820190508181036000830152614bf481614633565b9050919050565b60006020820190508181036000830152614c1481614656565b9050919050565b60006020820190508181036000830152614c3481614679565b9050919050565b6000602082019050614c5060008301846146ab565b92915050565b6000604082019050614c6b60008301856146ab565b614c7860208301846146ab565b9392505050565b6000614c89614c9a565b9050614c958282615001565b919050565b6000604051905090565b600067ffffffffffffffff821115614cbf57614cbe61515d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ceb57614cea61515d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d1757614d1661515d565b5b614d20826151ae565b9050602081019050919050565b600067ffffffffffffffff821115614d4857614d4761515d565b5b614d51826151ae565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e0582614f83565b9150614e1083614f83565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4557614e446150d0565b5b828201905092915050565b6000614e5b82614f83565b9150614e6683614f83565b925082614e7657614e756150ff565b5b828204905092915050565b6000614e8c82614f83565b9150614e9783614f83565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed057614ecf6150d0565b5b828202905092915050565b6000614ee682614f83565b9150614ef183614f83565b925082821015614f0457614f036150d0565b5b828203905092915050565b6000614f1a82614f63565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fba578082015181840152602081019050614f9f565b83811115614fc9576000848401525b50505050565b60006002820490506001821680614fe757607f821691505b60208210811415614ffb57614ffa61512e565b5b50919050565b61500a826151ae565b810181811067ffffffffffffffff821117156150295761502861515d565b5b80604052505050565b600061503d82614f83565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150705761506f6150d0565b5b600182019050919050565b60006150868261508d565b9050919050565b6000615098826151bf565b9050919050565b60006150aa82614f83565b91506150b583614f83565b9250826150c5576150c46150ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156151ab5760046000803e6151a86000516151cc565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c792063616e6e6f74206265203000000000000000000000600082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f496e76616c696420746f6b656e49640000000000000000000000000000000000600082015250565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f74206d696e7420746f206e756c6c206163636f756e740000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e657720737570706c79206973206c6f776572207468616e2063757272656e7460008201527f20737570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207472616e7366657220726566657272616c20616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d696e74696e6720776f756c64206578636565642075736572206d696e74696e60008201527f67206c696d697400000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742076616c756520746f20636f766572207072696360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f57616c6c65742061646472657373206e6f74206f6e2074686520616c6c6f772060008201527f6c69737400000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615963576159e6565b61596b614c9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156159935750506159e6565b808201805167ffffffffffffffff8111156159b157505050506159e6565b80602083010160043d0385018111156159ce5750505050506159e6565b6159dd82602001850186615001565b82955050505050505b90565b6159f281614f0f565b81146159fd57600080fd5b50565b615a0981614f21565b8114615a1457600080fd5b50565b615a2081614f2d565b8114615a2b57600080fd5b50565b615a3781614f37565b8114615a4257600080fd5b50565b615a4e81614f83565b8114615a5957600080fd5b5056fea2646970667358221220bbf94a91ada8079e39610a28f6b5bf069079473fea6b3d7ef5dc4ee9e5d5552e64736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6574617665727365204c616e6420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4c43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403979443263366e6e62325471387969766b7150444b346d52364a6a416e6e485169574a4444664c6f554b45697850674d6b4437324c5a42586956786a74417634

Deployed Bytecode

0x60806040526004361061022f5760003560e01c806378553e4d1161012e578063bc8893b4116100ab578063eb685c471161006f578063eb685c4714610817578063f242432a14610840578063f2fde38b14610869578063f516a2e614610892578063f5298aca146108bd5761022f565b8063bc8893b41461070c578063bd85b03914610737578063c9fd012714610774578063d4ddce8a1461079d578063e985e9c5146107da5761022f565b8063963c3546116100f2578063963c35461461064d578063a053ce1f14610676578063a22cb465146106a1578063abd97263146106ca578063afcadf00146106f55761022f565b806378553e4d1461058c578063869f7594146105a35780638da5cb5b146105e057806394b7bf731461060b57806395d89b41146106225761022f565b80633b076399116101bc5780635aca1bb6116101805780635aca1bb6146104cd5780635c975abb146104f65780635cfbd28b146105215780636b20c4541461054c578063715018a6146105755761022f565b80633b076399146103d65780633ccfd60b146104135780634e1273f41461042a5780634f558e791461046757806354e81f41146104a45761022f565b806306fdde031161020357806306fdde03146102f35780630e89341c1461031e57806317b9ebec1461035b578063278d17ad146103845780632eb2c2d6146103ad5761022f565b8062fdd58e1461023457806301ffc9a71461027157806302fe5305146102ae57806304c87d7b146102d7575b600080fd5b34801561024057600080fd5b5061025b60048036038101906102569190613e26565b6108e6565b6040516102689190614c3b565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190613fbd565b6109af565b6040516102a5919061485e565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d0919061400f565b610a91565b005b6102f160048036038101906102ec9190613eb1565b610aa5565b005b3480156102ff57600080fd5b50610308610e44565b6040516103159190614879565b60405180910390f35b34801561032a57600080fd5b5061034560048036038101906103409190614050565b610ed2565b6040516103529190614879565b60405180910390f35b34801561036757600080fd5b50610382600480360381019061037d9190614079565b610f61565b005b34801561039057600080fd5b506103ab60048036038101906103a69190614079565b610ffc565b005b3480156103b957600080fd5b506103d460048036038101906103cf9190613c1d565b6110c0565b005b3480156103e257600080fd5b506103fd60048036038101906103f89190613be1565b611161565b60405161040a919061485e565b60405180910390f35b34801561041f57600080fd5b50610428611190565b005b34801561043657600080fd5b50610451600480360381019061044c9190613f28565b611254565b60405161045e9190614805565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190614050565b611405565b60405161049b919061485e565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c69190614050565b611419565b005b3480156104d957600080fd5b506104f460048036038101906104ef9190613f94565b611437565b005b34801561050257600080fd5b5061050b61145c565b604051610518919061485e565b60405180910390f35b34801561052d57600080fd5b50610536611473565b6040516105439190614879565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190613d6b565b611501565b005b34801561058157600080fd5b5061058a61159e565b005b34801561059857600080fd5b506105a16115b2565b005b3480156105af57600080fd5b506105ca60048036038101906105c59190614050565b6115c4565b6040516105d79190614c3b565b60405180910390f35b3480156105ec57600080fd5b506105f56115dc565b6040516106029190614728565b60405180910390f35b34801561061757600080fd5b50610620611606565b005b34801561062e57600080fd5b50610637611620565b6040516106449190614879565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190614050565b6116ae565b005b34801561068257600080fd5b5061068b6116c0565b6040516106989190614c3b565b60405180910390f35b3480156106ad57600080fd5b506106c860048036038101906106c39190613dea565b6116c6565b005b3480156106d657600080fd5b506106df6116dc565b6040516106ec9190614c3b565b60405180910390f35b34801561070157600080fd5b5061070a6116f2565b005b34801561071857600080fd5b50610721611704565b60405161072e919061485e565b60405180910390f35b34801561074357600080fd5b5061075e60048036038101906107599190614050565b611717565b60405161076b9190614c3b565b60405180910390f35b34801561078057600080fd5b5061079b6004803603810190610796919061400f565b611734565b005b3480156107a957600080fd5b506107c460048036038101906107bf9190614050565b611756565b6040516107d19190614c3b565b60405180910390f35b3480156107e657600080fd5b5061080160048036038101906107fc9190613be1565b61176e565b60405161080e919061485e565b60405180910390f35b34801561082357600080fd5b5061083e60048036038101906108399190614079565b611802565b005b34801561084c57600080fd5b5061086760048036038101906108629190613cdc565b611872565b005b34801561087557600080fd5b50610890600480360381019061088b9190613bb8565b611913565b005b34801561089e57600080fd5b506108a7611997565b6040516108b49190614c3b565b60405180910390f35b3480156108c957600080fd5b506108e460048036038101906108df9190613e62565b61199d565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e9061499b565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a7a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a8a5750610a8982611a3a565b5b9050919050565b610a99611aa4565b610aa281611b22565b50565b610aad611b3c565b8481600f60009054906101000a900460ff16610b2f5780600783604051602001610ad89291906146eb565b6040516020818303038152906040528051906020012014610b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2590614c1b565b60405180910390fd5b5b868686610b3c6006611b86565b821115610b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b75906149bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614a5b565b60405180910390fd5b6000600c600084815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060008282610c519190614dfa565b9050600954811115610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f90614b3b565b60405180910390fd5b6000610ca385611717565b905060008482610cb39190614dfa565b9050600b600087815260200190815260200160002054811115610d0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0290614a3b565b60405180910390fd5b600085600a600089815260200190815260200160002054610d2c9190614e81565b905080341015610d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6890614bbb565b60405180910390fd5b83600c600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610de18f8f8f60405180602001604052806000815250611b94565b8b73ffffffffffffffffffffffffffffffffffffffff168f73ffffffffffffffffffffffffffffffffffffffff1614158015610e245750610e228f8d611bae565b155b15610e3357610e328c611ce2565b5b505050505050505050505050505050565b60108054610e5190614fcf565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7d90614fcf565b8015610eca5780601f10610e9f57610100808354040283529160200191610eca565b820191906000526020600020905b815481529060010190602001808311610ead57829003601f168201915b505050505081565b60606000610edf83611717565b11610f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f16906149db565b60405180910390fd5b6000610f2a83611e96565b610f3384611f2a565b600e604051602001610f47939291906146ba565b604051602081830303815290604052905080915050919050565b610f69611aa4565b60008111610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa39061495b565b60405180910390fd5b610fb660066120d7565b81600a6000610fc56006611b86565b81526020019081526020016000208190555080600b6000610fe66006611b86565b8152602001908152602001600020819055505050565b611004611aa4565b61100e6006611b86565b821115611050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611047906149bb565b60405180910390fd5b61105982611717565b81101561109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290614afb565b60405180910390fd5b80600b60006110aa6006611b86565b8152602001908152602001600020819055505050565b6110c86120ed565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061110e575061110d856111086120ed565b61176e565b5b61114d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611144906148bb565b60405180910390fd5b61115a85858585856120f5565b5050505050565b600d6020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b611198611aa4565b600047905060006111a76115dc565b73ffffffffffffffffffffffffffffffffffffffff16826040516111ca90614713565b60006040518083038185875af1925050503d8060008114611207576040519150601f19603f3d011682016040523d82523d6000602084013e61120c565b606091505b5050905080611250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112479061491b565b60405180910390fd5b5050565b6060815183511461129a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129190614b7b565b60405180910390fd5b6000835167ffffffffffffffff8111156112dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561130b5781602001602082028036833780820191505090505b50905060005b84518110156113fa576113a4858281518110611356577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151858381518110611397577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101516108e6565b8282815181106113dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001018181525050806113f390615032565b9050611311565b508091505092915050565b60008061141183611717565b119050919050565b611421611aa4565b60648161142e9190614e81565b60088190555050565b61143f611aa4565b80600f60006101000a81548160ff02191690831515021790555050565b6000600360149054906101000a900460ff16905090565b600e805461148090614fcf565b80601f01602080910402602001604051908101604052809291908181526020018280546114ac90614fcf565b80156114f95780601f106114ce576101008083540402835291602001916114f9565b820191906000526020600020905b8154815290600101906020018083116114dc57829003601f168201915b505050505081565b6115096120ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061154f575061154e836115496120ed565b61176e565b5b61158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906148bb565b60405180910390fd5b611599838383612463565b505050565b6115a6611aa4565b6115b0600061277e565b565b6115ba611aa4565b6115c2612844565b565b600b6020528060005260406000206000915090505481565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61160e611aa4565b611616612844565b61161e61159e565b565b6011805461162d90614fcf565b80601f016020809104026020016040519081016040528092919081815260200182805461165990614fcf565b80156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b505050505081565b6116b6611aa4565b8060098190555050565b60085481565b6116d86116d16120ed565b83836128a7565b5050565b600060646008546116ed9190614e50565b905090565b6116fa611aa4565b611702612a14565b565b600f60009054906101000a900460ff1681565b600060046000838152602001908152602001600020549050919050565b61173c611aa4565b806007908051906020019061175292919061389b565b5050565b600a6020528060005260406000206000915090505481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61180a611aa4565b6118146006611b86565b821115611856576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184d906149bb565b60405180910390fd5b80600a6000848152602001908152602001600020819055505050565b61187a6120ed565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118c057506118bf856118ba6120ed565b61176e565b5b6118ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f6906148bb565b60405180910390fd5b61190c8585858585612a77565b5050505050565b61191b611aa4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561198b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119829061493b565b60405180910390fd5b6119948161277e565b50565b60095481565b6119a56120ed565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806119eb57506119ea836119e56120ed565b61176e565b5b611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a21906148bb565b60405180910390fd5b611a35838383612d13565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611aac6120ed565b73ffffffffffffffffffffffffffffffffffffffff16611aca6115dc565b73ffffffffffffffffffffffffffffffffffffffff1614611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1790614abb565b60405180910390fd5b565b8060029080519060200190611b3892919061389b565b5050565b611b4461145c565b15611b84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7b906149fb565b60405180910390fd5b565b600081600001549050919050565b611b9c611b3c565b611ba884848484612f5a565b50505050565b600080600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905080611cd8576001600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8091505092915050565b60026005541415611d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1f90614bfb565b60405180910390fd5b6002600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611d6a57611e8b565b600080600190505b611d7c6006611b86565b8111611dac57611d8c83826108e6565b82611d979190614dfa565b91508080611da490615032565b915050611d72565b506000811415611dbc5750611e8b565b600061271060085434611dcf9190614e81565b611dd99190614e50565b905060008373ffffffffffffffffffffffffffffffffffffffff1682604051611e0190614713565b60006040518083038185875af1925050503d8060008114611e3e576040519150601f19603f3d011682016040523d82523d6000602084013e611e43565b606091505b5050905080611e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7e90614b1b565b60405180910390fd5b5050505b600160058190555050565b606060028054611ea590614fcf565b80601f0160208091040260200160405190810160405280929190818152602001828054611ed190614fcf565b8015611f1e5780601f10611ef357610100808354040283529160200191611f1e565b820191906000526020600020905b815481529060010190602001808311611f0157829003601f168201915b50505050509050919050565b60606000821415611f72576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506120d2565b600082905060005b60008214611fa4578080611f8d90615032565b915050600a82611f9d9190614e50565b9150611f7a565b60008167ffffffffffffffff811115611fe6577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120185781602001600182028036833780820191505090505b5090505b600085146120cb576001826120319190614edb565b9150600a85612040919061509f565b603061204c9190614dfa565b60f81b818381518110612088577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856120c49190614e50565b945061201c565b8093505050505b919050565b6001816000016000828254019250508190555050565b600033905090565b8151835114612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614b9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614a1b565b60405180910390fd5b60006121b36120ed565b90506121c381878787878761310b565b60005b84518110156123c057600085828151811061220a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600085838151811061224f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790614a9b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a59190614dfa565b92505081905550505050806123b990615032565b90506121c6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051612437929190614827565b60405180910390a461244d818787878787613121565b61245b818787878787613129565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614a7b565b60405180910390fd5b8051825114612517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250e90614b9b565b60405180910390fd5b60006125216120ed565b90506125418185600086866040518060200160405280600081525061310b565b60005b83518110156126da576000848281518110612588577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106125cd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561266e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126659061497b565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505080806126d290615032565b915050612544565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612752929190614827565b60405180910390a461277881856000868660405180602001604052806000815250613121565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61284c611b3c565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128906120ed565b60405161289d9190614728565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290d90614b5b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612a07919061485e565b60405180910390a3505050565b612a1c613310565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612a606120ed565b604051612a6d9190614728565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ade90614a1b565b60405180910390fd5b6000612af16120ed565b90506000612afe85613359565b90506000612b0b85613359565b9050612b1b83898985858961310b565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba990614a9b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c679190614dfa565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612ce4929190614c56565b60405180910390a4612cfa848a8a86868a613121565b612d08848a8a8a8a8a61341f565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a90614a7b565b60405180910390fd5b6000612d8d6120ed565b90506000612d9a84613359565b90506000612da784613359565b9050612dc78387600085856040518060200160405280600081525061310b565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905084811015612e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e559061497b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051612f2b929190614c56565b60405180910390a4612f5184886000868660405180602001604052806000815250613121565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc190614bdb565b60405180910390fd5b6000612fd46120ed565b90506000612fe185613359565b90506000612fee85613359565b9050612fff8360008985858961310b565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461305e9190614dfa565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516130dc929190614c56565b60405180910390a46130f383600089858589613121565b6131028360008989898961341f565b50505050505050565b613119868686868686613606565b505050505050565b505050505050565b6131488473ffffffffffffffffffffffffffffffffffffffff16613870565b15613308578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161318e959493929190614743565b602060405180830381600087803b1580156131a857600080fd5b505af19250505080156131d957506040513d601f19601f820116820180604052508101906131d69190613fe6565b60015b61327f576131e561518c565b806308c379a0141561324257506131fa615953565b806132055750613244565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132399190614879565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132769061489b565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132fd906148db565b60405180910390fd5b505b505050505050565b61331861145c565b613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e906148fb565b60405180910390fd5b565b60606000600167ffffffffffffffff81111561339e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156133cc5781602001602082028036833780820191505090505b509050828160008151811061340a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080915050919050565b61343e8473ffffffffffffffffffffffffffffffffffffffff16613870565b156135fe578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016134849594939291906147ab565b602060405180830381600087803b15801561349e57600080fd5b505af19250505080156134cf57506040513d601f19601f820116820180604052508101906134cc9190613fe6565b60015b613575576134db61518c565b806308c379a0141561353857506134f0615953565b806134fb575061353a565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352f9190614879565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161356c9061489b565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135f3906148db565b60405180910390fd5b505b505050505050565b613614868686868686613893565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156137125760005b83518110156137105782818151811061368e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151600460008684815181106136d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151815260200190815260200160002060008282546136f89190614dfa565b925050819055508061370990615032565b905061364c565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156138685760005b835181101561386657600084828151811061378e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060008483815181106137d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151905060006004600084815260200190815260200160002054905081811015613838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382f90614adb565b60405180910390fd5b81810360046000858152602001908152602001600020819055505050508061385f90615032565b905061374a565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b8280546138a790614fcf565b90600052602060002090601f0160209004810192826138c95760008555613910565b82601f106138e257805160ff1916838001178555613910565b82800160010185558215613910579182015b8281111561390f5782518255916020019190600101906138f4565b5b50905061391d9190613921565b5090565b5b8082111561393a576000816000905550600101613922565b5090565b600061395161394c84614ca4565b614c7f565b9050808382526020820190508285602086028201111561397057600080fd5b60005b858110156139a057816139868882613a92565b845260208401935060208301925050600181019050613973565b5050509392505050565b60006139bd6139b884614cd0565b614c7f565b905080838252602082019050828560208602820111156139dc57600080fd5b60005b85811015613a0c57816139f28882613ba3565b8452602084019350602083019250506001810190506139df565b5050509392505050565b6000613a29613a2484614cfc565b614c7f565b905082815260208101848484011115613a4157600080fd5b613a4c848285614f8d565b509392505050565b6000613a67613a6284614d2d565b614c7f565b905082815260208101848484011115613a7f57600080fd5b613a8a848285614f8d565b509392505050565b600081359050613aa1816159e9565b92915050565b600082601f830112613ab857600080fd5b8135613ac884826020860161393e565b91505092915050565b600082601f830112613ae257600080fd5b8135613af28482602086016139aa565b91505092915050565b600081359050613b0a81615a00565b92915050565b600081359050613b1f81615a17565b92915050565b600081359050613b3481615a2e565b92915050565b600081519050613b4981615a2e565b92915050565b600082601f830112613b6057600080fd5b8135613b70848260208601613a16565b91505092915050565b600082601f830112613b8a57600080fd5b8135613b9a848260208601613a54565b91505092915050565b600081359050613bb281615a45565b92915050565b600060208284031215613bca57600080fd5b6000613bd884828501613a92565b91505092915050565b60008060408385031215613bf457600080fd5b6000613c0285828601613a92565b9250506020613c1385828601613a92565b9150509250929050565b600080600080600060a08688031215613c3557600080fd5b6000613c4388828901613a92565b9550506020613c5488828901613a92565b945050604086013567ffffffffffffffff811115613c7157600080fd5b613c7d88828901613ad1565b935050606086013567ffffffffffffffff811115613c9a57600080fd5b613ca688828901613ad1565b925050608086013567ffffffffffffffff811115613cc357600080fd5b613ccf88828901613b4f565b9150509295509295909350565b600080600080600060a08688031215613cf457600080fd5b6000613d0288828901613a92565b9550506020613d1388828901613a92565b9450506040613d2488828901613ba3565b9350506060613d3588828901613ba3565b925050608086013567ffffffffffffffff811115613d5257600080fd5b613d5e88828901613b4f565b9150509295509295909350565b600080600060608486031215613d8057600080fd5b6000613d8e86828701613a92565b935050602084013567ffffffffffffffff811115613dab57600080fd5b613db786828701613ad1565b925050604084013567ffffffffffffffff811115613dd457600080fd5b613de086828701613ad1565b9150509250925092565b60008060408385031215613dfd57600080fd5b6000613e0b85828601613a92565b9250506020613e1c85828601613afb565b9150509250929050565b60008060408385031215613e3957600080fd5b6000613e4785828601613a92565b9250506020613e5885828601613ba3565b9150509250929050565b600080600060608486031215613e7757600080fd5b6000613e8586828701613a92565b9350506020613e9686828701613ba3565b9250506040613ea786828701613ba3565b9150509250925092565b600080600080600060a08688031215613ec957600080fd5b6000613ed788828901613a92565b9550506020613ee888828901613ba3565b9450506040613ef988828901613ba3565b9350506060613f0a88828901613a92565b9250506080613f1b88828901613b10565b9150509295509295909350565b60008060408385031215613f3b57600080fd5b600083013567ffffffffffffffff811115613f5557600080fd5b613f6185828601613aa7565b925050602083013567ffffffffffffffff811115613f7e57600080fd5b613f8a85828601613ad1565b9150509250929050565b600060208284031215613fa657600080fd5b6000613fb484828501613afb565b91505092915050565b600060208284031215613fcf57600080fd5b6000613fdd84828501613b25565b91505092915050565b600060208284031215613ff857600080fd5b600061400684828501613b3a565b91505092915050565b60006020828403121561402157600080fd5b600082013567ffffffffffffffff81111561403b57600080fd5b61404784828501613b79565b91505092915050565b60006020828403121561406257600080fd5b600061407084828501613ba3565b91505092915050565b6000806040838503121561408c57600080fd5b600061409a85828601613ba3565b92505060206140ab85828601613ba3565b9150509250929050565b60006140c1838361469c565b60208301905092915050565b6140d681614f0f565b82525050565b6140ed6140e882614f0f565b61507b565b82525050565b60006140fe82614d83565b6141088185614db1565b935061411383614d5e565b8060005b8381101561414457815161412b88826140b5565b975061413683614da4565b925050600181019050614117565b5085935050505092915050565b61415a81614f21565b82525050565b600061416b82614d8e565b6141758185614dc2565b9350614185818560208601614f9c565b61418e816151ae565b840191505092915050565b60006141a482614d99565b6141ae8185614dde565b93506141be818560208601614f9c565b6141c7816151ae565b840191505092915050565b60006141dd82614d99565b6141e78185614def565b93506141f7818560208601614f9c565b80840191505092915050565b6000815461421081614fcf565b61421a8186614def565b94506001821660008114614235576001811461424657614279565b60ff19831686528186019350614279565b61424f85614d6e565b60005b8381101561427157815481890152600182019150602081019050614252565b838801955050505b50505092915050565b600061428f603483614dde565b915061429a826151d9565b604082019050919050565b60006142b2602f83614dde565b91506142bd82615228565b604082019050919050565b60006142d5602883614dde565b91506142e082615277565b604082019050919050565b60006142f8601483614dde565b9150614303826152c6565b602082019050919050565b600061431b601283614dde565b9150614326826152ef565b602082019050919050565b600061433e602683614dde565b915061434982615318565b604082019050919050565b6000614361601683614dde565b915061436c82615367565b602082019050919050565b6000614384602483614dde565b915061438f82615390565b604082019050919050565b60006143a7602a83614dde565b91506143b2826153df565b604082019050919050565b60006143ca600f83614dde565b91506143d58261542e565b602082019050919050565b60006143ed601083614dde565b91506143f882615457565b602082019050919050565b6000614410601083614dde565b915061441b82615480565b602082019050919050565b6000614433602583614dde565b915061443e826154a9565b604082019050919050565b6000614456601f83614dde565b9150614461826154f8565b602082019050919050565b6000614479601b83614dde565b915061448482615521565b602082019050919050565b600061449c602383614dde565b91506144a78261554a565b604082019050919050565b60006144bf602a83614dde565b91506144ca82615599565b604082019050919050565b60006144e2602083614dde565b91506144ed826155e8565b602082019050919050565b6000614505602883614dde565b915061451082615611565b604082019050919050565b6000614528602783614dde565b915061453382615660565b604082019050919050565b600061454b602283614dde565b9150614556826156af565b604082019050919050565b600061456e600083614dd3565b9150614579826156fe565b600082019050919050565b6000614591602783614dde565b915061459c82615701565b604082019050919050565b60006145b4602983614dde565b91506145bf82615750565b604082019050919050565b60006145d7602983614dde565b91506145e28261579f565b604082019050919050565b60006145fa602883614dde565b9150614605826157ee565b604082019050919050565b600061461d602183614dde565b91506146288261583d565b604082019050919050565b6000614640602183614dde565b915061464b8261588c565b604082019050919050565b6000614663601f83614dde565b915061466e826158db565b602082019050919050565b6000614686602483614dde565b915061469182615904565b604082019050919050565b6146a581614f83565b82525050565b6146b481614f83565b82525050565b60006146c682866141d2565b91506146d282856141d2565b91506146de8284614203565b9150819050949350505050565b60006146f78285614203565b915061470382846140dc565b6014820191508190509392505050565b600061471e82614561565b9150819050919050565b600060208201905061473d60008301846140cd565b92915050565b600060a08201905061475860008301886140cd565b61476560208301876140cd565b818103604083015261477781866140f3565b9050818103606083015261478b81856140f3565b9050818103608083015261479f8184614160565b90509695505050505050565b600060a0820190506147c060008301886140cd565b6147cd60208301876140cd565b6147da60408301866146ab565b6147e760608301856146ab565b81810360808301526147f98184614160565b90509695505050505050565b6000602082019050818103600083015261481f81846140f3565b905092915050565b6000604082019050818103600083015261484181856140f3565b9050818103602083015261485581846140f3565b90509392505050565b60006020820190506148736000830184614151565b92915050565b600060208201905081810360008301526148938184614199565b905092915050565b600060208201905081810360008301526148b481614282565b9050919050565b600060208201905081810360008301526148d4816142a5565b9050919050565b600060208201905081810360008301526148f4816142c8565b9050919050565b60006020820190508181036000830152614914816142eb565b9050919050565b600060208201905081810360008301526149348161430e565b9050919050565b6000602082019050818103600083015261495481614331565b9050919050565b6000602082019050818103600083015261497481614354565b9050919050565b6000602082019050818103600083015261499481614377565b9050919050565b600060208201905081810360008301526149b48161439a565b9050919050565b600060208201905081810360008301526149d4816143bd565b9050919050565b600060208201905081810360008301526149f4816143e0565b9050919050565b60006020820190508181036000830152614a1481614403565b9050919050565b60006020820190508181036000830152614a3481614426565b9050919050565b60006020820190508181036000830152614a5481614449565b9050919050565b60006020820190508181036000830152614a748161446c565b9050919050565b60006020820190508181036000830152614a948161448f565b9050919050565b60006020820190508181036000830152614ab4816144b2565b9050919050565b60006020820190508181036000830152614ad4816144d5565b9050919050565b60006020820190508181036000830152614af4816144f8565b9050919050565b60006020820190508181036000830152614b148161451b565b9050919050565b60006020820190508181036000830152614b348161453e565b9050919050565b60006020820190508181036000830152614b5481614584565b9050919050565b60006020820190508181036000830152614b74816145a7565b9050919050565b60006020820190508181036000830152614b94816145ca565b9050919050565b60006020820190508181036000830152614bb4816145ed565b9050919050565b60006020820190508181036000830152614bd481614610565b9050919050565b60006020820190508181036000830152614bf481614633565b9050919050565b60006020820190508181036000830152614c1481614656565b9050919050565b60006020820190508181036000830152614c3481614679565b9050919050565b6000602082019050614c5060008301846146ab565b92915050565b6000604082019050614c6b60008301856146ab565b614c7860208301846146ab565b9392505050565b6000614c89614c9a565b9050614c958282615001565b919050565b6000604051905090565b600067ffffffffffffffff821115614cbf57614cbe61515d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614ceb57614cea61515d565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614d1757614d1661515d565b5b614d20826151ae565b9050602081019050919050565b600067ffffffffffffffff821115614d4857614d4761515d565b5b614d51826151ae565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614e0582614f83565b9150614e1083614f83565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614e4557614e446150d0565b5b828201905092915050565b6000614e5b82614f83565b9150614e6683614f83565b925082614e7657614e756150ff565b5b828204905092915050565b6000614e8c82614f83565b9150614e9783614f83565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614ed057614ecf6150d0565b5b828202905092915050565b6000614ee682614f83565b9150614ef183614f83565b925082821015614f0457614f036150d0565b5b828203905092915050565b6000614f1a82614f63565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614fba578082015181840152602081019050614f9f565b83811115614fc9576000848401525b50505050565b60006002820490506001821680614fe757607f821691505b60208210811415614ffb57614ffa61512e565b5b50919050565b61500a826151ae565b810181811067ffffffffffffffff821117156150295761502861515d565b5b80604052505050565b600061503d82614f83565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156150705761506f6150d0565b5b600182019050919050565b60006150868261508d565b9050919050565b6000615098826151bf565b9050919050565b60006150aa82614f83565b91506150b583614f83565b9250826150c5576150c46150ff565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156151ab5760046000803e6151a86000516151cc565b90505b90565b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4661696c656420746f2077697468647261770000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4d617820737570706c792063616e6e6f74206265203000000000000000000000600082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f496e76616c696420746f6b656e49640000000000000000000000000000000000600082015250565b7f496e76616c696420746f6b656e20696400000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900600082015250565b7f43616e6e6f74206d696e7420746f206e756c6c206163636f756e740000000000600082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f4e657720737570706c79206973206c6f776572207468616e2063757272656e7460008201527f20737570706c7900000000000000000000000000000000000000000000000000602082015250565b7f4661696c656420746f207472616e7366657220726566657272616c20616d6f7560008201527f6e74000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d696e74696e6720776f756c64206578636565642075736572206d696e74696e60008201527f67206c696d697400000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742076616c756520746f20636f766572207072696360008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f57616c6c65742061646472657373206e6f74206f6e2074686520616c6c6f772060008201527f6c69737400000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015615963576159e6565b61596b614c9a565b60043d036004823e80513d602482011167ffffffffffffffff821117156159935750506159e6565b808201805167ffffffffffffffff8111156159b157505050506159e6565b80602083010160043d0385018111156159ce5750505050506159e6565b6159dd82602001850186615001565b82955050505050505b90565b6159f281614f0f565b81146159fd57600080fd5b50565b615a0981614f21565b8114615a1457600080fd5b50565b615a2081614f2d565b8114615a2b57600080fd5b50565b615a3781614f37565b8114615a4257600080fd5b50565b615a4e81614f83565b8114615a5957600080fd5b5056fea2646970667358221220bbf94a91ada8079e39610a28f6b5bf069079473fea6b3d7ef5dc4ee9e5d5552e64736f6c63430008040033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000134d6574617665727365204c616e6420436c75620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4c43000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000403979443263366e6e62325471387969766b7150444b346d52364a6a416e6e485169574a4444664c6f554b45697850674d6b4437324c5a42586956786a74417634

-----Decoded View---------------
Arg [0] : _name (string): Metaverse Land Club
Arg [1] : _symbol (string): MLC
Arg [2] : s (string): 9yD2c6nnb2Tq8yivkqPDK4mR6JjAnnHQiWJDDfLoUKEixPgMkD72LZBXiVxjtAv4

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [4] : 4d6574617665727365204c616e6420436c756200000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4d4c430000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [8] : 3979443263366e6e62325471387969766b7150444b346d52364a6a416e6e4851
Arg [9] : 69574a4444664c6f554b45697850674d6b4437324c5a42586956786a74417634


Deployed Bytecode Sourcemap

54755:6068:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33000:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32023:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57841:89;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58458:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55425:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59927:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56978:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57510:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34944:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55261:68;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59721:198;;;;;;;;;;;;;:::i;:::-;;33396:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49478:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58329:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58091:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9287:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55339:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51394:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12152:103;;;;;;;;;;;;;:::i;:::-;;57938:68;;;;;;;;;;;;;:::i;:::-;;55144:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11504:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60709:111;;;;;;;;;;;;;:::i;:::-;;55450:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56856:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55007:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33993:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58216:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58012:71;;;;;;;;;;;;;:::i;:::-;;55382:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49267:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56768:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55092:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34220:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57296:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34460:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12410:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55048:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51059:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33000:230;33086:7;33133:1;33114:21;;:7;:21;;;;33106:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33200:9;:13;33210:2;33200:13;;;;;;;;;;;:22;33214:7;33200:22;;;;;;;;;;;;;;;;33193:29;;33000:230;;;;:::o;32023:310::-;32125:4;32177:26;32162:41;;;:11;:41;;;;:110;;;;32235:37;32220:52;;;:11;:52;;;;32162:110;:163;;;;32289:36;32313:11;32289:23;:36::i;:::-;32162:163;32142:183;;32023:310;;;:::o;57841:89::-;11390:13;:11;:13::i;:::-;57907:15:::1;57915:6;57907:7;:15::i;:::-;57841:89:::0;:::o;58458:408::-;8892:19;:17;:19::i;:::-;58622:7:::1;58631:4;55736:16;;;;;;;;;;;55732:148;;55823:4;55804;55810:7;55787:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;55777:42;;;;;;:50;55769:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;55732:148;58651:7:::2;58660:2;58664:6;56010:23;:13;:21;:23::i;:::-;55999:7;:34;;55991:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;56091:1;56072:21;;:7;:21;;;;56064:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;56138:21;56162:9;:18;56172:7;56162:18;;;;;;;;;;;:27;56181:7;56162:27;;;;;;;;;;;;;;;;56138:51;;56200:22;56241:6;56225:13;:22;;;;:::i;:::-;56200:47;;56286:17;;56268:14;:35;;56260:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;56358:22;56383:20;56395:7;56383:11;:20::i;:::-;56358:45;;56414:19;56453:6;56436:14;:23;;;;:::i;:::-;56414:45;;56495:9;:18;56505:7;56495:18;;;;;;;;;;;;56480:11;:33;;56472:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;56560:14;56599:6;56577:10;:19;56588:7;56577:19;;;;;;;;;;;;:28;;;;:::i;:::-;56560:45;;56637:6;56624:9;:19;;56616:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;56722:14;56692:9;:18;56702:7;56692:18;;;;;;;;;;;:27;56711:7;56692:27;;;;;;;;;;;;;;;:44;;;;58688:37:::3;58694:7;58703:2;58707:6;58715:9;;;;;;;;;;;::::0;58688:5:::3;:37::i;:::-;58748:8;58739:17;;:7;:17;;;;:65;;;;;58761:43;58786:7;58795:8;58761:24;:43::i;:::-;58760:44;58739:65;58736:123;;;58821:26;58838:8;58821:16;:26::i;:::-;58736:123;55890:1:::2;;;;;;;;8922::::1;;58458:408:::0;;;;;:::o;55425:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59927:267::-;59990:13;60042:1;60024:15;60036:2;60024:11;:15::i;:::-;:19;60016:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;60075:18;60120:13;60130:2;60120:9;:13::i;:::-;60135;:2;:11;:13::i;:::-;60150:12;60103:60;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;60075:89;;60182:4;60175:11;;;59927:267;;;:::o;56978:310::-;11390:13;:11;:13::i;:::-;57086:1:::1;57073:10;:14;57065:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;57127:25;:13;:23;:25::i;:::-;57201:11;57163:10;:35;57174:23;:13;:21;:23::i;:::-;57163:35;;;;;;;;;;;:49;;;;57260:10;57223:9;:34;57233:23;:13;:21;:23::i;:::-;57223:34;;;;;;;;;;;:47;;;;56978:310:::0;;:::o;57510:323::-;11390:13;:11;:13::i;:::-;57622:23:::1;:13;:21;:23::i;:::-;57610:8;:35;;57602:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;57700:21;57712:8;57700:11;:21::i;:::-;57684:12;:37;;57676:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;57813:12;57776:9;:34;57786:23;:13;:21;:23::i;:::-;57776:34;;;;;;;;;;;:49;;;;57510:323:::0;;:::o;34944:439::-;35185:12;:10;:12::i;:::-;35177:20;;:4;:20;;;:60;;;;35201:36;35218:4;35224:12;:10;:12::i;:::-;35201:16;:36::i;:::-;35177:60;35155:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;35323:52;35346:4;35352:2;35356:3;35361:7;35370:4;35323:22;:52::i;:::-;34944:439;;;;;:::o;55261:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;59721:198::-;11390:13;:11;:13::i;:::-;59769:14:::1;59786:21;59769:38;;59819:9;59834:7;:5;:7::i;:::-;:12;;59854:6;59834:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59818:47;;;59884:4;59876:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;11414:1;;59721:198::o:0;33396:524::-;33552:16;33613:3;:10;33594:8;:15;:29;33586:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;33682:30;33729:8;:15;33715:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33682:63;;33763:9;33758:122;33782:8;:15;33778:1;:19;33758:122;;;33838:30;33848:8;33857:1;33848:11;;;;;;;;;;;;;;;;;;;;;;33861:3;33865:1;33861:6;;;;;;;;;;;;;;;;;;;;;;33838:9;:30::i;:::-;33819:13;33833:1;33819:16;;;;;;;;;;;;;;;;;;;;;:49;;;;;33799:3;;;;:::i;:::-;;;33758:122;;;;33899:13;33892:20;;;33396:524;;;;:::o;49478:122::-;49535:4;49591:1;49559:29;49585:2;49559:25;:29::i;:::-;:33;49552:40;;49478:122;;;:::o;58329:121::-;11390:13;:11;:13::i;:::-;58439:3:::1;58426:10;:16;;;;:::i;:::-;58411:12;:31;;;;58329:121:::0;:::o;58091:117::-;11390:13;:11;:13::i;:::-;58184:16:::1;58165;;:35;;;;;;;;;;;;;;;;;;58091:117:::0;:::o;9287:86::-;9334:4;9358:7;;;;;;;;;;;9351:14;;9287:86;:::o;55339:36::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;51394:359::-;51570:12;:10;:12::i;:::-;51559:23;;:7;:23;;;:66;;;;51586:39;51603:7;51612:12;:10;:12::i;:::-;51586:16;:39::i;:::-;51559:66;51537:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;51713:32;51724:7;51733:3;51738:6;51713:10;:32::i;:::-;51394:359;;;:::o;12152:103::-;11390:13;:11;:13::i;:::-;12217:30:::1;12244:1;12217:18;:30::i;:::-;12152:103::o:0;57938:68::-;11390:13;:11;:13::i;:::-;57990:8:::1;:6;:8::i;:::-;57938:68::o:0;55144:44::-;;;;;;;;;;;;;;;;;:::o;11504:87::-;11550:7;11577:6;;;;;;;;;;;11570:13;;11504:87;:::o;60709:111::-;11390:13;:11;:13::i;:::-;60774:8:::1;:6;:8::i;:::-;60793:19;:17;:19::i;:::-;60709:111::o:0;55450:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56856:114::-;11390:13;:11;:13::i;:::-;56953:9:::1;56933:17;:29;;;;56856:114:::0;:::o;55007:34::-;;;;:::o;33993:155::-;34088:52;34107:12;:10;:12::i;:::-;34121:8;34131;34088:18;:52::i;:::-;33993:155;;:::o;58216:105::-;58270:7;58310:3;58297:12;;:16;;;;:::i;:::-;58290:23;;58216:105;:::o;58012:71::-;11390:13;:11;:13::i;:::-;58065:10:::1;:8;:10::i;:::-;58012:71::o:0;55382:36::-;;;;;;;;;;;;;:::o;49267:113::-;49329:7;49356:12;:16;49369:2;49356:16;;;;;;;;;;;;49349:23;;49267:113;;;:::o;56768:80::-;11390:13;:11;:13::i;:::-;56838:2:::1;56831:4;:9;;;;;;;;;;;;:::i;:::-;;56768:80:::0;:::o;55092:45::-;;;;;;;;;;;;;;;;;:::o;34220:168::-;34319:4;34343:18;:27;34362:7;34343:27;;;;;;;;;;;;;;;:37;34371:8;34343:37;;;;;;;;;;;;;;;;;;;;;;;;;34336:44;;34220:168;;;;:::o;57296:206::-;11390:13;:11;:13::i;:::-;57406:23:::1;:13;:21;:23::i;:::-;57394:8;:35;;57386:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;57483:11;57460:10;:20;57471:8;57460:20;;;;;;;;;;;:34;;;;57296:206:::0;;:::o;34460:407::-;34676:12;:10;:12::i;:::-;34668:20;;:4;:20;;;:60;;;;34692:36;34709:4;34715:12;:10;:12::i;:::-;34692:16;:36::i;:::-;34668:60;34646:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;34814:45;34832:4;34838:2;34842;34846:6;34854:4;34814:17;:45::i;:::-;34460:407;;;;;:::o;12410:201::-;11390:13;:11;:13::i;:::-;12519:1:::1;12499:22;;:8;:22;;;;12491:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12575:28;12594:8;12575:18;:28::i;:::-;12410:201:::0;:::o;55048:37::-;;;;:::o;51059:327::-;51210:12;:10;:12::i;:::-;51199:23;;:7;:23;;;:66;;;;51226:39;51243:7;51252:12;:10;:12::i;:::-;51226:16;:39::i;:::-;51199:66;51177:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;51353:25;51359:7;51368:2;51372:5;51353;:25::i;:::-;51059:327;;;:::o;23304:157::-;23389:4;23428:25;23413:40;;;:11;:40;;;;23406:47;;23304:157;;;:::o;11669:132::-;11744:12;:10;:12::i;:::-;11733:23;;:7;:5;:7::i;:::-;:23;;;11725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11669:132::o;39169:88::-;39243:6;39236:4;:13;;;;;;;;;;;;:::i;:::-;;39169:88;:::o;9446:108::-;9517:8;:6;:8::i;:::-;9516:9;9508:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9446:108::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;60501:200::-;8892:19;:17;:19::i;:::-;60660:33:::1;60672:2;60676;60680:6;60688:4;60660:11;:33::i;:::-;60501:200:::0;;;;:::o;58874:273::-;58959:4;58976:11;58990:16;:26;59007:8;58990:26;;;;;;;;;;;;;;;:35;59017:7;58990:35;;;;;;;;;;;;;;;;;;;;;;;;;58976:49;;59040:6;59036:80;;59100:4;59062:16;:26;59079:8;59062:26;;;;;;;;;;;;;;;:35;59089:7;59062:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;59036:80;59133:6;59126:13;;;58874:273;;;;:::o;59155:558::-;5774:1;6372:7;;:19;;6364:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;5774:1;6505:7;:18;;;;59256:1:::1;59235:23;;:9;:23;;;59232:39;;;59262:7;;59232:39;59281:24;59324:9:::0;59336:1:::1;59324:13;;59320:142;59344:23;:13;:21;:23::i;:::-;59339:1;:28;59320:142;;59427:23;59437:9;59448:1;59427:9;:23::i;:::-;59408:16;:42;;;;:::i;:::-;59389:61;;59369:3;;;;;:::i;:::-;;;;59320:142;;;;59495:1;59475:16;:21;59472:35;;;59499:7;;;59472:35;59517:22;59570:5;59555:12;;59543:9;:24;;;;:::i;:::-;:32;;;;:::i;:::-;59517:58;;59587:9;59602;:14;;59624;59602:41;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59586:57;;;59662:4;59654:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;6536:1;;;;5730::::0;6684:7;:22;;;;59155:558;:::o;32744:105::-;32804:13;32837:4;32830:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32744:105;;;:::o;1895:723::-;1951:13;2181:1;2172:5;:10;2168:53;;;2199:10;;;;;;;;;;;;;;;;;;;;;2168:53;2231:12;2246:5;2231:20;;2262:14;2287:78;2302:1;2294:4;:9;2287:78;;2320:8;;;;;:::i;:::-;;;;2351:2;2343:10;;;;;:::i;:::-;;;2287:78;;;2375:19;2407:6;2397:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2375:39;;2425:154;2441:1;2432:5;:10;2425:154;;2469:1;2459:11;;;;;:::i;:::-;;;2536:2;2528:5;:10;;;;:::i;:::-;2515:2;:24;;;;:::i;:::-;2502:39;;2485:6;2492;2485:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;2565:2;2556:11;;;;;:::i;:::-;;;2425:154;;;2603:6;2589:21;;;;;1895:723;;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;7400:98::-;7453:7;7480:10;7473:17;;7400:98;:::o;37179:1146::-;37406:7;:14;37392:3;:10;:28;37384:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37498:1;37484:16;;:2;:16;;;;37476:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37555:16;37574:12;:10;:12::i;:::-;37555:31;;37599:60;37620:8;37630:4;37636:2;37640:3;37645:7;37654:4;37599:20;:60::i;:::-;37677:9;37672:421;37696:3;:10;37692:1;:14;37672:421;;;37728:10;37741:3;37745:1;37741:6;;;;;;;;;;;;;;;;;;;;;;37728:19;;37762:14;37779:7;37787:1;37779:10;;;;;;;;;;;;;;;;;;;;;;37762:27;;37806:19;37828:9;:13;37838:2;37828:13;;;;;;;;;;;:19;37842:4;37828:19;;;;;;;;;;;;;;;;37806:41;;37885:6;37870:11;:21;;37862:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38018:6;38004:11;:20;37982:9;:13;37992:2;37982:13;;;;;;;;;;;:19;37996:4;37982:19;;;;;;;;;;;;;;;:42;;;;38075:6;38054:9;:13;38064:2;38054:13;;;;;;;;;;;:17;38068:2;38054:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;37672:421;;;37708:3;;;;:::i;:::-;;;37672:421;;;;38140:2;38110:47;;38134:4;38110:47;;38124:8;38110:47;;;38144:3;38149:7;38110:47;;;;;;;:::i;:::-;;;;;;;;38170:59;38190:8;38200:4;38206:2;38210:3;38215:7;38224:4;38170:19;:59::i;:::-;38242:75;38278:8;38288:4;38294:2;38298:3;38303:7;38312:4;38242:35;:75::i;:::-;37179:1146;;;;;;:::o;42944:969::-;43112:1;43096:18;;:4;:18;;;;43088:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;43187:7;:14;43173:3;:10;:28;43165:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;43259:16;43278:12;:10;:12::i;:::-;43259:31;;43303:66;43324:8;43334:4;43348:1;43352:3;43357:7;43303:66;;;;;;;;;;;;:20;:66::i;:::-;43387:9;43382:373;43406:3;:10;43402:1;:14;43382:373;;;43438:10;43451:3;43455:1;43451:6;;;;;;;;;;;;;;;;;;;;;;43438:19;;43472:14;43489:7;43497:1;43489:10;;;;;;;;;;;;;;;;;;;;;;43472:27;;43516:19;43538:9;:13;43548:2;43538:13;;;;;;;;;;;:19;43552:4;43538:19;;;;;;;;;;;;;;;;43516:41;;43595:6;43580:11;:21;;43572:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;43722:6;43708:11;:20;43686:9;:13;43696:2;43686:13;;;;;;;;;;;:19;43700:4;43686:19;;;;;;;;;;;;;;;:42;;;;43382:373;;;43418:3;;;;;:::i;:::-;;;;43382:373;;;;43810:1;43772:55;;43796:4;43772:55;;43786:8;43772:55;;;43814:3;43819:7;43772:55;;;;;;;:::i;:::-;;;;;;;;43840:65;43860:8;43870:4;43884:1;43888:3;43893:7;43840:65;;;;;;;;;;;;:19;:65::i;:::-;42944:969;;;;:::o;12771:191::-;12845:16;12864:6;;;;;;;;;;;12845:25;;12890:8;12881:6;;:17;;;;;;;;;;;;;;;;;;12945:8;12914:40;;12935:8;12914:40;;;;;;;;;;;;12771:191;;:::o;9883:118::-;8892:19;:17;:19::i;:::-;9953:4:::1;9943:7;;:14;;;;;;;;;;;;;;;;;;9973:20;9980:12;:10;:12::i;:::-;9973:20;;;;;;:::i;:::-;;;;;;;;9883:118::o:0;44056:331::-;44211:8;44202:17;;:5;:17;;;;44194:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44314:8;44276:18;:25;44295:5;44276:25;;;;;;;;;;;;;;;:35;44302:8;44276:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;44360:8;44338:41;;44353:5;44338:41;;;44370:8;44338:41;;;;;;:::i;:::-;;;;;;;;44056:331;;;:::o;10142:120::-;9151:16;:14;:16::i;:::-;10211:5:::1;10201:7;;:15;;;;;;;;;;;;;;;;;;10232:22;10241:12;:10;:12::i;:::-;10232:22;;;;;;:::i;:::-;;;;;;;;10142:120::o:0;35847:974::-;36049:1;36035:16;;:2;:16;;;;36027:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36106:16;36125:12;:10;:12::i;:::-;36106:31;;36148:20;36171:21;36189:2;36171:17;:21::i;:::-;36148:44;;36203:24;36230:25;36248:6;36230:17;:25::i;:::-;36203:52;;36268:60;36289:8;36299:4;36305:2;36309:3;36314:7;36323:4;36268:20;:60::i;:::-;36341:19;36363:9;:13;36373:2;36363:13;;;;;;;;;;;:19;36377:4;36363:19;;;;;;;;;;;;;;;;36341:41;;36416:6;36401:11;:21;;36393:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36541:6;36527:11;:20;36505:9;:13;36515:2;36505:13;;;;;;;;;;;:19;36519:4;36505:19;;;;;;;;;;;;;;;:42;;;;36590:6;36569:9;:13;36579:2;36569:13;;;;;;;;;;;:17;36583:2;36569:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;36645:2;36614:46;;36639:4;36614:46;;36629:8;36614:46;;;36649:2;36653:6;36614:46;;;;;;;:::i;:::-;;;;;;;;36673:59;36693:8;36703:4;36709:2;36713:3;36718:7;36727:4;36673:19;:59::i;:::-;36745:68;36776:8;36786:4;36792:2;36796;36800:6;36808:4;36745:30;:68::i;:::-;35847:974;;;;;;;;;:::o;41886:808::-;42029:1;42013:18;;:4;:18;;;;42005:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42084:16;42103:12;:10;:12::i;:::-;42084:31;;42126:20;42149:21;42167:2;42149:17;:21::i;:::-;42126:44;;42181:24;42208:25;42226:6;42208:17;:25::i;:::-;42181:52;;42246:66;42267:8;42277:4;42291:1;42295:3;42300:7;42246:66;;;;;;;;;;;;:20;:66::i;:::-;42325:19;42347:9;:13;42357:2;42347:13;;;;;;;;;;;:19;42361:4;42347:19;;;;;;;;;;;;;;;;42325:41;;42400:6;42385:11;:21;;42377:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42519:6;42505:11;:20;42483:9;:13;42493:2;42483:13;;;;;;;;;;;:19;42497:4;42483:19;;;;;;;;;;;;;;;:42;;;;42593:1;42554:54;;42579:4;42554:54;;42569:8;42554:54;;;42597:2;42601:6;42554:54;;;;;;;:::i;:::-;;;;;;;;42621:65;42641:8;42651:4;42665:1;42669:3;42674:7;42621:65;;;;;;;;;;;;:19;:65::i;:::-;41886:808;;;;;;;:::o;39643:729::-;39810:1;39796:16;;:2;:16;;;;39788:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39863:16;39882:12;:10;:12::i;:::-;39863:31;;39905:20;39928:21;39946:2;39928:17;:21::i;:::-;39905:44;;39960:24;39987:25;40005:6;39987:17;:25::i;:::-;39960:52;;40025:66;40046:8;40064:1;40068:2;40072:3;40077:7;40086:4;40025:20;:66::i;:::-;40125:6;40104:9;:13;40114:2;40104:13;;;;;;;;;;;:17;40118:2;40104:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;40184:2;40147:52;;40180:1;40147:52;;40162:8;40147:52;;;40188:2;40192:6;40147:52;;;;;;;:::i;:::-;;;;;;;;40212:65;40232:8;40250:1;40254:2;40258:3;40263:7;40272:4;40212:19;:65::i;:::-;40290:74;40321:8;40339:1;40343:2;40347;40351:6;40359:4;40290:30;:74::i;:::-;39643:729;;;;;;;:::o;60202:291::-;60419:66;60446:8;60456:4;60462:2;60466:3;60471:7;60480:4;60419:26;:66::i;:::-;60202:291;;;;;;:::o;46521:220::-;;;;;;;:::o;47501:813::-;47741:15;:2;:13;;;:15::i;:::-;47737:570;;;47794:2;47777:43;;;47821:8;47831:4;47837:3;47842:7;47851:4;47777:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;47773:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;48169:6;48162:14;;;;;;;;;;;:::i;:::-;;;;;;;;47773:523;;;48218:62;;;;;;;;;;:::i;:::-;;;;;;;;47773:523;47950:48;;;47938:60;;;:8;:60;;;;47934:159;;48023:50;;;;;;;;;;:::i;:::-;;;;;;;;47934:159;47857:251;47737:570;47501:813;;;;;;:::o;9631:108::-;9698:8;:6;:8::i;:::-;9690:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9631:108::o;48322:198::-;48388:16;48417:22;48456:1;48442:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48417:41;;48480:7;48469:5;48475:1;48469:8;;;;;;;;;;;;;;;;;;;;;:18;;;;;48507:5;48500:12;;;48322:198;;;:::o;46749:744::-;46964:15;:2;:13;;;:15::i;:::-;46960:526;;;47017:2;47000:38;;;47039:8;47049:4;47055:2;47059:6;47067:4;47000:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46996:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;47348:6;47341:14;;;;;;;;;;;:::i;:::-;;;;;;;;46996:479;;;47397:62;;;;;;;;;;:::i;:::-;;;;;;;;46996:479;47134:43;;;47122:55;;;:8;:55;;;;47118:154;;47202:50;;;;;;;;;;:::i;:::-;;;;;;;;47118:154;47073:214;46960:526;46749:744;;;;;;:::o;49675:931::-;49914:66;49941:8;49951:4;49957:2;49961:3;49966:7;49975:4;49914:26;:66::i;:::-;50013:1;49997:18;;:4;:18;;;49993:160;;;50037:9;50032:110;50056:3;:10;50052:1;:14;50032:110;;;50116:7;50124:1;50116:10;;;;;;;;;;;;;;;;;;;;;;50092:12;:20;50105:3;50109:1;50105:6;;;;;;;;;;;;;;;;;;;;;;50092:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;50068:3;;;;:::i;:::-;;;50032:110;;;;49993:160;50183:1;50169:16;;:2;:16;;;50165:434;;;50207:9;50202:386;50226:3;:10;50222:1;:14;50202:386;;;50262:10;50275:3;50279:1;50275:6;;;;;;;;;;;;;;;;;;;;;;50262:19;;50300:14;50317:7;50325:1;50317:10;;;;;;;;;;;;;;;;;;;;;;50300:27;;50346:14;50363:12;:16;50376:2;50363:16;;;;;;;;;;;;50346:33;;50416:6;50406;:16;;50398:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50547:6;50538;:15;50519:12;:16;50532:2;50519:16;;;;;;;;;;;:34;;;;50202:386;;;50238:3;;;;:::i;:::-;;;50202:386;;;;50165:434;49675:931;;;;;;:::o;14202:326::-;14262:4;14519:1;14497:7;:19;;;:23;14490:30;;14202:326;;;:::o;45345:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;702:655::-;798:5;823:81;839:64;896:6;839:64;:::i;:::-;823:81;:::i;:::-;814:90;;924:5;953:6;946:5;939:21;987:4;980:5;976:16;969:23;;1013:6;1063:3;1055:4;1047:6;1043:17;1038:3;1034:27;1031:36;1028:2;;;1092:1;1089;1082:12;1028:2;1128:1;1113:238;1138:6;1135:1;1132:13;1113:238;;;1206:3;1235:37;1268:3;1256:10;1235:37;:::i;:::-;1230:3;1223:50;1302:4;1297:3;1293:14;1286:21;;1336:4;1331:3;1327:14;1320:21;;1173:178;1160:1;1157;1153:9;1148:14;;1113:238;;;1117:14;804:553;;;;;;;:::o;1363:343::-;1440:5;1465:65;1481:48;1522:6;1481:48;:::i;:::-;1465:65;:::i;:::-;1456:74;;1553:6;1546:5;1539:21;1591:4;1584:5;1580:16;1629:3;1620:6;1615:3;1611:16;1608:25;1605:2;;;1646:1;1643;1636:12;1605:2;1659:41;1693:6;1688:3;1683;1659:41;:::i;:::-;1446:260;;;;;;:::o;1712:345::-;1790:5;1815:66;1831:49;1873:6;1831:49;:::i;:::-;1815:66;:::i;:::-;1806:75;;1904:6;1897:5;1890:21;1942:4;1935:5;1931:16;1980:3;1971:6;1966:3;1962:16;1959:25;1956:2;;;1997:1;1994;1987:12;1956:2;2010:41;2044:6;2039:3;2034;2010:41;:::i;:::-;1796:261;;;;;;:::o;2063:139::-;2109:5;2147:6;2134:20;2125:29;;2163:33;2190:5;2163:33;:::i;:::-;2115:87;;;;:::o;2225:303::-;2296:5;2345:3;2338:4;2330:6;2326:17;2322:27;2312:2;;2363:1;2360;2353:12;2312:2;2403:6;2390:20;2428:94;2518:3;2510:6;2503:4;2495:6;2491:17;2428:94;:::i;:::-;2419:103;;2302:226;;;;;:::o;2551:303::-;2622:5;2671:3;2664:4;2656:6;2652:17;2648:27;2638:2;;2689:1;2686;2679:12;2638:2;2729:6;2716:20;2754:94;2844:3;2836:6;2829:4;2821:6;2817:17;2754:94;:::i;:::-;2745:103;;2628:226;;;;;:::o;2860:133::-;2903:5;2941:6;2928:20;2919:29;;2957:30;2981:5;2957:30;:::i;:::-;2909:84;;;;:::o;2999:139::-;3045:5;3083:6;3070:20;3061:29;;3099:33;3126:5;3099:33;:::i;:::-;3051:87;;;;:::o;3144:137::-;3189:5;3227:6;3214:20;3205:29;;3243:32;3269:5;3243:32;:::i;:::-;3195:86;;;;:::o;3287:141::-;3343:5;3374:6;3368:13;3359:22;;3390:32;3416:5;3390:32;:::i;:::-;3349:79;;;;:::o;3447:271::-;3502:5;3551:3;3544:4;3536:6;3532:17;3528:27;3518:2;;3569:1;3566;3559:12;3518:2;3609:6;3596:20;3634:78;3708:3;3700:6;3693:4;3685:6;3681:17;3634:78;:::i;:::-;3625:87;;3508:210;;;;;:::o;3738:273::-;3794:5;3843:3;3836:4;3828:6;3824:17;3820:27;3810:2;;3861:1;3858;3851:12;3810:2;3901:6;3888:20;3926:79;4001:3;3993:6;3986:4;3978:6;3974:17;3926:79;:::i;:::-;3917:88;;3800:211;;;;;:::o;4017:139::-;4063:5;4101:6;4088:20;4079:29;;4117:33;4144:5;4117:33;:::i;:::-;4069:87;;;;:::o;4162:262::-;4221:6;4270:2;4258:9;4249:7;4245:23;4241:32;4238:2;;;4286:1;4283;4276:12;4238:2;4329:1;4354:53;4399:7;4390:6;4379:9;4375:22;4354:53;:::i;:::-;4344:63;;4300:117;4228:196;;;;:::o;4430:407::-;4498:6;4506;4555:2;4543:9;4534:7;4530:23;4526:32;4523:2;;;4571:1;4568;4561:12;4523:2;4614:1;4639:53;4684:7;4675:6;4664:9;4660:22;4639:53;:::i;:::-;4629:63;;4585:117;4741:2;4767:53;4812:7;4803:6;4792:9;4788:22;4767:53;:::i;:::-;4757:63;;4712:118;4513:324;;;;;:::o;4843:1241::-;4997:6;5005;5013;5021;5029;5078:3;5066:9;5057:7;5053:23;5049:33;5046:2;;;5095:1;5092;5085:12;5046:2;5138:1;5163:53;5208:7;5199:6;5188:9;5184:22;5163:53;:::i;:::-;5153:63;;5109:117;5265:2;5291:53;5336:7;5327:6;5316:9;5312:22;5291:53;:::i;:::-;5281:63;;5236:118;5421:2;5410:9;5406:18;5393:32;5452:18;5444:6;5441:30;5438:2;;;5484:1;5481;5474:12;5438:2;5512:78;5582:7;5573:6;5562:9;5558:22;5512:78;:::i;:::-;5502:88;;5364:236;5667:2;5656:9;5652:18;5639:32;5698:18;5690:6;5687:30;5684:2;;;5730:1;5727;5720:12;5684:2;5758:78;5828:7;5819:6;5808:9;5804:22;5758:78;:::i;:::-;5748:88;;5610:236;5913:3;5902:9;5898:19;5885:33;5945:18;5937:6;5934:30;5931:2;;;5977:1;5974;5967:12;5931:2;6005:62;6059:7;6050:6;6039:9;6035:22;6005:62;:::i;:::-;5995:72;;5856:221;5036:1048;;;;;;;;:::o;6090:955::-;6194:6;6202;6210;6218;6226;6275:3;6263:9;6254:7;6250:23;6246:33;6243:2;;;6292:1;6289;6282:12;6243:2;6335:1;6360:53;6405:7;6396:6;6385:9;6381:22;6360:53;:::i;:::-;6350:63;;6306:117;6462:2;6488:53;6533:7;6524:6;6513:9;6509:22;6488:53;:::i;:::-;6478:63;;6433:118;6590:2;6616:53;6661:7;6652:6;6641:9;6637:22;6616:53;:::i;:::-;6606:63;;6561:118;6718:2;6744:53;6789:7;6780:6;6769:9;6765:22;6744:53;:::i;:::-;6734:63;;6689:118;6874:3;6863:9;6859:19;6846:33;6906:18;6898:6;6895:30;6892:2;;;6938:1;6935;6928:12;6892:2;6966:62;7020:7;7011:6;7000:9;6996:22;6966:62;:::i;:::-;6956:72;;6817:221;6233:812;;;;;;;;:::o;7051:838::-;7178:6;7186;7194;7243:2;7231:9;7222:7;7218:23;7214:32;7211:2;;;7259:1;7256;7249:12;7211:2;7302:1;7327:53;7372:7;7363:6;7352:9;7348:22;7327:53;:::i;:::-;7317:63;;7273:117;7457:2;7446:9;7442:18;7429:32;7488:18;7480:6;7477:30;7474:2;;;7520:1;7517;7510:12;7474:2;7548:78;7618:7;7609:6;7598:9;7594:22;7548:78;:::i;:::-;7538:88;;7400:236;7703:2;7692:9;7688:18;7675:32;7734:18;7726:6;7723:30;7720:2;;;7766:1;7763;7756:12;7720:2;7794:78;7864:7;7855:6;7844:9;7840:22;7794:78;:::i;:::-;7784:88;;7646:236;7201:688;;;;;:::o;7895:401::-;7960:6;7968;8017:2;8005:9;7996:7;7992:23;7988:32;7985:2;;;8033:1;8030;8023:12;7985:2;8076:1;8101:53;8146:7;8137:6;8126:9;8122:22;8101:53;:::i;:::-;8091:63;;8047:117;8203:2;8229:50;8271:7;8262:6;8251:9;8247:22;8229:50;:::i;:::-;8219:60;;8174:115;7975:321;;;;;:::o;8302:407::-;8370:6;8378;8427:2;8415:9;8406:7;8402:23;8398:32;8395:2;;;8443:1;8440;8433:12;8395:2;8486:1;8511:53;8556:7;8547:6;8536:9;8532:22;8511:53;:::i;:::-;8501:63;;8457:117;8613:2;8639:53;8684:7;8675:6;8664:9;8660:22;8639:53;:::i;:::-;8629:63;;8584:118;8385:324;;;;;:::o;8715:552::-;8792:6;8800;8808;8857:2;8845:9;8836:7;8832:23;8828:32;8825:2;;;8873:1;8870;8863:12;8825:2;8916:1;8941:53;8986:7;8977:6;8966:9;8962:22;8941:53;:::i;:::-;8931:63;;8887:117;9043:2;9069:53;9114:7;9105:6;9094:9;9090:22;9069:53;:::i;:::-;9059:63;;9014:118;9171:2;9197:53;9242:7;9233:6;9222:9;9218:22;9197:53;:::i;:::-;9187:63;;9142:118;8815:452;;;;;:::o;9273:844::-;9368:6;9376;9384;9392;9400;9449:3;9437:9;9428:7;9424:23;9420:33;9417:2;;;9466:1;9463;9456:12;9417:2;9509:1;9534:53;9579:7;9570:6;9559:9;9555:22;9534:53;:::i;:::-;9524:63;;9480:117;9636:2;9662:53;9707:7;9698:6;9687:9;9683:22;9662:53;:::i;:::-;9652:63;;9607:118;9764:2;9790:53;9835:7;9826:6;9815:9;9811:22;9790:53;:::i;:::-;9780:63;;9735:118;9892:2;9918:53;9963:7;9954:6;9943:9;9939:22;9918:53;:::i;:::-;9908:63;;9863:118;10020:3;10047:53;10092:7;10083:6;10072:9;10068:22;10047:53;:::i;:::-;10037:63;;9991:119;9407:710;;;;;;;;:::o;10123:693::-;10241:6;10249;10298:2;10286:9;10277:7;10273:23;10269:32;10266:2;;;10314:1;10311;10304:12;10266:2;10385:1;10374:9;10370:17;10357:31;10415:18;10407:6;10404:30;10401:2;;;10447:1;10444;10437:12;10401:2;10475:78;10545:7;10536:6;10525:9;10521:22;10475:78;:::i;:::-;10465:88;;10328:235;10630:2;10619:9;10615:18;10602:32;10661:18;10653:6;10650:30;10647:2;;;10693:1;10690;10683:12;10647:2;10721:78;10791:7;10782:6;10771:9;10767:22;10721:78;:::i;:::-;10711:88;;10573:236;10256:560;;;;;:::o;10822:256::-;10878:6;10927:2;10915:9;10906:7;10902:23;10898:32;10895:2;;;10943:1;10940;10933:12;10895:2;10986:1;11011:50;11053:7;11044:6;11033:9;11029:22;11011:50;:::i;:::-;11001:60;;10957:114;10885:193;;;;:::o;11084:260::-;11142:6;11191:2;11179:9;11170:7;11166:23;11162:32;11159:2;;;11207:1;11204;11197:12;11159:2;11250:1;11275:52;11319:7;11310:6;11299:9;11295:22;11275:52;:::i;:::-;11265:62;;11221:116;11149:195;;;;:::o;11350:282::-;11419:6;11468:2;11456:9;11447:7;11443:23;11439:32;11436:2;;;11484:1;11481;11474:12;11436:2;11527:1;11552:63;11607:7;11598:6;11587:9;11583:22;11552:63;:::i;:::-;11542:73;;11498:127;11426:206;;;;:::o;11638:375::-;11707:6;11756:2;11744:9;11735:7;11731:23;11727:32;11724:2;;;11772:1;11769;11762:12;11724:2;11843:1;11832:9;11828:17;11815:31;11873:18;11865:6;11862:30;11859:2;;;11905:1;11902;11895:12;11859:2;11933:63;11988:7;11979:6;11968:9;11964:22;11933:63;:::i;:::-;11923:73;;11786:220;11714:299;;;;:::o;12019:262::-;12078:6;12127:2;12115:9;12106:7;12102:23;12098:32;12095:2;;;12143:1;12140;12133:12;12095:2;12186:1;12211:53;12256:7;12247:6;12236:9;12232:22;12211:53;:::i;:::-;12201:63;;12157:117;12085:196;;;;:::o;12287:407::-;12355:6;12363;12412:2;12400:9;12391:7;12387:23;12383:32;12380:2;;;12428:1;12425;12418:12;12380:2;12471:1;12496:53;12541:7;12532:6;12521:9;12517:22;12496:53;:::i;:::-;12486:63;;12442:117;12598:2;12624:53;12669:7;12660:6;12649:9;12645:22;12624:53;:::i;:::-;12614:63;;12569:118;12370:324;;;;;:::o;12700:179::-;12769:10;12790:46;12832:3;12824:6;12790:46;:::i;:::-;12868:4;12863:3;12859:14;12845:28;;12780:99;;;;:::o;12885:118::-;12972:24;12990:5;12972:24;:::i;:::-;12967:3;12960:37;12950:53;;:::o;13009:157::-;13114:45;13134:24;13152:5;13134:24;:::i;:::-;13114:45;:::i;:::-;13109:3;13102:58;13092:74;;:::o;13202:732::-;13321:3;13350:54;13398:5;13350:54;:::i;:::-;13420:86;13499:6;13494:3;13420:86;:::i;:::-;13413:93;;13530:56;13580:5;13530:56;:::i;:::-;13609:7;13640:1;13625:284;13650:6;13647:1;13644:13;13625:284;;;13726:6;13720:13;13753:63;13812:3;13797:13;13753:63;:::i;:::-;13746:70;;13839:60;13892:6;13839:60;:::i;:::-;13829:70;;13685:224;13672:1;13669;13665:9;13660:14;;13625:284;;;13629:14;13925:3;13918:10;;13326:608;;;;;;;:::o;13940:109::-;14021:21;14036:5;14021:21;:::i;:::-;14016:3;14009:34;13999:50;;:::o;14055:360::-;14141:3;14169:38;14201:5;14169:38;:::i;:::-;14223:70;14286:6;14281:3;14223:70;:::i;:::-;14216:77;;14302:52;14347:6;14342:3;14335:4;14328:5;14324:16;14302:52;:::i;:::-;14379:29;14401:6;14379:29;:::i;:::-;14374:3;14370:39;14363:46;;14145:270;;;;;:::o;14421:364::-;14509:3;14537:39;14570:5;14537:39;:::i;:::-;14592:71;14656:6;14651:3;14592:71;:::i;:::-;14585:78;;14672:52;14717:6;14712:3;14705:4;14698:5;14694:16;14672:52;:::i;:::-;14749:29;14771:6;14749:29;:::i;:::-;14744:3;14740:39;14733:46;;14513:272;;;;;:::o;14791:377::-;14897:3;14925:39;14958:5;14925:39;:::i;:::-;14980:89;15062:6;15057:3;14980:89;:::i;:::-;14973:96;;15078:52;15123:6;15118:3;15111:4;15104:5;15100:16;15078:52;:::i;:::-;15155:6;15150:3;15146:16;15139:23;;14901:267;;;;;:::o;15198:845::-;15301:3;15338:5;15332:12;15367:36;15393:9;15367:36;:::i;:::-;15419:89;15501:6;15496:3;15419:89;:::i;:::-;15412:96;;15539:1;15528:9;15524:17;15555:1;15550:137;;;;15701:1;15696:341;;;;15517:520;;15550:137;15634:4;15630:9;15619;15615:25;15610:3;15603:38;15670:6;15665:3;15661:16;15654:23;;15550:137;;15696:341;15763:38;15795:5;15763:38;:::i;:::-;15823:1;15837:154;15851:6;15848:1;15845:13;15837:154;;;15925:7;15919:14;15915:1;15910:3;15906:11;15899:35;15975:1;15966:7;15962:15;15951:26;;15873:4;15870:1;15866:12;15861:17;;15837:154;;;16020:6;16015:3;16011:16;16004:23;;15703:334;;15517:520;;15305:738;;;;;;:::o;16049:366::-;16191:3;16212:67;16276:2;16271:3;16212:67;:::i;:::-;16205:74;;16288:93;16377:3;16288:93;:::i;:::-;16406:2;16401:3;16397:12;16390:19;;16195:220;;;:::o;16421:366::-;16563:3;16584:67;16648:2;16643:3;16584:67;:::i;:::-;16577:74;;16660:93;16749:3;16660:93;:::i;:::-;16778:2;16773:3;16769:12;16762:19;;16567:220;;;:::o;16793:366::-;16935:3;16956:67;17020:2;17015:3;16956:67;:::i;:::-;16949:74;;17032:93;17121:3;17032:93;:::i;:::-;17150:2;17145:3;17141:12;17134:19;;16939:220;;;:::o;17165:366::-;17307:3;17328:67;17392:2;17387:3;17328:67;:::i;:::-;17321:74;;17404:93;17493:3;17404:93;:::i;:::-;17522:2;17517:3;17513:12;17506:19;;17311:220;;;:::o;17537:366::-;17679:3;17700:67;17764:2;17759:3;17700:67;:::i;:::-;17693:74;;17776:93;17865:3;17776:93;:::i;:::-;17894:2;17889:3;17885:12;17878:19;;17683:220;;;:::o;17909:366::-;18051:3;18072:67;18136:2;18131:3;18072:67;:::i;:::-;18065:74;;18148:93;18237:3;18148:93;:::i;:::-;18266:2;18261:3;18257:12;18250:19;;18055:220;;;:::o;18281:366::-;18423:3;18444:67;18508:2;18503:3;18444:67;:::i;:::-;18437:74;;18520:93;18609:3;18520:93;:::i;:::-;18638:2;18633:3;18629:12;18622:19;;18427:220;;;:::o;18653:366::-;18795:3;18816:67;18880:2;18875:3;18816:67;:::i;:::-;18809:74;;18892:93;18981:3;18892:93;:::i;:::-;19010:2;19005:3;19001:12;18994:19;;18799:220;;;:::o;19025:366::-;19167:3;19188:67;19252:2;19247:3;19188:67;:::i;:::-;19181:74;;19264:93;19353:3;19264:93;:::i;:::-;19382:2;19377:3;19373:12;19366:19;;19171:220;;;:::o;19397:366::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19543:220;;;:::o;19769:366::-;19911:3;19932:67;19996:2;19991:3;19932:67;:::i;:::-;19925:74;;20008:93;20097:3;20008:93;:::i;:::-;20126:2;20121:3;20117:12;20110:19;;19915:220;;;:::o;20141:366::-;20283:3;20304:67;20368:2;20363:3;20304:67;:::i;:::-;20297:74;;20380:93;20469:3;20380:93;:::i;:::-;20498:2;20493:3;20489:12;20482:19;;20287:220;;;:::o;20513:366::-;20655:3;20676:67;20740:2;20735:3;20676:67;:::i;:::-;20669:74;;20752:93;20841:3;20752:93;:::i;:::-;20870:2;20865:3;20861:12;20854:19;;20659:220;;;:::o;20885:366::-;21027:3;21048:67;21112:2;21107:3;21048:67;:::i;:::-;21041:74;;21124:93;21213:3;21124:93;:::i;:::-;21242:2;21237:3;21233:12;21226:19;;21031:220;;;:::o;21257:366::-;21399:3;21420:67;21484:2;21479:3;21420:67;:::i;:::-;21413:74;;21496:93;21585:3;21496:93;:::i;:::-;21614:2;21609:3;21605:12;21598:19;;21403:220;;;:::o;21629:366::-;21771:3;21792:67;21856:2;21851:3;21792:67;:::i;:::-;21785:74;;21868:93;21957:3;21868:93;:::i;:::-;21986:2;21981:3;21977:12;21970:19;;21775:220;;;:::o;22001:366::-;22143:3;22164:67;22228:2;22223:3;22164:67;:::i;:::-;22157:74;;22240:93;22329:3;22240:93;:::i;:::-;22358:2;22353:3;22349:12;22342:19;;22147:220;;;:::o;22373:366::-;22515:3;22536:67;22600:2;22595:3;22536:67;:::i;:::-;22529:74;;22612:93;22701:3;22612:93;:::i;:::-;22730:2;22725:3;22721:12;22714:19;;22519:220;;;:::o;22745:366::-;22887:3;22908:67;22972:2;22967:3;22908:67;:::i;:::-;22901:74;;22984:93;23073:3;22984:93;:::i;:::-;23102:2;23097:3;23093:12;23086:19;;22891:220;;;:::o;23117:366::-;23259:3;23280:67;23344:2;23339:3;23280:67;:::i;:::-;23273:74;;23356:93;23445:3;23356:93;:::i;:::-;23474:2;23469:3;23465:12;23458:19;;23263:220;;;:::o;23489:366::-;23631:3;23652:67;23716:2;23711:3;23652:67;:::i;:::-;23645:74;;23728:93;23817:3;23728:93;:::i;:::-;23846:2;23841:3;23837:12;23830:19;;23635:220;;;:::o;23861:398::-;24020:3;24041:83;24122:1;24117:3;24041:83;:::i;:::-;24034:90;;24133:93;24222:3;24133:93;:::i;:::-;24251:1;24246:3;24242:11;24235:18;;24024:235;;;:::o;24265:366::-;24407:3;24428:67;24492:2;24487:3;24428:67;:::i;:::-;24421:74;;24504:93;24593:3;24504:93;:::i;:::-;24622:2;24617:3;24613:12;24606:19;;24411:220;;;:::o;24637:366::-;24779:3;24800:67;24864:2;24859:3;24800:67;:::i;:::-;24793:74;;24876:93;24965:3;24876:93;:::i;:::-;24994:2;24989:3;24985:12;24978:19;;24783:220;;;:::o;25009:366::-;25151:3;25172:67;25236:2;25231:3;25172:67;:::i;:::-;25165:74;;25248:93;25337:3;25248:93;:::i;:::-;25366:2;25361:3;25357:12;25350:19;;25155:220;;;:::o;25381:366::-;25523:3;25544:67;25608:2;25603:3;25544:67;:::i;:::-;25537:74;;25620:93;25709:3;25620:93;:::i;:::-;25738:2;25733:3;25729:12;25722:19;;25527:220;;;:::o;25753:366::-;25895:3;25916:67;25980:2;25975:3;25916:67;:::i;:::-;25909:74;;25992:93;26081:3;25992:93;:::i;:::-;26110:2;26105:3;26101:12;26094:19;;25899:220;;;:::o;26125:366::-;26267:3;26288:67;26352:2;26347:3;26288:67;:::i;:::-;26281:74;;26364:93;26453:3;26364:93;:::i;:::-;26482:2;26477:3;26473:12;26466:19;;26271:220;;;:::o;26497:366::-;26639:3;26660:67;26724:2;26719:3;26660:67;:::i;:::-;26653:74;;26736:93;26825:3;26736:93;:::i;:::-;26854:2;26849:3;26845:12;26838:19;;26643:220;;;:::o;26869:366::-;27011:3;27032:67;27096:2;27091:3;27032:67;:::i;:::-;27025:74;;27108:93;27197:3;27108:93;:::i;:::-;27226:2;27221:3;27217:12;27210:19;;27015:220;;;:::o;27241:108::-;27318:24;27336:5;27318:24;:::i;:::-;27313:3;27306:37;27296:53;;:::o;27355:118::-;27442:24;27460:5;27442:24;:::i;:::-;27437:3;27430:37;27420:53;;:::o;27479:589::-;27704:3;27726:95;27817:3;27808:6;27726:95;:::i;:::-;27719:102;;27838:95;27929:3;27920:6;27838:95;:::i;:::-;27831:102;;27950:92;28038:3;28029:6;27950:92;:::i;:::-;27943:99;;28059:3;28052:10;;27708:360;;;;;;:::o;28074:410::-;28231:3;28253:92;28341:3;28332:6;28253:92;:::i;:::-;28246:99;;28355:75;28426:3;28417:6;28355:75;:::i;:::-;28455:2;28450:3;28446:12;28439:19;;28475:3;28468:10;;28235:249;;;;;:::o;28490:379::-;28674:3;28696:147;28839:3;28696:147;:::i;:::-;28689:154;;28860:3;28853:10;;28678:191;;;:::o;28875:222::-;28968:4;29006:2;28995:9;28991:18;28983:26;;29019:71;29087:1;29076:9;29072:17;29063:6;29019:71;:::i;:::-;28973:124;;;;:::o;29103:1053::-;29426:4;29464:3;29453:9;29449:19;29441:27;;29478:71;29546:1;29535:9;29531:17;29522:6;29478:71;:::i;:::-;29559:72;29627:2;29616:9;29612:18;29603:6;29559:72;:::i;:::-;29678:9;29672:4;29668:20;29663:2;29652:9;29648:18;29641:48;29706:108;29809:4;29800:6;29706:108;:::i;:::-;29698:116;;29861:9;29855:4;29851:20;29846:2;29835:9;29831:18;29824:48;29889:108;29992:4;29983:6;29889:108;:::i;:::-;29881:116;;30045:9;30039:4;30035:20;30029:3;30018:9;30014:19;30007:49;30073:76;30144:4;30135:6;30073:76;:::i;:::-;30065:84;;29431:725;;;;;;;;:::o;30162:751::-;30385:4;30423:3;30412:9;30408:19;30400:27;;30437:71;30505:1;30494:9;30490:17;30481:6;30437:71;:::i;:::-;30518:72;30586:2;30575:9;30571:18;30562:6;30518:72;:::i;:::-;30600;30668:2;30657:9;30653:18;30644:6;30600:72;:::i;:::-;30682;30750:2;30739:9;30735:18;30726:6;30682:72;:::i;:::-;30802:9;30796:4;30792:20;30786:3;30775:9;30771:19;30764:49;30830:76;30901:4;30892:6;30830:76;:::i;:::-;30822:84;;30390:523;;;;;;;;:::o;30919:373::-;31062:4;31100:2;31089:9;31085:18;31077:26;;31149:9;31143:4;31139:20;31135:1;31124:9;31120:17;31113:47;31177:108;31280:4;31271:6;31177:108;:::i;:::-;31169:116;;31067:225;;;;:::o;31298:634::-;31519:4;31557:2;31546:9;31542:18;31534:26;;31606:9;31600:4;31596:20;31592:1;31581:9;31577:17;31570:47;31634:108;31737:4;31728:6;31634:108;:::i;:::-;31626:116;;31789:9;31783:4;31779:20;31774:2;31763:9;31759:18;31752:48;31817:108;31920:4;31911:6;31817:108;:::i;:::-;31809:116;;31524:408;;;;;:::o;31938:210::-;32025:4;32063:2;32052:9;32048:18;32040:26;;32076:65;32138:1;32127:9;32123:17;32114:6;32076:65;:::i;:::-;32030:118;;;;:::o;32154:313::-;32267:4;32305:2;32294:9;32290:18;32282:26;;32354:9;32348:4;32344:20;32340:1;32329:9;32325:17;32318:47;32382:78;32455:4;32446:6;32382:78;:::i;:::-;32374:86;;32272:195;;;;:::o;32473:419::-;32639:4;32677:2;32666:9;32662:18;32654:26;;32726:9;32720:4;32716:20;32712:1;32701:9;32697:17;32690:47;32754:131;32880:4;32754:131;:::i;:::-;32746:139;;32644:248;;;:::o;32898:419::-;33064:4;33102:2;33091:9;33087:18;33079:26;;33151:9;33145:4;33141:20;33137:1;33126:9;33122:17;33115:47;33179:131;33305:4;33179:131;:::i;:::-;33171:139;;33069:248;;;:::o;33323:419::-;33489:4;33527:2;33516:9;33512:18;33504:26;;33576:9;33570:4;33566:20;33562:1;33551:9;33547:17;33540:47;33604:131;33730:4;33604:131;:::i;:::-;33596:139;;33494:248;;;:::o;33748:419::-;33914:4;33952:2;33941:9;33937:18;33929:26;;34001:9;33995:4;33991:20;33987:1;33976:9;33972:17;33965:47;34029:131;34155:4;34029:131;:::i;:::-;34021:139;;33919:248;;;:::o;34173:419::-;34339:4;34377:2;34366:9;34362:18;34354:26;;34426:9;34420:4;34416:20;34412:1;34401:9;34397:17;34390:47;34454:131;34580:4;34454:131;:::i;:::-;34446:139;;34344:248;;;:::o;34598:419::-;34764:4;34802:2;34791:9;34787:18;34779:26;;34851:9;34845:4;34841:20;34837:1;34826:9;34822:17;34815:47;34879:131;35005:4;34879:131;:::i;:::-;34871:139;;34769:248;;;:::o;35023:419::-;35189:4;35227:2;35216:9;35212:18;35204:26;;35276:9;35270:4;35266:20;35262:1;35251:9;35247:17;35240:47;35304:131;35430:4;35304:131;:::i;:::-;35296:139;;35194:248;;;:::o;35448:419::-;35614:4;35652:2;35641:9;35637:18;35629:26;;35701:9;35695:4;35691:20;35687:1;35676:9;35672:17;35665:47;35729:131;35855:4;35729:131;:::i;:::-;35721:139;;35619:248;;;:::o;35873:419::-;36039:4;36077:2;36066:9;36062:18;36054:26;;36126:9;36120:4;36116:20;36112:1;36101:9;36097:17;36090:47;36154:131;36280:4;36154:131;:::i;:::-;36146:139;;36044:248;;;:::o;36298:419::-;36464:4;36502:2;36491:9;36487:18;36479:26;;36551:9;36545:4;36541:20;36537:1;36526:9;36522:17;36515:47;36579:131;36705:4;36579:131;:::i;:::-;36571:139;;36469:248;;;:::o;36723:419::-;36889:4;36927:2;36916:9;36912:18;36904:26;;36976:9;36970:4;36966:20;36962:1;36951:9;36947:17;36940:47;37004:131;37130:4;37004:131;:::i;:::-;36996:139;;36894:248;;;:::o;37148:419::-;37314:4;37352:2;37341:9;37337:18;37329:26;;37401:9;37395:4;37391:20;37387:1;37376:9;37372:17;37365:47;37429:131;37555:4;37429:131;:::i;:::-;37421:139;;37319:248;;;:::o;37573:419::-;37739:4;37777:2;37766:9;37762:18;37754:26;;37826:9;37820:4;37816:20;37812:1;37801:9;37797:17;37790:47;37854:131;37980:4;37854:131;:::i;:::-;37846:139;;37744:248;;;:::o;37998:419::-;38164:4;38202:2;38191:9;38187:18;38179:26;;38251:9;38245:4;38241:20;38237:1;38226:9;38222:17;38215:47;38279:131;38405:4;38279:131;:::i;:::-;38271:139;;38169:248;;;:::o;38423:419::-;38589:4;38627:2;38616:9;38612:18;38604:26;;38676:9;38670:4;38666:20;38662:1;38651:9;38647:17;38640:47;38704:131;38830:4;38704:131;:::i;:::-;38696:139;;38594:248;;;:::o;38848:419::-;39014:4;39052:2;39041:9;39037:18;39029:26;;39101:9;39095:4;39091:20;39087:1;39076:9;39072:17;39065:47;39129:131;39255:4;39129:131;:::i;:::-;39121:139;;39019:248;;;:::o;39273:419::-;39439:4;39477:2;39466:9;39462:18;39454:26;;39526:9;39520:4;39516:20;39512:1;39501:9;39497:17;39490:47;39554:131;39680:4;39554:131;:::i;:::-;39546:139;;39444:248;;;:::o;39698:419::-;39864:4;39902:2;39891:9;39887:18;39879:26;;39951:9;39945:4;39941:20;39937:1;39926:9;39922:17;39915:47;39979:131;40105:4;39979:131;:::i;:::-;39971:139;;39869:248;;;:::o;40123:419::-;40289:4;40327:2;40316:9;40312:18;40304:26;;40376:9;40370:4;40366:20;40362:1;40351:9;40347:17;40340:47;40404:131;40530:4;40404:131;:::i;:::-;40396:139;;40294:248;;;:::o;40548:419::-;40714:4;40752:2;40741:9;40737:18;40729:26;;40801:9;40795:4;40791:20;40787:1;40776:9;40772:17;40765:47;40829:131;40955:4;40829:131;:::i;:::-;40821:139;;40719:248;;;:::o;40973:419::-;41139:4;41177:2;41166:9;41162:18;41154:26;;41226:9;41220:4;41216:20;41212:1;41201:9;41197:17;41190:47;41254:131;41380:4;41254:131;:::i;:::-;41246:139;;41144:248;;;:::o;41398:419::-;41564:4;41602:2;41591:9;41587:18;41579:26;;41651:9;41645:4;41641:20;41637:1;41626:9;41622:17;41615:47;41679:131;41805:4;41679:131;:::i;:::-;41671:139;;41569:248;;;:::o;41823:419::-;41989:4;42027:2;42016:9;42012:18;42004:26;;42076:9;42070:4;42066:20;42062:1;42051:9;42047:17;42040:47;42104:131;42230:4;42104:131;:::i;:::-;42096:139;;41994:248;;;:::o;42248:419::-;42414:4;42452:2;42441:9;42437:18;42429:26;;42501:9;42495:4;42491:20;42487:1;42476:9;42472:17;42465:47;42529:131;42655:4;42529:131;:::i;:::-;42521:139;;42419:248;;;:::o;42673:419::-;42839:4;42877:2;42866:9;42862:18;42854:26;;42926:9;42920:4;42916:20;42912:1;42901:9;42897:17;42890:47;42954:131;43080:4;42954:131;:::i;:::-;42946:139;;42844:248;;;:::o;43098:419::-;43264:4;43302:2;43291:9;43287:18;43279:26;;43351:9;43345:4;43341:20;43337:1;43326:9;43322:17;43315:47;43379:131;43505:4;43379:131;:::i;:::-;43371:139;;43269:248;;;:::o;43523:419::-;43689:4;43727:2;43716:9;43712:18;43704:26;;43776:9;43770:4;43766:20;43762:1;43751:9;43747:17;43740:47;43804:131;43930:4;43804:131;:::i;:::-;43796:139;;43694:248;;;:::o;43948:419::-;44114:4;44152:2;44141:9;44137:18;44129:26;;44201:9;44195:4;44191:20;44187:1;44176:9;44172:17;44165:47;44229:131;44355:4;44229:131;:::i;:::-;44221:139;;44119:248;;;:::o;44373:419::-;44539:4;44577:2;44566:9;44562:18;44554:26;;44626:9;44620:4;44616:20;44612:1;44601:9;44597:17;44590:47;44654:131;44780:4;44654:131;:::i;:::-;44646:139;;44544:248;;;:::o;44798:222::-;44891:4;44929:2;44918:9;44914:18;44906:26;;44942:71;45010:1;44999:9;44995:17;44986:6;44942:71;:::i;:::-;44896:124;;;;:::o;45026:332::-;45147:4;45185:2;45174:9;45170:18;45162:26;;45198:71;45266:1;45255:9;45251:17;45242:6;45198:71;:::i;:::-;45279:72;45347:2;45336:9;45332:18;45323:6;45279:72;:::i;:::-;45152:206;;;;;:::o;45364:129::-;45398:6;45425:20;;:::i;:::-;45415:30;;45454:33;45482:4;45474:6;45454:33;:::i;:::-;45405:88;;;:::o;45499:75::-;45532:6;45565:2;45559:9;45549:19;;45539:35;:::o;45580:311::-;45657:4;45747:18;45739:6;45736:30;45733:2;;;45769:18;;:::i;:::-;45733:2;45819:4;45811:6;45807:17;45799:25;;45879:4;45873;45869:15;45861:23;;45662:229;;;:::o;45897:311::-;45974:4;46064:18;46056:6;46053:30;46050:2;;;46086:18;;:::i;:::-;46050:2;46136:4;46128:6;46124:17;46116:25;;46196:4;46190;46186:15;46178:23;;45979:229;;;:::o;46214:307::-;46275:4;46365:18;46357:6;46354:30;46351:2;;;46387:18;;:::i;:::-;46351:2;46425:29;46447:6;46425:29;:::i;:::-;46417:37;;46509:4;46503;46499:15;46491:23;;46280:241;;;:::o;46527:308::-;46589:4;46679:18;46671:6;46668:30;46665:2;;;46701:18;;:::i;:::-;46665:2;46739:29;46761:6;46739:29;:::i;:::-;46731:37;;46823:4;46817;46813:15;46805:23;;46594:241;;;:::o;46841:132::-;46908:4;46931:3;46923:11;;46961:4;46956:3;46952:14;46944:22;;46913:60;;;:::o;46979:141::-;47028:4;47051:3;47043:11;;47074:3;47071:1;47064:14;47108:4;47105:1;47095:18;47087:26;;47033:87;;;:::o;47126:114::-;47193:6;47227:5;47221:12;47211:22;;47200:40;;;:::o;47246:98::-;47297:6;47331:5;47325:12;47315:22;;47304:40;;;:::o;47350:99::-;47402:6;47436:5;47430:12;47420:22;;47409:40;;;:::o;47455:113::-;47525:4;47557;47552:3;47548:14;47540:22;;47530:38;;;:::o;47574:184::-;47673:11;47707:6;47702:3;47695:19;47747:4;47742:3;47738:14;47723:29;;47685:73;;;;:::o;47764:168::-;47847:11;47881:6;47876:3;47869:19;47921:4;47916:3;47912:14;47897:29;;47859:73;;;;:::o;47938:147::-;48039:11;48076:3;48061:18;;48051:34;;;;:::o;48091:169::-;48175:11;48209:6;48204:3;48197:19;48249:4;48244:3;48240:14;48225:29;;48187:73;;;;:::o;48266:148::-;48368:11;48405:3;48390:18;;48380:34;;;;:::o;48420:305::-;48460:3;48479:20;48497:1;48479:20;:::i;:::-;48474:25;;48513:20;48531:1;48513:20;:::i;:::-;48508:25;;48667:1;48599:66;48595:74;48592:1;48589:81;48586:2;;;48673:18;;:::i;:::-;48586:2;48717:1;48714;48710:9;48703:16;;48464:261;;;;:::o;48731:185::-;48771:1;48788:20;48806:1;48788:20;:::i;:::-;48783:25;;48822:20;48840:1;48822:20;:::i;:::-;48817:25;;48861:1;48851:2;;48866:18;;:::i;:::-;48851:2;48908:1;48905;48901:9;48896:14;;48773:143;;;;:::o;48922:348::-;48962:7;48985:20;49003:1;48985:20;:::i;:::-;48980:25;;49019:20;49037:1;49019:20;:::i;:::-;49014:25;;49207:1;49139:66;49135:74;49132:1;49129:81;49124:1;49117:9;49110:17;49106:105;49103:2;;;49214:18;;:::i;:::-;49103:2;49262:1;49259;49255:9;49244:20;;48970:300;;;;:::o;49276:191::-;49316:4;49336:20;49354:1;49336:20;:::i;:::-;49331:25;;49370:20;49388:1;49370:20;:::i;:::-;49365:25;;49409:1;49406;49403:8;49400:2;;;49414:18;;:::i;:::-;49400:2;49459:1;49456;49452:9;49444:17;;49321:146;;;;:::o;49473:96::-;49510:7;49539:24;49557:5;49539:24;:::i;:::-;49528:35;;49518:51;;;:::o;49575:90::-;49609:7;49652:5;49645:13;49638:21;49627:32;;49617:48;;;:::o;49671:77::-;49708:7;49737:5;49726:16;;49716:32;;;:::o;49754:149::-;49790:7;49830:66;49823:5;49819:78;49808:89;;49798:105;;;:::o;49909:126::-;49946:7;49986:42;49979:5;49975:54;49964:65;;49954:81;;;:::o;50041:77::-;50078:7;50107:5;50096:16;;50086:32;;;:::o;50124:154::-;50208:6;50203:3;50198;50185:30;50270:1;50261:6;50256:3;50252:16;50245:27;50175:103;;;:::o;50284:307::-;50352:1;50362:113;50376:6;50373:1;50370:13;50362:113;;;50461:1;50456:3;50452:11;50446:18;50442:1;50437:3;50433:11;50426:39;50398:2;50395:1;50391:10;50386:15;;50362:113;;;50493:6;50490:1;50487:13;50484:2;;;50573:1;50564:6;50559:3;50555:16;50548:27;50484:2;50333:258;;;;:::o;50597:320::-;50641:6;50678:1;50672:4;50668:12;50658:22;;50725:1;50719:4;50715:12;50746:18;50736:2;;50802:4;50794:6;50790:17;50780:27;;50736:2;50864;50856:6;50853:14;50833:18;50830:38;50827:2;;;50883:18;;:::i;:::-;50827:2;50648:269;;;;:::o;50923:281::-;51006:27;51028:4;51006:27;:::i;:::-;50998:6;50994:40;51136:6;51124:10;51121:22;51100:18;51088:10;51085:34;51082:62;51079:2;;;51147:18;;:::i;:::-;51079:2;51187:10;51183:2;51176:22;50966:238;;;:::o;51210:233::-;51249:3;51272:24;51290:5;51272:24;:::i;:::-;51263:33;;51318:66;51311:5;51308:77;51305:2;;;51388:18;;:::i;:::-;51305:2;51435:1;51428:5;51424:13;51417:20;;51253:190;;;:::o;51449:100::-;51488:7;51517:26;51537:5;51517:26;:::i;:::-;51506:37;;51496:53;;;:::o;51555:94::-;51594:7;51623:20;51637:5;51623:20;:::i;:::-;51612:31;;51602:47;;;:::o;51655:176::-;51687:1;51704:20;51722:1;51704:20;:::i;:::-;51699:25;;51738:20;51756:1;51738:20;:::i;:::-;51733:25;;51777:1;51767:2;;51782:18;;:::i;:::-;51767:2;51823:1;51820;51816:9;51811:14;;51689:142;;;;:::o;51837:180::-;51885:77;51882:1;51875:88;51982:4;51979:1;51972:15;52006:4;52003:1;51996:15;52023:180;52071:77;52068:1;52061:88;52168:4;52165:1;52158:15;52192:4;52189:1;52182:15;52209:180;52257:77;52254:1;52247:88;52354:4;52351:1;52344:15;52378:4;52375:1;52368:15;52395:180;52443:77;52440:1;52433:88;52540:4;52537:1;52530:15;52564:4;52561:1;52554:15;52581:183;52616:3;52654:1;52636:16;52633:23;52630:2;;;52692:1;52689;52686;52671:23;52714:34;52745:1;52739:8;52714:34;:::i;:::-;52707:41;;52630:2;52620:144;:::o;52770:102::-;52811:6;52862:2;52858:7;52853:2;52846:5;52842:14;52838:28;52828:38;;52818:54;;;:::o;52878:94::-;52911:8;52959:5;52955:2;52951:14;52930:35;;52920:52;;;:::o;52978:106::-;53022:8;53071:5;53066:3;53062:15;53041:36;;53031:53;;;:::o;53090:239::-;53230:34;53226:1;53218:6;53214:14;53207:58;53299:22;53294:2;53286:6;53282:15;53275:47;53196:133;:::o;53335:234::-;53475:34;53471:1;53463:6;53459:14;53452:58;53544:17;53539:2;53531:6;53527:15;53520:42;53441:128;:::o;53575:227::-;53715:34;53711:1;53703:6;53699:14;53692:58;53784:10;53779:2;53771:6;53767:15;53760:35;53681:121;:::o;53808:170::-;53948:22;53944:1;53936:6;53932:14;53925:46;53914:64;:::o;53984:168::-;54124:20;54120:1;54112:6;54108:14;54101:44;54090:62;:::o;54158:225::-;54298:34;54294:1;54286:6;54282:14;54275:58;54367:8;54362:2;54354:6;54350:15;54343:33;54264:119;:::o;54389:172::-;54529:24;54525:1;54517:6;54513:14;54506:48;54495:66;:::o;54567:223::-;54707:34;54703:1;54695:6;54691:14;54684:58;54776:6;54771:2;54763:6;54759:15;54752:31;54673:117;:::o;54796:229::-;54936:34;54932:1;54924:6;54920:14;54913:58;55005:12;55000:2;54992:6;54988:15;54981:37;54902:123;:::o;55031:165::-;55171:17;55167:1;55159:6;55155:14;55148:41;55137:59;:::o;55202:166::-;55342:18;55338:1;55330:6;55326:14;55319:42;55308:60;:::o;55374:166::-;55514:18;55510:1;55502:6;55498:14;55491:42;55480:60;:::o;55546:224::-;55686:34;55682:1;55674:6;55670:14;55663:58;55755:7;55750:2;55742:6;55738:15;55731:32;55652:118;:::o;55776:181::-;55916:33;55912:1;55904:6;55900:14;55893:57;55882:75;:::o;55963:177::-;56103:29;56099:1;56091:6;56087:14;56080:53;56069:71;:::o;56146:222::-;56286:34;56282:1;56274:6;56270:14;56263:58;56355:5;56350:2;56342:6;56338:15;56331:30;56252:116;:::o;56374:229::-;56514:34;56510:1;56502:6;56498:14;56491:58;56583:12;56578:2;56570:6;56566:15;56559:37;56480:123;:::o;56609:182::-;56749:34;56745:1;56737:6;56733:14;56726:58;56715:76;:::o;56797:227::-;56937:34;56933:1;56925:6;56921:14;56914:58;57006:10;57001:2;56993:6;56989:15;56982:35;56903:121;:::o;57030:226::-;57170:34;57166:1;57158:6;57154:14;57147:58;57239:9;57234:2;57226:6;57222:15;57215:34;57136:120;:::o;57262:221::-;57402:34;57398:1;57390:6;57386:14;57379:58;57471:4;57466:2;57458:6;57454:15;57447:29;57368:115;:::o;57489:114::-;57595:8;:::o;57609:226::-;57749:34;57745:1;57737:6;57733:14;57726:58;57818:9;57813:2;57805:6;57801:15;57794:34;57715:120;:::o;57841:228::-;57981:34;57977:1;57969:6;57965:14;57958:58;58050:11;58045:2;58037:6;58033:15;58026:36;57947:122;:::o;58075:228::-;58215:34;58211:1;58203:6;58199:14;58192:58;58284:11;58279:2;58271:6;58267:15;58260:36;58181:122;:::o;58309:227::-;58449:34;58445:1;58437:6;58433:14;58426:58;58518:10;58513:2;58505:6;58501:15;58494:35;58415:121;:::o;58542:220::-;58682:34;58678:1;58670:6;58666:14;58659:58;58751:3;58746:2;58738:6;58734:15;58727:28;58648:114;:::o;58768:220::-;58908:34;58904:1;58896:6;58892:14;58885:58;58977:3;58972:2;58964:6;58960:15;58953:28;58874:114;:::o;58994:181::-;59134:33;59130:1;59122:6;59118:14;59111:57;59100:75;:::o;59181:223::-;59321:34;59317:1;59309:6;59305:14;59298:58;59390:6;59385:2;59377:6;59373:15;59366:31;59287:117;:::o;59410:711::-;59449:3;59487:4;59469:16;59466:26;59463:2;;;59495:5;;59463:2;59524:20;;:::i;:::-;59599:1;59581:16;59577:24;59574:1;59568:4;59553:49;59632:4;59626:11;59731:16;59724:4;59716:6;59712:17;59709:39;59676:18;59668:6;59665:30;59649:113;59646:2;;;59777:5;;;;59646:2;59823:6;59817:4;59813:17;59859:3;59853:10;59886:18;59878:6;59875:30;59872:2;;;59908:5;;;;;;59872:2;59956:6;59949:4;59944:3;59940:14;59936:27;60015:1;59997:16;59993:24;59987:4;59983:35;59978:3;59975:44;59972:2;;;60022:5;;;;;;;59972:2;60039:57;60087:6;60081:4;60077:17;60069:6;60065:30;60059:4;60039:57;:::i;:::-;60112:3;60105:10;;59453:668;;;;;;;:::o;60127:122::-;60200:24;60218:5;60200:24;:::i;:::-;60193:5;60190:35;60180:2;;60239:1;60236;60229:12;60180:2;60170:79;:::o;60255:116::-;60325:21;60340:5;60325:21;:::i;:::-;60318:5;60315:32;60305:2;;60361:1;60358;60351:12;60305:2;60295:76;:::o;60377:122::-;60450:24;60468:5;60450:24;:::i;:::-;60443:5;60440:35;60430:2;;60489:1;60486;60479:12;60430:2;60420:79;:::o;60505:120::-;60577:23;60594:5;60577:23;:::i;:::-;60570:5;60567:34;60557:2;;60615:1;60612;60605:12;60557:2;60547:78;:::o;60631:122::-;60704:24;60722:5;60704:24;:::i;:::-;60697:5;60694:35;60684:2;;60743:1;60740;60733:12;60684:2;60674:79;:::o

Swarm Source

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