ETH Price: $2,526.18 (+3.38%)

Diamond Game Club (DiamondGameClub)
 

Overview

TokenID

5997

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A story from a farming village on a planet in the year 2777. One day, diamonds were mined from the mountain and the village temporarily prospered.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DiamondGameClub

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-14
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.9;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

interface IGGold {
    function balanceOf(address owner) external view returns (uint);
    function burn(address account, uint amount) external;
}

interface ITreasureIsland {
    function randomPirateOwner() external returns (address);
    function addTokensToStake(address account, uint16[] calldata tokenIds) external;
}

contract DiamondGameClub is ERC721, Ownable {
    uint public MAX_TOKENS = 10000;
    uint constant public MINT_PER_TX_LIMIT = 10;

    uint public tokensMinted = 0;
    uint16 public phase = 1;
    uint16 public pirateStolen = 0;
    uint16 public goldMinerStolen = 0;
    uint16 public pirateMinted = 0;

    bool private _paused = true;

    mapping(uint16 => uint) public phasePrice;

    ITreasureIsland public treasureIsland;
    IGGold public gold;

    string private _apiURI = "https://api.diamond-fighting-game.com/token/";
    mapping(uint16 => bool) private _isPirate;
    
    uint16[] private _availableTokens;
    uint16 private _randomIndex = 0;
    uint private _randomCalls = 0;

    mapping(uint16 => address) private _randomSource;

    event TokenStolen(address owner, uint16 tokenId, address thief);

    constructor() ERC721("Diamond Game Club", "DiamondGameClub") {
        _safeMint(msg.sender, 0);
        tokensMinted += 1;

        // Phase 1 is available in the beginning
        switchToSalePhase(1, true);

        // Set default price for each phase
        phasePrice[1] = 0.06 ether;
        phasePrice[2] = 20000 ether;
        phasePrice[3] = 40000 ether;
        phasePrice[4] = 80000 ether;
        
        // Fill random source addresses
        _randomSource[0] = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
        _randomSource[1] = 0x3cD751E6b0078Be393132286c442345e5DC49699;
        _randomSource[2] = 0xb5d85CBf7cB3EE0D56b3bB207D5Fc4B82f43F511;
        _randomSource[3] = 0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94;
        _randomSource[4] = 0x28C6c06298d514Db089934071355E5743bf21d60;
        _randomSource[5] = 0x2FAF487A4414Fe77e2327F0bf4AE2a264a776AD2;
        _randomSource[6] = 0x267be1C1D684F78cb4F6a176C4911b741E4Ffdc0;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }
    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function setPaused(bool _state) external onlyOwner {
        _paused = _state;
    }

    function addAvailableTokens(uint16 _from, uint16 _to) public onlyOwner {
        internalAddTokens(_from, _to);
    }

    function internalAddTokens(uint16 _from, uint16 _to) internal {
        for (uint16 i = _from; i <= _to; i++) {
            _availableTokens.push(i);
        }
    }

    function switchToSalePhase(uint16 _phase, bool _setTokens) public onlyOwner {
        phase = _phase;

        if (!_setTokens) {
            return;
        }

        if (phase == 1) {
            internalAddTokens(1, 9999);
        } else if (phase == 2) {
            //internalAddTokens(10000, 20000);
        } else if (phase == 3) {
            //internalAddTokens(20001, 40000);
        } else if (phase == 4) {
            //internalAddTokens(40001, 49999);
        }
    }

    function giveAway(uint _amount, address _address) public onlyOwner {
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        for (uint i = 0; i < _amount; i++) {
            uint16 tokenId = getTokenToBeMinted();
            _safeMint(_address, tokenId);
        }
    }

    function mint(uint _amount, bool _stake) public payable whenNotPaused {
        require(tx.origin == msg.sender, "Only EOA");
        require(tokensMinted + _amount <= MAX_TOKENS, "All tokens minted");
        require(_amount > 0 && _amount <= MINT_PER_TX_LIMIT, "Invalid mint amount");
        require(_availableTokens.length > 0, "All tokens for this Phase are already sold");

        uint totalPennyCost = 0;
        if (phase == 1) {
            // Paid mint
            require(mintPrice(_amount) == msg.value, "Invalid payment amount");
        } else {
            // Mint via Penny token burn
            require(msg.value == 0, "Now minting is done via Penny");
            totalPennyCost = mintPrice(_amount);
            require(gold.balanceOf(msg.sender) >= totalPennyCost, "Not enough Penny");
        }

        if (totalPennyCost > 0) {
            gold.burn(msg.sender, totalPennyCost);
        }

        tokensMinted += _amount;
        uint16[] memory tokenIds = _stake ? new uint16[](_amount) : new uint16[](0);
        for (uint i = 0; i < _amount; i++) {
            address recipient = selectRecipient();
            if (phase != 1) {
                updateRandomIndex();
            }

            uint16 tokenId = getTokenToBeMinted();

            if (isPirate(tokenId)) {
                pirateMinted += 1;
            }

            if (recipient != msg.sender) {
                isPirate(tokenId) ? pirateStolen += 1 : goldMinerStolen += 1;
                emit TokenStolen(msg.sender, tokenId, recipient);
            }
            
            if (!_stake || recipient != msg.sender) {
                _safeMint(recipient, tokenId);
            } else {
                _safeMint(address(treasureIsland), tokenId);
                tokenIds[i] = tokenId;
            }
        }
        if (_stake) {
            treasureIsland.addTokensToStake(msg.sender, tokenIds);
        }
    }

    function selectRecipient() internal returns (address) {
        if (phase == 1) {
            return msg.sender; // During ETH sale there is no chance to steal NTF
        }

        // 10% chance to steal NTF
        if (getSomeRandomNumber(pirateMinted, 100) >= 10) {
            return msg.sender; // 90%
        }

        address thief = treasureIsland.randomPirateOwner();
        if (thief == address(0x0)) {
            return msg.sender;
        }
        return thief;
    }

    function mintPrice(uint _amount) public view returns (uint) {
        return _amount * phasePrice[phase];
    }

    function isPirate(uint16 id) public view returns (bool) {
        return _isPirate[id];
    }

    function getTokenToBeMinted() private returns (uint16) {
        uint random = getSomeRandomNumber(_availableTokens.length, _availableTokens.length);
        uint16 tokenId = _availableTokens[random];

        _availableTokens[random] = _availableTokens[_availableTokens.length - 1];
        _availableTokens.pop();

        return tokenId;
    }
    
    function updateRandomIndex() internal {
        _randomIndex += 1;
        _randomCalls += 1;
        if (_randomIndex > 6) _randomIndex = 0;
    }

    function getSomeRandomNumber(uint _seed, uint _limit) internal view returns (uint16) {
        uint extra = 0;
        for (uint16 i = 0; i < 7; i++) {
            extra += _randomSource[_randomIndex].balance;
        }

        uint random = uint(
            keccak256(
                abi.encodePacked(
                    _seed,
                    blockhash(block.number - 1),
                    block.coinbase,
                    block.difficulty,
                    msg.sender,
                    tokensMinted,
                    extra,
                    _randomCalls,
                    _randomIndex
                )
            )
        );

        return uint16(random % _limit);
    }

    function shuffleSeeds(uint _seed, uint _max) external onlyOwner {
        uint shuffleCount = getSomeRandomNumber(_seed, _max);
        _randomIndex = uint16(shuffleCount);
        for (uint i = 0; i < shuffleCount; i++) {
            updateRandomIndex();
        }
    }

    function setPirateId(uint16 id, bool special) external onlyOwner {
        _isPirate[id] = special;
    }

    function setPirateIds(uint16[] calldata ids) external onlyOwner {
        for (uint i = 0; i < ids.length; i++) {
            _isPirate[ids[i]] = true;
        }
    }

    function setTreasureIsland(address _island) external onlyOwner {
        treasureIsland = ITreasureIsland(_island);
    }

    function setGold(address _gold) external onlyOwner {
        gold = IGGold(_gold);
    }

    function changePhasePrice(uint16 _phase, uint _weiPrice) external onlyOwner {
        phasePrice[_phase] = _weiPrice;
    }

    function transferFrom(address from, address to, uint tokenId) public virtual override {
        // Hardcode the Manager's approval so that users don't have to waste gas approving
        if (_msgSender() != address(treasureIsland))
            require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _transfer(from, to, tokenId);
    }

    function totalSupply() external view returns (uint) {
        return tokensMinted;
    }

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

    function setBaseURI(string memory uri) external onlyOwner {
        _apiURI = uri;
    }

    function changeRandomSource(uint16 _id, address _address) external onlyOwner {
        _randomSource[_id] = _address;
    }

    function withdraw(address to) external onlyOwner {
        uint balance = address(this).balance;
        payable(to).transfer(balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint16","name":"tokenId","type":"uint16"},{"indexed":false,"internalType":"address","name":"thief","type":"address"}],"name":"TokenStolen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PER_TX_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_from","type":"uint16"},{"internalType":"uint16","name":"_to","type":"uint16"}],"name":"addAvailableTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"uint256","name":"_weiPrice","type":"uint256"}],"name":"changePhasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_id","type":"uint16"},{"internalType":"address","name":"_address","type":"address"}],"name":"changeRandomSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_address","type":"address"}],"name":"giveAway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gold","outputs":[{"internalType":"contract IGGold","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldMinerStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"}],"name":"isPirate","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_stake","type":"bool"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"phasePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateMinted","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pirateStolen","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gold","type":"address"}],"name":"setGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"id","type":"uint16"},{"internalType":"bool","name":"special","type":"bool"}],"name":"setPirateId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16[]","name":"ids","type":"uint16[]"}],"name":"setPirateIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_island","type":"address"}],"name":"setTreasureIsland","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seed","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"shuffleSeeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_phase","type":"uint16"},{"internalType":"bool","name":"_setTokens","type":"bool"}],"name":"switchToSalePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasureIsland","outputs":[{"internalType":"contract ITreasureIsland","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261271060075560006008556001600960006101000a81548161ffff021916908361ffff1602179055506000600960026101000a81548161ffff021916908361ffff1602179055506000600960046101000a81548161ffff021916908361ffff1602179055506000600960066101000a81548161ffff021916908361ffff1602179055506001600960086101000a81548160ff0219169083151502179055506040518060600160405280602c815260200162006a5e602c9139600d9080519060200190620000d392919062000ceb565b506000601060006101000a81548161ffff021916908361ffff16021790555060006011553480156200010457600080fd5b506040518060400160405280601181526020017f4469616d6f6e642047616d6520436c75620000000000000000000000000000008152506040518060400160405280600f81526020017f4469616d6f6e6447616d65436c7562000000000000000000000000000000000081525081600090805190602001906200018992919062000ceb565b508060019080519060200190620001a292919062000ceb565b505050620001c5620001b96200059260201b60201c565b6200059a60201b60201c565b620001d83360006200066060201b60201c565b600160086000828254620001ed919062000dd4565b92505081905550620002076001806200068660201b60201c565b66d529ae9e860000600a6000600161ffff1681526020019081526020016000208190555069043c33c1937564800000600a6000600261ffff16815260200190815260200160002081905550690878678326eac9000000600a6000600361ffff168152602001908152602001600020819055506910f0cf064dd592000000600a6000600461ffff1681526020019081526020016000208190555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2601260008061ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733cd751e6b0078be393132286c442345e5dc4969960126000600161ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b5d85cbf7cb3ee0d56b3bb207d5fc4b82f43f51160126000600261ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c098b2a3aa256d2140208c3de6543aaef5cd3a9460126000600361ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507328c6c06298d514db089934071355e5743bf21d6060126000600461ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732faf487a4414fe77e2327f0bf4ae2a264a776ad260126000600561ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073267be1c1d684f78cb4f6a176c4911b741e4ffdc060126000600661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620012b3565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b62000682828260405180602001604052806000815250620007c660201b60201c565b5050565b620006966200059260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006bc6200083460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000715576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070c9062000e92565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff1602179055508015620007c2576001600960009054906101000a900461ffff1661ffff160362000771576200076b600161270f6200085e60201b60201c565b620007c1565b6002600960009054906101000a900461ffff1661ffff160315620007c0576003600960009054906101000a900461ffff1661ffff160315620007bf576004600960009054906101000a905050505b5b5b5b5050565b620007d88383620008d960201b60201c565b620007ed600084848462000abe60201b60201c565b6200082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008269062000f2a565b60405180910390fd5b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008290505b8161ffff168161ffff1611620008d457600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080620008cb9062000f5a565b91505062000864565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200094b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009429062000fd9565b60405180910390fd5b6200095c8162000c6760201b60201c565b156200099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000996906200104b565b60405180910390fd5b620009b36000838362000cd360201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a05919062000dd4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600062000aec8473ffffffffffffffffffffffffffffffffffffffff1662000cd860201b6200281a1760201c565b1562000c5a578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0262000b1e6200059260201b60201c565b8786866040518563ffffffff1660e01b815260040162000b42949392919062001167565b6020604051808303816000875af192505050801562000b8157506040513d601f19601f8201168201806040525081019062000b7e91906200121d565b60015b62000c09573d806000811462000bb4576040519150601f19603f3d011682016040523d82523d6000602084013e62000bb9565b606091505b50600081510362000c01576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf89062000f2a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505062000c5f565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b82805462000cf9906200127e565b90600052602060002090601f01602090048101928262000d1d576000855562000d69565b82601f1062000d3857805160ff191683800117855562000d69565b8280016001018555821562000d69579182015b8281111562000d6857825182559160200191906001019062000d4b565b5b50905062000d78919062000d7c565b5090565b5b8082111562000d9757600081600090555060010162000d7d565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000de18262000d9b565b915062000dee8362000d9b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e265762000e2562000da5565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e7a60208362000e31565b915062000e878262000e42565b602082019050919050565b6000602082019050818103600083015262000ead8162000e6b565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600062000f1260328362000e31565b915062000f1f8262000eb4565b604082019050919050565b6000602082019050818103600083015262000f458162000f03565b9050919050565b600061ffff82169050919050565b600062000f678262000f4c565b915061ffff820362000f7e5762000f7d62000da5565b5b600182019050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600062000fc160208362000e31565b915062000fce8262000f89565b602082019050919050565b6000602082019050818103600083015262000ff48162000fb2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600062001033601c8362000e31565b9150620010408262000ffb565b602082019050919050565b60006020820190508181036000830152620010668162001024565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200109a826200106d565b9050919050565b620010ac816200108d565b82525050565b620010bd8162000d9b565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015620010ff578082015181840152602081019050620010e2565b838111156200110f576000848401525b50505050565b6000601f19601f8301169050919050565b60006200113382620010c3565b6200113f8185620010ce565b935062001151818560208601620010df565b6200115c8162001115565b840191505092915050565b60006080820190506200117e6000830187620010a1565b6200118d6020830186620010a1565b6200119c6040830185620010b2565b8181036060830152620011b0818462001126565b905095945050505050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620011f781620011c0565b81146200120357600080fd5b50565b6000815190506200121781620011ec565b92915050565b600060208284031215620012365762001235620011bb565b5b6000620012468482850162001206565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200129757607f821691505b602082108103620012ad57620012ac6200124f565b5b50919050565b61579b80620012c36000396000f3fe6080604052600436106102675760003560e01c80636de9f32b11610144578063b488b636116100b6578063e6a72acf1161007a578063e6a72acf14610907578063e985e9c514610944578063efb3d00814610981578063f2fde38b146109aa578063f47c84c5146109d3578063fbec6f21146109fe57610267565b8063b488b6361461080e578063b88d4fde14610839578063c87b56dd14610862578063c9150a9e1461089f578063cb7e93d2146108dc57610267565b806386b854c81161010857806386b854c8146107125780638da5cb5b1461073b57806392b242291461076657806395d89b411461078f578063a22cb465146107ba578063b1c9fe6e146107e357610267565b80636de9f32b14610641578063703731731461066c57806370a0823114610695578063715018a6146106d25780637e603d42146106e957610267565b80632c12395b116101dd5780634efc09f5116101a15780634efc09f51461054257806351cff8d91461056b57806355f804b3146105945780635c975abb146105bd5780636352211e146105e857806367f68fac1461062557610267565b80632c12395b1461045d5780633d4729371461049a57806340ce8d8a146104c357806342842e0e146104ee57806345d510071461051757610267565b806316c38b3c1161022f57806316c38b3c1461036357806318160ddd1461038c5780631adbc550146103b757806323b872dd146103e0578063261d3b2114610409578063268e00a31461043257610267565b806301ffc9a71461026c5780630520b708146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061396c565b610a29565b6040516102a091906139b4565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613a2d565b610b0b565b005b3480156102de57600080fd5b506102e7610bcb565b6040516102f49190613af3565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613b4b565b610c5d565b6040516103319190613b87565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613ba2565b610ce2565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613c0e565b610df9565b005b34801561039857600080fd5b506103a1610e92565b6040516103ae9190613c4a565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613c9f565b610e9c565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613cdf565b610f4f565b005b34801561041557600080fd5b50610430600480360381019061042b9190613d32565b61100c565b005b34801561043e57600080fd5b50610447611160565b6040516104549190613d81565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613d9c565b611174565b60405161049191906139b4565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613c9f565b6111a6565b005b3480156104cf57600080fd5b506104d86112c6565b6040516104e59190613e28565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613cdf565b6112ec565b005b34801561052357600080fd5b5061052c61130c565b6040516105399190613c4a565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190613e43565b611311565b005b34801561057757600080fd5b50610592600480360381019061058d9190613a2d565b6113b1565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613fb8565b61147d565b005b3480156105c957600080fd5b506105d2611513565b6040516105df91906139b4565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613b4b565b61152a565b60405161061c9190613b87565b60405180910390f35b61063f600480360381019061063a9190614001565b6115db565b005b34801561064d57600080fd5b50610656611d4d565b6040516106639190613c4a565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e91906140a1565b611d53565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190613a2d565b611e50565b6040516106c99190613c4a565b60405180910390f35b3480156106de57600080fd5b506106e7611f07565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613a2d565b611f8f565b005b34801561071e57600080fd5b50610739600480360381019061073491906140ee565b61204f565b005b34801561074757600080fd5b50610750612129565b60405161075d9190613b87565b60405180910390f35b34801561077257600080fd5b5061078d6004803603810190610788919061412e565b612153565b005b34801561079b57600080fd5b506107a461222a565b6040516107b19190613af3565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061416e565b6122bc565b005b3480156107ef57600080fd5b506107f861243c565b6040516108059190613d81565b60405180910390f35b34801561081a57600080fd5b50610823612450565b6040516108309190613d81565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b919061424f565b612464565b005b34801561086e57600080fd5b5061088960048036038101906108849190613b4b565b6124c6565b6040516108969190613af3565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613d9c565b61256d565b6040516108d39190613c4a565b60405180910390f35b3480156108e857600080fd5b506108f1612585565b6040516108fe9190613d81565b60405180910390f35b34801561091357600080fd5b5061092e60048036038101906109299190613b4b565b612599565b60405161093b9190613c4a565b60405180910390f35b34801561095057600080fd5b5061096b600480360381019061096691906142d2565b6125d9565b60405161097891906139b4565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614312565b61266d565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190613a2d565b6126f7565b005b3480156109df57600080fd5b506109e86127ee565b6040516109f59190613c4a565b60405180910390f35b348015610a0a57600080fd5b50610a136127f4565b604051610a209190614373565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b038261282d565b5b9050919050565b610b13612897565b73ffffffffffffffffffffffffffffffffffffffff16610b31612129565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906143da565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610bda90614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690614429565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c688261289f565b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906144cc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ced8261152a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061455e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7c612897565b73ffffffffffffffffffffffffffffffffffffffff161480610dab5750610daa81610da5612897565b6125d9565b5b610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de1906145f0565b60405180910390fd5b610df4838361290b565b505050565b610e01612897565b73ffffffffffffffffffffffffffffffffffffffff16610e1f612129565b73ffffffffffffffffffffffffffffffffffffffff1614610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c906143da565b60405180910390fd5b80600960086101000a81548160ff02191690831515021790555050565b6000600854905090565b610ea4612897565b73ffffffffffffffffffffffffffffffffffffffff16610ec2612129565b73ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906143da565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f90612897565b73ffffffffffffffffffffffffffffffffffffffff1614610ffc57610fbc610fb6612897565b826129c4565b610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290614682565b60405180910390fd5b5b611007838383612aa2565b505050565b611014612897565b73ffffffffffffffffffffffffffffffffffffffff16611032612129565b73ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906143da565b60405180910390fd5b6007548260085461109991906146d1565b11156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614773565b60405180910390fd5b6000600f8054905011611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614805565b60405180910390fd5b60005b8281101561115b576000611137612cfd565b9050611147838261ffff16612e2a565b50808061115390614825565b915050611125565b505050565b600960049054906101000a900461ffff1681565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ae612897565b73ffffffffffffffffffffffffffffffffffffffff166111cc612129565b73ffffffffffffffffffffffffffffffffffffffff1614611222576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611219906143da565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff16021790555080156112c2576001600960009054906101000a900461ffff1661ffff16036112735761126e600161270f612e48565b6112c1565b6002600960009054906101000a900461ffff1661ffff1603156112c0576003600960009054906101000a900461ffff1661ffff1603156112bf576004600960009054906101000a905050505b5b5b5b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61130783838360405180602001604052806000815250612464565b505050565b600a81565b611319612897565b73ffffffffffffffffffffffffffffffffffffffff16611337612129565b73ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906143da565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113b9612897565b73ffffffffffffffffffffffffffffffffffffffff166113d7612129565b73ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906143da565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611478573d6000803e3d6000fd5b505050565b611485612897565b73ffffffffffffffffffffffffffffffffffffffff166114a3612129565b73ffffffffffffffffffffffffffffffffffffffff16146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906143da565b60405180910390fd5b80600d908051906020019061150f92919061385d565b5050565b6000600960089054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906148df565b60405180910390fd5b80915050919050565b6115e3611513565b15611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061494b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611688906149b7565b60405180910390fd5b600754826008546116a291906146d1565b11156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614773565b60405180910390fd5b6000821180156116f45750600a8211155b611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614a23565b60405180910390fd5b6000600f805490501161177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290614805565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff16036117e857346117a384612599565b146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90614a8f565b60405180910390fd5b611915565b6000341461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614afb565b60405180910390fd5b61183483612599565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118929190613b87565b602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190614b30565b1015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614ba9565b60405180910390fd5b5b60008111156119ae57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b815260040161197b929190614bc9565b600060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050505b82600860008282546119c091906146d1565b92505081905550600082611a1d57600067ffffffffffffffff8111156119e9576119e8613e8d565b5b604051908082528060200260200182016040528015611a175781602001602082028036833780820191505090505b50611a67565b8367ffffffffffffffff811115611a3757611a36613e8d565b5b604051908082528060200260200182016040528015611a655781602001602082028036833780820191505090505b505b905060005b84811015611cb0576000611a7e612ebf565b90506001600960009054906101000a900461ffff1661ffff1614611aa557611aa4612ff3565b5b6000611aaf612cfd565b9050611aba81611174565b15611afa576001600960068282829054906101000a900461ffff16611adf9190614bf2565b92506101000a81548161ffff021916908361ffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611bef57611b3681611174565b611b78576001600960048282829054906101000a900461ffff16611b5a9190614bf2565b92506101000a81548161ffff021916908361ffff1602179055611bb2565b6001600960028282829054906101000a900461ffff16611b989190614bf2565b92506101000a81548161ffff021916908361ffff16021790555b507f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e0610338284604051611be693929190614c2a565b60405180910390a15b851580611c2857503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c4057611c3b828261ffff16612e2a565b611c9b565b611c70600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16612e2a565b80848481518110611c8457611c83614c61565b5b602002602001019061ffff16908161ffff16815250505b50508080611ca890614825565b915050611a6c565b508215611d4757600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611d14929190614d4e565b600060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b505050505b50505050565b60085481565b611d5b612897565b73ffffffffffffffffffffffffffffffffffffffff16611d79612129565b73ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906143da565b60405180910390fd5b60005b82829050811015611e4b576001600e6000858585818110611df657611df5614c61565b5b9050602002016020810190611e0b9190613d9c565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e4390614825565b915050611dd2565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614df0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f0f612897565b73ffffffffffffffffffffffffffffffffffffffff16611f2d612129565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906143da565b60405180910390fd5b611f8d6000613085565b565b611f97612897565b73ffffffffffffffffffffffffffffffffffffffff16611fb5612129565b73ffffffffffffffffffffffffffffffffffffffff161461200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906143da565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612057612897565b73ffffffffffffffffffffffffffffffffffffffff16612075612129565b73ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906143da565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61215b612897565b73ffffffffffffffffffffffffffffffffffffffff16612179612129565b73ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c6906143da565b60405180910390fd5b60006121db838361314b565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b8181101561222457612211612ff3565b808061221c90614825565b915050612201565b50505050565b60606001805461223990614429565b80601f016020809104026020016040519081016040528092919081815260200182805461226590614429565b80156122b25780601f10612287576101008083540402835291602001916122b2565b820191906000526020600020905b81548152906001019060200180831161229557829003601f168201915b5050505050905090565b6122c4612897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614e5c565b60405180910390fd5b806005600061233e612897565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123eb612897565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161243091906139b4565b60405180910390a35050565b600960009054906101000a900461ffff1681565b600960069054906101000a900461ffff1681565b61247561246f612897565b836129c4565b6124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614682565b60405180910390fd5b6124c08484848461325b565b50505050565b60606124d18261289f565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614eee565b60405180910390fd5b600061251a6132b7565b9050600081511161253a5760405180602001604052806000815250612565565b8061254484613349565b604051602001612555929190614f4a565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b600960029054906101000a900461ffff1681565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826125d29190614f6e565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612675612897565b73ffffffffffffffffffffffffffffffffffffffff16612693612129565b73ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143da565b60405180910390fd5b6126f38282612e48565b5050565b6126ff612897565b73ffffffffffffffffffffffffffffffffffffffff1661271d612129565b73ffffffffffffffffffffffffffffffffffffffff1614612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061503a565b60405180910390fd5b6127eb81613085565b50565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661297e8361152a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129cf8261289f565b612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906150cc565b60405180910390fd5b6000612a198361152a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a8857508373ffffffffffffffffffffffffffffffffffffffff16612a7084610c5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a995750612a9881856125d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ac28261152a565b73ffffffffffffffffffffffffffffffffffffffff1614612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906151f0565b60405180910390fd5b612b928383836134a9565b612b9d60008261290b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bed9190615210565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4491906146d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612d14600f80549050600f8054905061314b565b61ffff1690506000600f8281548110612d3057612d2f614c61565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f80549050612d6a9190615210565b81548110612d7b57612d7a614c61565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f8381548110612db357612db2614c61565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f805480612df457612df3615244565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b612e448282604051806020016040528060008152506134ae565b5050565b60008290505b8161ffff168161ffff1611612eba57600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080612eb290615273565b915050612e4e565b505050565b60006001600960009054906101000a900461ffff1661ffff1603612ee557339050612ff0565b600a612f06600960069054906101000a900461ffff1661ffff16606461314b565b61ffff1610612f1757339050612ff0565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cabaab86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fac91906152b2565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612feb5733915050612ff0565b809150505b90565b6001601060008282829054906101000a900461ffff166130139190614bf2565b92506101000a81548161ffff021916908361ffff16021790555060016011600082825461304091906146d1565b925050819055506006601060009054906101000a900461ffff1661ffff161115613083576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b60078161ffff1610156131e55760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631826131d091906146d1565b915080806131dd90615273565b915050613155565b506000846001436131f69190615210565b4041443360085487601154601060009054906101000a900461ffff1660405160200161322a999897969594939291906153e4565b6040516020818303038152906040528051906020012060001c9050838161325191906154b6565b9250505092915050565b613266848484612aa2565b61327284848484613509565b6132b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a890615559565b60405180910390fd5b50505050565b6060600d80546132c690614429565b80601f01602080910402602001604051908101604052809291908181526020018280546132f290614429565b801561333f5780601f106133145761010080835404028352916020019161333f565b820191906000526020600020905b81548152906001019060200180831161332257829003601f168201915b5050505050905090565b606060008203613390576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134a4565b600082905060005b600082146133c25780806133ab90614825565b915050600a826133bb9190615579565b9150613398565b60008167ffffffffffffffff8111156133de576133dd613e8d565b5b6040519080825280601f01601f1916602001820160405280156134105781602001600182028036833780820191505090505b5090505b6000851461349d576001826134299190615210565b9150600a8561343891906154b6565b603061344491906146d1565b60f81b81838151811061345a57613459614c61565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134969190615579565b9450613414565b8093505050505b919050565b505050565b6134b88383613690565b6134c56000848484613509565b613504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fb90615559565b60405180910390fd5b505050565b600061352a8473ffffffffffffffffffffffffffffffffffffffff1661281a565b15613683578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613553612897565b8786866040518563ffffffff1660e01b815260040161357594939291906155ff565b6020604051808303816000875af19250505080156135b157506040513d601f19601f820116820180604052508101906135ae9190615660565b60015b613633573d80600081146135e1576040519150601f19603f3d011682016040523d82523d6000602084013e6135e6565b606091505b50600081510361362b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362290615559565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613688565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f6906156d9565b60405180910390fd5b6137088161289f565b15613748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373f90615745565b60405180910390fd5b613754600083836134a9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137a491906146d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461386990614429565b90600052602060002090601f01602090048101928261388b57600085556138d2565b82601f106138a457805160ff19168380011785556138d2565b828001600101855582156138d2579182015b828111156138d15782518255916020019190600101906138b6565b5b5090506138df91906138e3565b5090565b5b808211156138fc5760008160009055506001016138e4565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61394981613914565b811461395457600080fd5b50565b60008135905061396681613940565b92915050565b6000602082840312156139825761398161390a565b5b600061399084828501613957565b91505092915050565b60008115159050919050565b6139ae81613999565b82525050565b60006020820190506139c960008301846139a5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139fa826139cf565b9050919050565b613a0a816139ef565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b600060208284031215613a4357613a4261390a565b5b6000613a5184828501613a18565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a94578082015181840152602081019050613a79565b83811115613aa3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac582613a5a565b613acf8185613a65565b9350613adf818560208601613a76565b613ae881613aa9565b840191505092915050565b60006020820190508181036000830152613b0d8184613aba565b905092915050565b6000819050919050565b613b2881613b15565b8114613b3357600080fd5b50565b600081359050613b4581613b1f565b92915050565b600060208284031215613b6157613b6061390a565b5b6000613b6f84828501613b36565b91505092915050565b613b81816139ef565b82525050565b6000602082019050613b9c6000830184613b78565b92915050565b60008060408385031215613bb957613bb861390a565b5b6000613bc785828601613a18565b9250506020613bd885828601613b36565b9150509250929050565b613beb81613999565b8114613bf657600080fd5b50565b600081359050613c0881613be2565b92915050565b600060208284031215613c2457613c2361390a565b5b6000613c3284828501613bf9565b91505092915050565b613c4481613b15565b82525050565b6000602082019050613c5f6000830184613c3b565b92915050565b600061ffff82169050919050565b613c7c81613c65565b8114613c8757600080fd5b50565b600081359050613c9981613c73565b92915050565b60008060408385031215613cb657613cb561390a565b5b6000613cc485828601613c8a565b9250506020613cd585828601613bf9565b9150509250929050565b600080600060608486031215613cf857613cf761390a565b5b6000613d0686828701613a18565b9350506020613d1786828701613a18565b9250506040613d2886828701613b36565b9150509250925092565b60008060408385031215613d4957613d4861390a565b5b6000613d5785828601613b36565b9250506020613d6885828601613a18565b9150509250929050565b613d7b81613c65565b82525050565b6000602082019050613d966000830184613d72565b92915050565b600060208284031215613db257613db161390a565b5b6000613dc084828501613c8a565b91505092915050565b6000819050919050565b6000613dee613de9613de4846139cf565b613dc9565b6139cf565b9050919050565b6000613e0082613dd3565b9050919050565b6000613e1282613df5565b9050919050565b613e2281613e07565b82525050565b6000602082019050613e3d6000830184613e19565b92915050565b60008060408385031215613e5a57613e5961390a565b5b6000613e6885828601613c8a565b9250506020613e7985828601613b36565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ec582613aa9565b810181811067ffffffffffffffff82111715613ee457613ee3613e8d565b5b80604052505050565b6000613ef7613900565b9050613f038282613ebc565b919050565b600067ffffffffffffffff821115613f2357613f22613e8d565b5b613f2c82613aa9565b9050602081019050919050565b82818337600083830152505050565b6000613f5b613f5684613f08565b613eed565b905082815260208101848484011115613f7757613f76613e88565b5b613f82848285613f39565b509392505050565b600082601f830112613f9f57613f9e613e83565b5b8135613faf848260208601613f48565b91505092915050565b600060208284031215613fce57613fcd61390a565b5b600082013567ffffffffffffffff811115613fec57613feb61390f565b5b613ff884828501613f8a565b91505092915050565b600080604083850312156140185761401761390a565b5b600061402685828601613b36565b925050602061403785828601613bf9565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261406157614060613e83565b5b8235905067ffffffffffffffff81111561407e5761407d614041565b5b60208301915083602082028301111561409a57614099614046565b5b9250929050565b600080602083850312156140b8576140b761390a565b5b600083013567ffffffffffffffff8111156140d6576140d561390f565b5b6140e28582860161404b565b92509250509250929050565b600080604083850312156141055761410461390a565b5b600061411385828601613c8a565b925050602061412485828601613a18565b9150509250929050565b600080604083850312156141455761414461390a565b5b600061415385828601613b36565b925050602061416485828601613b36565b9150509250929050565b600080604083850312156141855761418461390a565b5b600061419385828601613a18565b92505060206141a485828601613bf9565b9150509250929050565b600067ffffffffffffffff8211156141c9576141c8613e8d565b5b6141d282613aa9565b9050602081019050919050565b60006141f26141ed846141ae565b613eed565b90508281526020810184848401111561420e5761420d613e88565b5b614219848285613f39565b509392505050565b600082601f83011261423657614235613e83565b5b81356142468482602086016141df565b91505092915050565b600080600080608085870312156142695761426861390a565b5b600061427787828801613a18565b945050602061428887828801613a18565b935050604061429987828801613b36565b925050606085013567ffffffffffffffff8111156142ba576142b961390f565b5b6142c687828801614221565b91505092959194509250565b600080604083850312156142e9576142e861390a565b5b60006142f785828601613a18565b925050602061430885828601613a18565b9150509250929050565b600080604083850312156143295761432861390a565b5b600061433785828601613c8a565b925050602061434885828601613c8a565b9150509250929050565b600061435d82613df5565b9050919050565b61436d81614352565b82525050565b60006020820190506143886000830184614364565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143c4602083613a65565b91506143cf8261438e565b602082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444157607f821691505b602082108103614454576144536143fa565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144b6602c83613a65565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614548602183613a65565b9150614553826144ec565b604082019050919050565b600060208201905081810360008301526145778161453b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145da603883613a65565b91506145e58261457e565b604082019050919050565b60006020820190508181036000830152614609816145cd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061466c603183613a65565b915061467782614610565b604082019050919050565b6000602082019050818103600083015261469b8161465f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146dc82613b15565b91506146e783613b15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561471c5761471b6146a2565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b600061475d601183613a65565b915061476882614727565b602082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b60006147ef602a83613a65565b91506147fa82614793565b604082019050919050565b6000602082019050818103600083015261481e816147e2565b9050919050565b600061483082613b15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614862576148616146a2565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006148c9602983613a65565b91506148d48261486d565b604082019050919050565b600060208201905081810360008301526148f8816148bc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614935601083613a65565b9150614940826148ff565b602082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006149a1600883613a65565b91506149ac8261496b565b602082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b6000614a0d601383613a65565b9150614a18826149d7565b602082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b6000614a79601683613a65565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e79000000600082015250565b6000614ae5601d83613a65565b9150614af082614aaf565b602082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b600081519050614b2a81613b1f565b92915050565b600060208284031215614b4657614b4561390a565b5b6000614b5484828501614b1b565b91505092915050565b7f4e6f7420656e6f7567682050656e6e7900000000000000000000000000000000600082015250565b6000614b93601083613a65565b9150614b9e82614b5d565b602082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b6000604082019050614bde6000830185613b78565b614beb6020830184613c3b565b9392505050565b6000614bfd82613c65565b9150614c0883613c65565b92508261ffff03821115614c1f57614c1e6146a2565b5b828201905092915050565b6000606082019050614c3f6000830186613b78565b614c4c6020830185613d72565b614c596040830184613b78565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cc581613c65565b82525050565b6000614cd78383614cbc565b60208301905092915050565b6000602082019050919050565b6000614cfb82614c90565b614d058185614c9b565b9350614d1083614cac565b8060005b83811015614d41578151614d288882614ccb565b9750614d3383614ce3565b925050600181019050614d14565b5085935050505092915050565b6000604082019050614d636000830185613b78565b8181036020830152614d758184614cf0565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614dda602a83613a65565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614e46601983613a65565b9150614e5182614e10565b602082019050919050565b60006020820190508181036000830152614e7581614e39565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ed8602f83613a65565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b600081905092915050565b6000614f2482613a5a565b614f2e8185614f0e565b9350614f3e818560208601613a76565b80840191505092915050565b6000614f568285614f19565b9150614f628284614f19565b91508190509392505050565b6000614f7982613b15565b9150614f8483613b15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fbd57614fbc6146a2565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615024602683613a65565b915061502f82614fc8565b604082019050919050565b6000602082019050818103600083015261505381615017565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006150b6602c83613a65565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615148602983613a65565b9150615153826150ec565b604082019050919050565b600060208201905081810360008301526151778161513b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151da602483613a65565b91506151e58261517e565b604082019050919050565b60006020820190508181036000830152615209816151cd565b9050919050565b600061521b82613b15565b915061522683613b15565b925082821015615239576152386146a2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061527e82613c65565b915061ffff8203615292576152916146a2565b5b600182019050919050565b6000815190506152ac81613a01565b92915050565b6000602082840312156152c8576152c761390a565b5b60006152d68482850161529d565b91505092915050565b6000819050919050565b6152fa6152f582613b15565b6152df565b82525050565b6000819050919050565b6000819050919050565b61532561532082615300565b61530a565b82525050565b6000615336826139cf565b9050919050565b60008160601b9050919050565b60006153558261533d565b9050919050565b60006153678261534a565b9050919050565b61537f61537a8261532b565b61535c565b82525050565b60006153908261534a565b9050919050565b6153a86153a3826139ef565b615385565b82525050565b60008160f01b9050919050565b60006153c6826153ae565b9050919050565b6153de6153d982613c65565b6153bb565b82525050565b60006153f0828c6152e9565b602082019150615400828b615314565b602082019150615410828a61536e565b60148201915061542082896152e9565b6020820191506154308288615397565b60148201915061544082876152e9565b60208201915061545082866152e9565b60208201915061546082856152e9565b60208201915061547082846153cd565b6002820191508190509a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006154c182613b15565b91506154cc83613b15565b9250826154dc576154db615487565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615543603283613a65565b915061554e826154e7565b604082019050919050565b6000602082019050818103600083015261557281615536565b9050919050565b600061558482613b15565b915061558f83613b15565b92508261559f5761559e615487565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b60006155d1826155aa565b6155db81856155b5565b93506155eb818560208601613a76565b6155f481613aa9565b840191505092915050565b60006080820190506156146000830187613b78565b6156216020830186613b78565b61562e6040830185613c3b565b818103606083015261564081846155c6565b905095945050505050565b60008151905061565a81613940565b92915050565b6000602082840312156156765761567561390a565b5b60006156848482850161564b565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006156c3602083613a65565b91506156ce8261568d565b602082019050919050565b600060208201905081810360008301526156f2816156b6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061572f601c83613a65565b915061573a826156f9565b602082019050919050565b6000602082019050818103600083015261575e81615722565b905091905056fea26469706673582212200294bc23880bbaf19bb85ae545646e25e5097dd47616657a2568034efc54f63164736f6c634300080d003368747470733a2f2f6170692e6469616d6f6e642d6669676874696e672d67616d652e636f6d2f746f6b656e2f

Deployed Bytecode

0x6080604052600436106102675760003560e01c80636de9f32b11610144578063b488b636116100b6578063e6a72acf1161007a578063e6a72acf14610907578063e985e9c514610944578063efb3d00814610981578063f2fde38b146109aa578063f47c84c5146109d3578063fbec6f21146109fe57610267565b8063b488b6361461080e578063b88d4fde14610839578063c87b56dd14610862578063c9150a9e1461089f578063cb7e93d2146108dc57610267565b806386b854c81161010857806386b854c8146107125780638da5cb5b1461073b57806392b242291461076657806395d89b411461078f578063a22cb465146107ba578063b1c9fe6e146107e357610267565b80636de9f32b14610641578063703731731461066c57806370a0823114610695578063715018a6146106d25780637e603d42146106e957610267565b80632c12395b116101dd5780634efc09f5116101a15780634efc09f51461054257806351cff8d91461056b57806355f804b3146105945780635c975abb146105bd5780636352211e146105e857806367f68fac1461062557610267565b80632c12395b1461045d5780633d4729371461049a57806340ce8d8a146104c357806342842e0e146104ee57806345d510071461051757610267565b806316c38b3c1161022f57806316c38b3c1461036357806318160ddd1461038c5780631adbc550146103b757806323b872dd146103e0578063261d3b2114610409578063268e00a31461043257610267565b806301ffc9a71461026c5780630520b708146102a957806306fdde03146102d2578063081812fc146102fd578063095ea7b31461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e919061396c565b610a29565b6040516102a091906139b4565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613a2d565b610b0b565b005b3480156102de57600080fd5b506102e7610bcb565b6040516102f49190613af3565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190613b4b565b610c5d565b6040516103319190613b87565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c9190613ba2565b610ce2565b005b34801561036f57600080fd5b5061038a60048036038101906103859190613c0e565b610df9565b005b34801561039857600080fd5b506103a1610e92565b6040516103ae9190613c4a565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613c9f565b610e9c565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613cdf565b610f4f565b005b34801561041557600080fd5b50610430600480360381019061042b9190613d32565b61100c565b005b34801561043e57600080fd5b50610447611160565b6040516104549190613d81565b60405180910390f35b34801561046957600080fd5b50610484600480360381019061047f9190613d9c565b611174565b60405161049191906139b4565b60405180910390f35b3480156104a657600080fd5b506104c160048036038101906104bc9190613c9f565b6111a6565b005b3480156104cf57600080fd5b506104d86112c6565b6040516104e59190613e28565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613cdf565b6112ec565b005b34801561052357600080fd5b5061052c61130c565b6040516105399190613c4a565b60405180910390f35b34801561054e57600080fd5b5061056960048036038101906105649190613e43565b611311565b005b34801561057757600080fd5b50610592600480360381019061058d9190613a2d565b6113b1565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190613fb8565b61147d565b005b3480156105c957600080fd5b506105d2611513565b6040516105df91906139b4565b60405180910390f35b3480156105f457600080fd5b5061060f600480360381019061060a9190613b4b565b61152a565b60405161061c9190613b87565b60405180910390f35b61063f600480360381019061063a9190614001565b6115db565b005b34801561064d57600080fd5b50610656611d4d565b6040516106639190613c4a565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e91906140a1565b611d53565b005b3480156106a157600080fd5b506106bc60048036038101906106b79190613a2d565b611e50565b6040516106c99190613c4a565b60405180910390f35b3480156106de57600080fd5b506106e7611f07565b005b3480156106f557600080fd5b50610710600480360381019061070b9190613a2d565b611f8f565b005b34801561071e57600080fd5b50610739600480360381019061073491906140ee565b61204f565b005b34801561074757600080fd5b50610750612129565b60405161075d9190613b87565b60405180910390f35b34801561077257600080fd5b5061078d6004803603810190610788919061412e565b612153565b005b34801561079b57600080fd5b506107a461222a565b6040516107b19190613af3565b60405180910390f35b3480156107c657600080fd5b506107e160048036038101906107dc919061416e565b6122bc565b005b3480156107ef57600080fd5b506107f861243c565b6040516108059190613d81565b60405180910390f35b34801561081a57600080fd5b50610823612450565b6040516108309190613d81565b60405180910390f35b34801561084557600080fd5b50610860600480360381019061085b919061424f565b612464565b005b34801561086e57600080fd5b5061088960048036038101906108849190613b4b565b6124c6565b6040516108969190613af3565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c19190613d9c565b61256d565b6040516108d39190613c4a565b60405180910390f35b3480156108e857600080fd5b506108f1612585565b6040516108fe9190613d81565b60405180910390f35b34801561091357600080fd5b5061092e60048036038101906109299190613b4b565b612599565b60405161093b9190613c4a565b60405180910390f35b34801561095057600080fd5b5061096b600480360381019061096691906142d2565b6125d9565b60405161097891906139b4565b60405180910390f35b34801561098d57600080fd5b506109a860048036038101906109a39190614312565b61266d565b005b3480156109b657600080fd5b506109d160048036038101906109cc9190613a2d565b6126f7565b005b3480156109df57600080fd5b506109e86127ee565b6040516109f59190613c4a565b60405180910390f35b348015610a0a57600080fd5b50610a136127f4565b604051610a209190614373565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b045750610b038261282d565b5b9050919050565b610b13612897565b73ffffffffffffffffffffffffffffffffffffffff16610b31612129565b73ffffffffffffffffffffffffffffffffffffffff1614610b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7e906143da565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060008054610bda90614429565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0690614429565b8015610c535780601f10610c2857610100808354040283529160200191610c53565b820191906000526020600020905b815481529060010190602001808311610c3657829003601f168201915b5050505050905090565b6000610c688261289f565b610ca7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9e906144cc565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ced8261152a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d549061455e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610d7c612897565b73ffffffffffffffffffffffffffffffffffffffff161480610dab5750610daa81610da5612897565b6125d9565b5b610dea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de1906145f0565b60405180910390fd5b610df4838361290b565b505050565b610e01612897565b73ffffffffffffffffffffffffffffffffffffffff16610e1f612129565b73ffffffffffffffffffffffffffffffffffffffff1614610e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6c906143da565b60405180910390fd5b80600960086101000a81548160ff02191690831515021790555050565b6000600854905090565b610ea4612897565b73ffffffffffffffffffffffffffffffffffffffff16610ec2612129565b73ffffffffffffffffffffffffffffffffffffffff1614610f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0f906143da565b60405180910390fd5b80600e60008461ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f90612897565b73ffffffffffffffffffffffffffffffffffffffff1614610ffc57610fbc610fb6612897565b826129c4565b610ffb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff290614682565b60405180910390fd5b5b611007838383612aa2565b505050565b611014612897565b73ffffffffffffffffffffffffffffffffffffffff16611032612129565b73ffffffffffffffffffffffffffffffffffffffff1614611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906143da565b60405180910390fd5b6007548260085461109991906146d1565b11156110da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d190614773565b60405180910390fd5b6000600f8054905011611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614805565b60405180910390fd5b60005b8281101561115b576000611137612cfd565b9050611147838261ffff16612e2a565b50808061115390614825565b915050611125565b505050565b600960049054906101000a900461ffff1681565b6000600e60008361ffff1661ffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111ae612897565b73ffffffffffffffffffffffffffffffffffffffff166111cc612129565b73ffffffffffffffffffffffffffffffffffffffff1614611222576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611219906143da565b60405180910390fd5b81600960006101000a81548161ffff021916908361ffff16021790555080156112c2576001600960009054906101000a900461ffff1661ffff16036112735761126e600161270f612e48565b6112c1565b6002600960009054906101000a900461ffff1661ffff1603156112c0576003600960009054906101000a900461ffff1661ffff1603156112bf576004600960009054906101000a905050505b5b5b5b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61130783838360405180602001604052806000815250612464565b505050565b600a81565b611319612897565b73ffffffffffffffffffffffffffffffffffffffff16611337612129565b73ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611384906143da565b60405180910390fd5b80600a60008461ffff1661ffff168152602001908152602001600020819055505050565b6113b9612897565b73ffffffffffffffffffffffffffffffffffffffff166113d7612129565b73ffffffffffffffffffffffffffffffffffffffff161461142d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611424906143da565b60405180910390fd5b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611478573d6000803e3d6000fd5b505050565b611485612897565b73ffffffffffffffffffffffffffffffffffffffff166114a3612129565b73ffffffffffffffffffffffffffffffffffffffff16146114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f0906143da565b60405180910390fd5b80600d908051906020019061150f92919061385d565b5050565b6000600960089054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c9906148df565b60405180910390fd5b80915050919050565b6115e3611513565b15611623576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161a9061494b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611691576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611688906149b7565b60405180910390fd5b600754826008546116a291906146d1565b11156116e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116da90614773565b60405180910390fd5b6000821180156116f45750600a8211155b611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a90614a23565b60405180910390fd5b6000600f805490501161177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290614805565b60405180910390fd5b60006001600960009054906101000a900461ffff1661ffff16036117e857346117a384612599565b146117e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117da90614a8f565b60405180910390fd5b611915565b6000341461182b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182290614afb565b60405180910390fd5b61183483612599565b905080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016118929190613b87565b602060405180830381865afa1580156118af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d39190614b30565b1015611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b90614ba9565b60405180910390fd5b5b60008111156119ae57600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac33836040518363ffffffff1660e01b815260040161197b929190614bc9565b600060405180830381600087803b15801561199557600080fd5b505af11580156119a9573d6000803e3d6000fd5b505050505b82600860008282546119c091906146d1565b92505081905550600082611a1d57600067ffffffffffffffff8111156119e9576119e8613e8d565b5b604051908082528060200260200182016040528015611a175781602001602082028036833780820191505090505b50611a67565b8367ffffffffffffffff811115611a3757611a36613e8d565b5b604051908082528060200260200182016040528015611a655781602001602082028036833780820191505090505b505b905060005b84811015611cb0576000611a7e612ebf565b90506001600960009054906101000a900461ffff1661ffff1614611aa557611aa4612ff3565b5b6000611aaf612cfd565b9050611aba81611174565b15611afa576001600960068282829054906101000a900461ffff16611adf9190614bf2565b92506101000a81548161ffff021916908361ffff1602179055505b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611bef57611b3681611174565b611b78576001600960048282829054906101000a900461ffff16611b5a9190614bf2565b92506101000a81548161ffff021916908361ffff1602179055611bb2565b6001600960028282829054906101000a900461ffff16611b989190614bf2565b92506101000a81548161ffff021916908361ffff16021790555b507f5c8f955114cce6fe18920ee4bb38271b9a0f5579589f3767ccf22eb6484e0610338284604051611be693929190614c2a565b60405180910390a15b851580611c2857503373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c4057611c3b828261ffff16612e2a565b611c9b565b611c70600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261ffff16612e2a565b80848481518110611c8457611c83614c61565b5b602002602001019061ffff16908161ffff16815250505b50508080611ca890614825565b915050611a6c565b508215611d4757600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e21f4cbe33836040518363ffffffff1660e01b8152600401611d14929190614d4e565b600060405180830381600087803b158015611d2e57600080fd5b505af1158015611d42573d6000803e3d6000fd5b505050505b50505050565b60085481565b611d5b612897565b73ffffffffffffffffffffffffffffffffffffffff16611d79612129565b73ffffffffffffffffffffffffffffffffffffffff1614611dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc6906143da565b60405180910390fd5b60005b82829050811015611e4b576001600e6000858585818110611df657611df5614c61565b5b9050602002016020810190611e0b9190613d9c565b61ffff1661ffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e4390614825565b915050611dd2565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ec0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb790614df0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611f0f612897565b73ffffffffffffffffffffffffffffffffffffffff16611f2d612129565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906143da565b60405180910390fd5b611f8d6000613085565b565b611f97612897565b73ffffffffffffffffffffffffffffffffffffffff16611fb5612129565b73ffffffffffffffffffffffffffffffffffffffff161461200b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612002906143da565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612057612897565b73ffffffffffffffffffffffffffffffffffffffff16612075612129565b73ffffffffffffffffffffffffffffffffffffffff16146120cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c2906143da565b60405180910390fd5b80601260008461ffff1661ffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61215b612897565b73ffffffffffffffffffffffffffffffffffffffff16612179612129565b73ffffffffffffffffffffffffffffffffffffffff16146121cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c6906143da565b60405180910390fd5b60006121db838361314b565b61ffff16905080601060006101000a81548161ffff021916908361ffff16021790555060005b8181101561222457612211612ff3565b808061221c90614825565b915050612201565b50505050565b60606001805461223990614429565b80601f016020809104026020016040519081016040528092919081815260200182805461226590614429565b80156122b25780601f10612287576101008083540402835291602001916122b2565b820191906000526020600020905b81548152906001019060200180831161229557829003601f168201915b5050505050905090565b6122c4612897565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232890614e5c565b60405180910390fd5b806005600061233e612897565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166123eb612897565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161243091906139b4565b60405180910390a35050565b600960009054906101000a900461ffff1681565b600960069054906101000a900461ffff1681565b61247561246f612897565b836129c4565b6124b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ab90614682565b60405180910390fd5b6124c08484848461325b565b50505050565b60606124d18261289f565b612510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250790614eee565b60405180910390fd5b600061251a6132b7565b9050600081511161253a5760405180602001604052806000815250612565565b8061254484613349565b604051602001612555929190614f4a565b6040516020818303038152906040525b915050919050565b600a6020528060005260406000206000915090505481565b600960029054906101000a900461ffff1681565b6000600a6000600960009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002054826125d29190614f6e565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612675612897565b73ffffffffffffffffffffffffffffffffffffffff16612693612129565b73ffffffffffffffffffffffffffffffffffffffff16146126e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e0906143da565b60405180910390fd5b6126f38282612e48565b5050565b6126ff612897565b73ffffffffffffffffffffffffffffffffffffffff1661271d612129565b73ffffffffffffffffffffffffffffffffffffffff1614612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a906143da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99061503a565b60405180910390fd5b6127eb81613085565b50565b60075481565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661297e8361152a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006129cf8261289f565b612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a05906150cc565b60405180910390fd5b6000612a198361152a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612a8857508373ffffffffffffffffffffffffffffffffffffffff16612a7084610c5d565b73ffffffffffffffffffffffffffffffffffffffff16145b80612a995750612a9881856125d9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612ac28261152a565b73ffffffffffffffffffffffffffffffffffffffff1614612b18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0f9061515e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612b87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7e906151f0565b60405180910390fd5b612b928383836134a9565b612b9d60008261290b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612bed9190615210565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c4491906146d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600080612d14600f80549050600f8054905061314b565b61ffff1690506000600f8281548110612d3057612d2f614c61565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff169050600f6001600f80549050612d6a9190615210565b81548110612d7b57612d7a614c61565b5b90600052602060002090601091828204019190066002029054906101000a900461ffff16600f8381548110612db357612db2614c61565b5b90600052602060002090601091828204019190066002026101000a81548161ffff021916908361ffff160217905550600f805480612df457612df3615244565b5b60019003818190600052602060002090601091828204019190066002026101000a81549061ffff02191690559055809250505090565b612e448282604051806020016040528060008152506134ae565b5050565b60008290505b8161ffff168161ffff1611612eba57600f8190806001815401808255809150506001900390600052602060002090601091828204019190066002029091909190916101000a81548161ffff021916908361ffff1602179055508080612eb290615273565b915050612e4e565b505050565b60006001600960009054906101000a900461ffff1661ffff1603612ee557339050612ff0565b600a612f06600960069054906101000a900461ffff1661ffff16606461314b565b61ffff1610612f1757339050612ff0565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cabaab86040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612f88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fac91906152b2565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612feb5733915050612ff0565b809150505b90565b6001601060008282829054906101000a900461ffff166130139190614bf2565b92506101000a81548161ffff021916908361ffff16021790555060016011600082825461304091906146d1565b925050819055506006601060009054906101000a900461ffff1661ffff161115613083576000601060006101000a81548161ffff021916908361ffff1602179055505b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806000905060005b60078161ffff1610156131e55760126000601060009054906101000a900461ffff1661ffff1661ffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1631826131d091906146d1565b915080806131dd90615273565b915050613155565b506000846001436131f69190615210565b4041443360085487601154601060009054906101000a900461ffff1660405160200161322a999897969594939291906153e4565b6040516020818303038152906040528051906020012060001c9050838161325191906154b6565b9250505092915050565b613266848484612aa2565b61327284848484613509565b6132b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a890615559565b60405180910390fd5b50505050565b6060600d80546132c690614429565b80601f01602080910402602001604051908101604052809291908181526020018280546132f290614429565b801561333f5780601f106133145761010080835404028352916020019161333f565b820191906000526020600020905b81548152906001019060200180831161332257829003601f168201915b5050505050905090565b606060008203613390576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506134a4565b600082905060005b600082146133c25780806133ab90614825565b915050600a826133bb9190615579565b9150613398565b60008167ffffffffffffffff8111156133de576133dd613e8d565b5b6040519080825280601f01601f1916602001820160405280156134105781602001600182028036833780820191505090505b5090505b6000851461349d576001826134299190615210565b9150600a8561343891906154b6565b603061344491906146d1565b60f81b81838151811061345a57613459614c61565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856134969190615579565b9450613414565b8093505050505b919050565b505050565b6134b88383613690565b6134c56000848484613509565b613504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134fb90615559565b60405180910390fd5b505050565b600061352a8473ffffffffffffffffffffffffffffffffffffffff1661281a565b15613683578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613553612897565b8786866040518563ffffffff1660e01b815260040161357594939291906155ff565b6020604051808303816000875af19250505080156135b157506040513d601f19601f820116820180604052508101906135ae9190615660565b60015b613633573d80600081146135e1576040519150601f19603f3d011682016040523d82523d6000602084013e6135e6565b606091505b50600081510361362b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161362290615559565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613688565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f6906156d9565b60405180910390fd5b6137088161289f565b15613748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373f90615745565b60405180910390fd5b613754600083836134a9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546137a491906146d1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b82805461386990614429565b90600052602060002090601f01602090048101928261388b57600085556138d2565b82601f106138a457805160ff19168380011785556138d2565b828001600101855582156138d2579182015b828111156138d15782518255916020019190600101906138b6565b5b5090506138df91906138e3565b5090565b5b808211156138fc5760008160009055506001016138e4565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61394981613914565b811461395457600080fd5b50565b60008135905061396681613940565b92915050565b6000602082840312156139825761398161390a565b5b600061399084828501613957565b91505092915050565b60008115159050919050565b6139ae81613999565b82525050565b60006020820190506139c960008301846139a5565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139fa826139cf565b9050919050565b613a0a816139ef565b8114613a1557600080fd5b50565b600081359050613a2781613a01565b92915050565b600060208284031215613a4357613a4261390a565b5b6000613a5184828501613a18565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a94578082015181840152602081019050613a79565b83811115613aa3576000848401525b50505050565b6000601f19601f8301169050919050565b6000613ac582613a5a565b613acf8185613a65565b9350613adf818560208601613a76565b613ae881613aa9565b840191505092915050565b60006020820190508181036000830152613b0d8184613aba565b905092915050565b6000819050919050565b613b2881613b15565b8114613b3357600080fd5b50565b600081359050613b4581613b1f565b92915050565b600060208284031215613b6157613b6061390a565b5b6000613b6f84828501613b36565b91505092915050565b613b81816139ef565b82525050565b6000602082019050613b9c6000830184613b78565b92915050565b60008060408385031215613bb957613bb861390a565b5b6000613bc785828601613a18565b9250506020613bd885828601613b36565b9150509250929050565b613beb81613999565b8114613bf657600080fd5b50565b600081359050613c0881613be2565b92915050565b600060208284031215613c2457613c2361390a565b5b6000613c3284828501613bf9565b91505092915050565b613c4481613b15565b82525050565b6000602082019050613c5f6000830184613c3b565b92915050565b600061ffff82169050919050565b613c7c81613c65565b8114613c8757600080fd5b50565b600081359050613c9981613c73565b92915050565b60008060408385031215613cb657613cb561390a565b5b6000613cc485828601613c8a565b9250506020613cd585828601613bf9565b9150509250929050565b600080600060608486031215613cf857613cf761390a565b5b6000613d0686828701613a18565b9350506020613d1786828701613a18565b9250506040613d2886828701613b36565b9150509250925092565b60008060408385031215613d4957613d4861390a565b5b6000613d5785828601613b36565b9250506020613d6885828601613a18565b9150509250929050565b613d7b81613c65565b82525050565b6000602082019050613d966000830184613d72565b92915050565b600060208284031215613db257613db161390a565b5b6000613dc084828501613c8a565b91505092915050565b6000819050919050565b6000613dee613de9613de4846139cf565b613dc9565b6139cf565b9050919050565b6000613e0082613dd3565b9050919050565b6000613e1282613df5565b9050919050565b613e2281613e07565b82525050565b6000602082019050613e3d6000830184613e19565b92915050565b60008060408385031215613e5a57613e5961390a565b5b6000613e6885828601613c8a565b9250506020613e7985828601613b36565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ec582613aa9565b810181811067ffffffffffffffff82111715613ee457613ee3613e8d565b5b80604052505050565b6000613ef7613900565b9050613f038282613ebc565b919050565b600067ffffffffffffffff821115613f2357613f22613e8d565b5b613f2c82613aa9565b9050602081019050919050565b82818337600083830152505050565b6000613f5b613f5684613f08565b613eed565b905082815260208101848484011115613f7757613f76613e88565b5b613f82848285613f39565b509392505050565b600082601f830112613f9f57613f9e613e83565b5b8135613faf848260208601613f48565b91505092915050565b600060208284031215613fce57613fcd61390a565b5b600082013567ffffffffffffffff811115613fec57613feb61390f565b5b613ff884828501613f8a565b91505092915050565b600080604083850312156140185761401761390a565b5b600061402685828601613b36565b925050602061403785828601613bf9565b9150509250929050565b600080fd5b600080fd5b60008083601f84011261406157614060613e83565b5b8235905067ffffffffffffffff81111561407e5761407d614041565b5b60208301915083602082028301111561409a57614099614046565b5b9250929050565b600080602083850312156140b8576140b761390a565b5b600083013567ffffffffffffffff8111156140d6576140d561390f565b5b6140e28582860161404b565b92509250509250929050565b600080604083850312156141055761410461390a565b5b600061411385828601613c8a565b925050602061412485828601613a18565b9150509250929050565b600080604083850312156141455761414461390a565b5b600061415385828601613b36565b925050602061416485828601613b36565b9150509250929050565b600080604083850312156141855761418461390a565b5b600061419385828601613a18565b92505060206141a485828601613bf9565b9150509250929050565b600067ffffffffffffffff8211156141c9576141c8613e8d565b5b6141d282613aa9565b9050602081019050919050565b60006141f26141ed846141ae565b613eed565b90508281526020810184848401111561420e5761420d613e88565b5b614219848285613f39565b509392505050565b600082601f83011261423657614235613e83565b5b81356142468482602086016141df565b91505092915050565b600080600080608085870312156142695761426861390a565b5b600061427787828801613a18565b945050602061428887828801613a18565b935050604061429987828801613b36565b925050606085013567ffffffffffffffff8111156142ba576142b961390f565b5b6142c687828801614221565b91505092959194509250565b600080604083850312156142e9576142e861390a565b5b60006142f785828601613a18565b925050602061430885828601613a18565b9150509250929050565b600080604083850312156143295761432861390a565b5b600061433785828601613c8a565b925050602061434885828601613c8a565b9150509250929050565b600061435d82613df5565b9050919050565b61436d81614352565b82525050565b60006020820190506143886000830184614364565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006143c4602083613a65565b91506143cf8261438e565b602082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061444157607f821691505b602082108103614454576144536143fa565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006144b6602c83613a65565b91506144c18261445a565b604082019050919050565b600060208201905081810360008301526144e5816144a9565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000614548602183613a65565b9150614553826144ec565b604082019050919050565b600060208201905081810360008301526145778161453b565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006145da603883613a65565b91506145e58261457e565b604082019050919050565b60006020820190508181036000830152614609816145cd565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061466c603183613a65565b915061467782614610565b604082019050919050565b6000602082019050818103600083015261469b8161465f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146dc82613b15565b91506146e783613b15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561471c5761471b6146a2565b5b828201905092915050565b7f416c6c20746f6b656e73206d696e746564000000000000000000000000000000600082015250565b600061475d601183613a65565b915061476882614727565b602082019050919050565b6000602082019050818103600083015261478c81614750565b9050919050565b7f416c6c20746f6b656e7320666f7220746869732050686173652061726520616c60008201527f726561647920736f6c6400000000000000000000000000000000000000000000602082015250565b60006147ef602a83613a65565b91506147fa82614793565b604082019050919050565b6000602082019050818103600083015261481e816147e2565b9050919050565b600061483082613b15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614862576148616146a2565b5b600182019050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006148c9602983613a65565b91506148d48261486d565b604082019050919050565b600060208201905081810360008301526148f8816148bc565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000614935601083613a65565b9150614940826148ff565b602082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006149a1600883613a65565b91506149ac8261496b565b602082019050919050565b600060208201905081810360008301526149d081614994565b9050919050565b7f496e76616c6964206d696e7420616d6f756e7400000000000000000000000000600082015250565b6000614a0d601383613a65565b9150614a18826149d7565b602082019050919050565b60006020820190508181036000830152614a3c81614a00565b9050919050565b7f496e76616c6964207061796d656e7420616d6f756e7400000000000000000000600082015250565b6000614a79601683613a65565b9150614a8482614a43565b602082019050919050565b60006020820190508181036000830152614aa881614a6c565b9050919050565b7f4e6f77206d696e74696e6720697320646f6e65207669612050656e6e79000000600082015250565b6000614ae5601d83613a65565b9150614af082614aaf565b602082019050919050565b60006020820190508181036000830152614b1481614ad8565b9050919050565b600081519050614b2a81613b1f565b92915050565b600060208284031215614b4657614b4561390a565b5b6000614b5484828501614b1b565b91505092915050565b7f4e6f7420656e6f7567682050656e6e7900000000000000000000000000000000600082015250565b6000614b93601083613a65565b9150614b9e82614b5d565b602082019050919050565b60006020820190508181036000830152614bc281614b86565b9050919050565b6000604082019050614bde6000830185613b78565b614beb6020830184613c3b565b9392505050565b6000614bfd82613c65565b9150614c0883613c65565b92508261ffff03821115614c1f57614c1e6146a2565b5b828201905092915050565b6000606082019050614c3f6000830186613b78565b614c4c6020830185613d72565b614c596040830184613b78565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614cc581613c65565b82525050565b6000614cd78383614cbc565b60208301905092915050565b6000602082019050919050565b6000614cfb82614c90565b614d058185614c9b565b9350614d1083614cac565b8060005b83811015614d41578151614d288882614ccb565b9750614d3383614ce3565b925050600181019050614d14565b5085935050505092915050565b6000604082019050614d636000830185613b78565b8181036020830152614d758184614cf0565b90509392505050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614dda602a83613a65565b9150614de582614d7e565b604082019050919050565b60006020820190508181036000830152614e0981614dcd565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614e46601983613a65565b9150614e5182614e10565b602082019050919050565b60006020820190508181036000830152614e7581614e39565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614ed8602f83613a65565b9150614ee382614e7c565b604082019050919050565b60006020820190508181036000830152614f0781614ecb565b9050919050565b600081905092915050565b6000614f2482613a5a565b614f2e8185614f0e565b9350614f3e818560208601613a76565b80840191505092915050565b6000614f568285614f19565b9150614f628284614f19565b91508190509392505050565b6000614f7982613b15565b9150614f8483613b15565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fbd57614fbc6146a2565b5b828202905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615024602683613a65565b915061502f82614fc8565b604082019050919050565b6000602082019050818103600083015261505381615017565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006150b6602c83613a65565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000615148602983613a65565b9150615153826150ec565b604082019050919050565b600060208201905081810360008301526151778161513b565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006151da602483613a65565b91506151e58261517e565b604082019050919050565b60006020820190508181036000830152615209816151cd565b9050919050565b600061521b82613b15565b915061522683613b15565b925082821015615239576152386146a2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061527e82613c65565b915061ffff8203615292576152916146a2565b5b600182019050919050565b6000815190506152ac81613a01565b92915050565b6000602082840312156152c8576152c761390a565b5b60006152d68482850161529d565b91505092915050565b6000819050919050565b6152fa6152f582613b15565b6152df565b82525050565b6000819050919050565b6000819050919050565b61532561532082615300565b61530a565b82525050565b6000615336826139cf565b9050919050565b60008160601b9050919050565b60006153558261533d565b9050919050565b60006153678261534a565b9050919050565b61537f61537a8261532b565b61535c565b82525050565b60006153908261534a565b9050919050565b6153a86153a3826139ef565b615385565b82525050565b60008160f01b9050919050565b60006153c6826153ae565b9050919050565b6153de6153d982613c65565b6153bb565b82525050565b60006153f0828c6152e9565b602082019150615400828b615314565b602082019150615410828a61536e565b60148201915061542082896152e9565b6020820191506154308288615397565b60148201915061544082876152e9565b60208201915061545082866152e9565b60208201915061546082856152e9565b60208201915061547082846153cd565b6002820191508190509a9950505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006154c182613b15565b91506154cc83613b15565b9250826154dc576154db615487565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000615543603283613a65565b915061554e826154e7565b604082019050919050565b6000602082019050818103600083015261557281615536565b9050919050565b600061558482613b15565b915061558f83613b15565b92508261559f5761559e615487565b5b828204905092915050565b600081519050919050565b600082825260208201905092915050565b60006155d1826155aa565b6155db81856155b5565b93506155eb818560208601613a76565b6155f481613aa9565b840191505092915050565b60006080820190506156146000830187613b78565b6156216020830186613b78565b61562e6040830185613c3b565b818103606083015261564081846155c6565b905095945050505050565b60008151905061565a81613940565b92915050565b6000602082840312156156765761567561390a565b5b60006156848482850161564b565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006156c3602083613a65565b91506156ce8261568d565b602082019050919050565b600060208201905081810360008301526156f2816156b6565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061572f601c83613a65565b915061573a826156f9565b602082019050919050565b6000602082019050818103600083015261575e81615722565b905091905056fea26469706673582212200294bc23880bbaf19bb85ae545646e25e5097dd47616657a2568034efc54f63164736f6c634300080d0033

Deployed Bytecode Sourcemap

34491:9338:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22033:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42609:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24537:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24060:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36624:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43245:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42184:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42840:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37528:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34733:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40535:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37022:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34898:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25837:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34579:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42707:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43682:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43451:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36328:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22672:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37935:1964;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34631:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42299:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22402:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20177:94;;;;;;;;;;;;;:::i;:::-;;42478:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43549:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19526:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41899:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23147:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24830:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34666:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34773:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26093:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23322:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34848:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34696:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40414:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25196:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36718:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20426:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34542:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34942:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22033:305;22135:4;22187:25;22172:40;;;:11;:40;;;;:105;;;;22244:33;22229:48;;;:11;:48;;;;22172:105;:158;;;;22294:36;22318:11;22294:23;:36::i;:::-;22172:158;22152:178;;22033:305;;;:::o;42609:90::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42685:5:::1;42671:4;;:20;;;;;;;;;;;;;;;;;;42609:90:::0;:::o;22978:100::-;23032:13;23065:5;23058:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:100;:::o;24537:221::-;24613:7;24641:16;24649:7;24641;:16::i;:::-;24633:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24726:15;:24;24742:7;24726:24;;;;;;;;;;;;;;;;;;;;;24719:31;;24537:221;;;:::o;24060:411::-;24141:13;24157:23;24172:7;24157:14;:23::i;:::-;24141:39;;24205:5;24199:11;;:2;:11;;;24191:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24299:5;24283:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24308:37;24325:5;24332:12;:10;:12::i;:::-;24308:16;:37::i;:::-;24283:62;24261:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24442:21;24451:2;24455:7;24442:8;:21::i;:::-;24130:341;24060:411;;:::o;36624:86::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36696:6:::1;36686:7;;:16;;;;;;;;;;;;;;;;;;36624:86:::0;:::o;43245:90::-;43291:4;43315:12;;43308:19;;43245:90;:::o;42184:107::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42276:7:::1;42260:9;:13;42270:2;42260:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;42184:107:::0;;:::o;42840:397::-;43057:14;;;;;;;;;;;43033:39;;:12;:10;:12::i;:::-;:39;;;43029:161;;43095:41;43114:12;:10;:12::i;:::-;43128:7;43095:18;:41::i;:::-;43087:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;43029:161;43201:28;43211:4;43217:2;43221:7;43201:9;:28::i;:::-;42840:397;;;:::o;37528:399::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37640:10:::1;;37629:7;37614:12;;:22;;;;:::i;:::-;:36;;37606:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:1;37691:16;:23;;;;:27;37683:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;37783:6;37778:142;37799:7;37795:1;:11;37778:142;;;37828:14;37845:20;:18;:20::i;:::-;37828:37;;37880:28;37890:8;37900:7;37880:28;;:9;:28::i;:::-;37813:107;37808:3;;;;;:::i;:::-;;;;37778:142;;;;37528:399:::0;;:::o;34733:33::-;;;;;;;;;;;;;:::o;40535:95::-;40585:4;40609:9;:13;40619:2;40609:13;;;;;;;;;;;;;;;;;;;;;;;;;40602:20;;40535:95;;;:::o;37022:498::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37117:6:::1;37109:5;;:14;;;;;;;;;;;;;;;;;;37141:10;37136:50:::0;37168:7:::1;37136:50;37211:1;37202:5;;;;;;;;;;;:10;;::::0;37198:315:::1;;37229:26;37247:1;37250:4;37229:17;:26::i;:::-;37198:315;;;37286:1;37277:5;;;;;;;;;;;:10;;::::0;37273:240;::::1;;37368:1;37359:5;;;;;;;;;;;:10;;::::0;37355:158;::::1;;37450:1;37441:5;;;;;;;;::::0;;:10;37355:158:::1;37273:240;37198:315;19817:1;37022:498:::0;;:::o;34898:37::-;;;;;;;;;;;;;:::o;25837:185::-;25975:39;25992:4;25998:2;26002:7;25975:39;;;;;;;;;;;;:16;:39::i;:::-;25837:185;;;:::o;34579:43::-;34620:2;34579:43;:::o;42707:125::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42815:9:::1;42794:10;:18;42805:6;42794:18;;;;;;;;;;;;;;;:30;;;;42707:125:::0;;:::o;43682:144::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43742:12:::1;43757:21;43742:36;;43797:2;43789:20;;:29;43810:7;43789:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43731:95;43682:144:::0;:::o;43451:90::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43530:3:::1;43520:7;:13;;;;;;;;;;;;:::i;:::-;;43451:90:::0;:::o;36328:86::-;36375:4;36399:7;;;;;;;;;;;36392:14;;36328:86;:::o;22672:239::-;22744:7;22764:13;22780:7;:16;22788:7;22780:16;;;;;;;;;;;;;;;;;;;;;22764:32;;22832:1;22815:19;;:5;:19;;;22807:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22898:5;22891:12;;;22672:239;;;:::o;37935:1964::-;36467:8;:6;:8::i;:::-;36466:9;36458:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;38037:10:::1;38024:23;;:9;:23;;;38016:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;38105:10;;38094:7;38079:12;;:22;;;;:::i;:::-;:36;;38071:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38166:1;38156:7;:11;:43;;;;;34620:2;38171:7;:28;;38156:43;38148:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;38268:1;38242:16;:23;;;;:27;38234:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38329:19;38376:1;38367:5;;;;;;;;;;;:10;;::::0;38363:404:::1;;38450:9;38428:18;38438:7;38428:9;:18::i;:::-;:31;38420:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38363:404;;;38582:1;38569:9;:14;38561:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38649:18;38659:7;38649:9;:18::i;:::-;38632:35;;38720:14;38690:4;;;;;;;;;;;:14;;;38705:10;38690:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;38682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38363:404;38800:1;38783:14;:18;38779:88;;;38818:4;;;;;;;;;;;:9;;;38828:10;38840:14;38818:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38779:88;38895:7;38879:12;;:23;;;;;;;:::i;:::-;;;;;;;;38913:24;38940:6;:48;;38986:1;38973:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38940:48;;;38962:7;38949:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38940:48;38913:75;;39004:6;38999:791;39020:7;39016:1;:11;38999:791;;;39049:17;39069;:15;:17::i;:::-;39049:37;;39114:1;39105:5;;;;;;;;;;;:10;;;39101:70;;39136:19;:17;:19::i;:::-;39101:70;39187:14;39204:20;:18;:20::i;:::-;39187:37;;39245:17;39254:7;39245:8;:17::i;:::-;39241:75;;;39299:1;39283:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;39241:75;39349:10;39336:23;;:9;:23;;;39332:191;;39380:17;39389:7;39380:8;:17::i;:::-;:60;;39439:1;39420:15;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39380:60;;;39416:1;39400:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;39380:60;;39464:43;39476:10;39488:7;39497:9;39464:43;;;;;;;;:::i;:::-;;;;;;;;39332:191;39556:6;39555:7;:34;;;;39579:10;39566:23;;:9;:23;;;;39555:34;39551:228;;;39610:29;39620:9;39631:7;39610:29;;:9;:29::i;:::-;39551:228;;;39680:43;39698:14;;;;;;;;;;;39715:7;39680:43;;:9;:43::i;:::-;39756:7;39742:8;39751:1;39742:11;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;::::0;::::1;39551:228;39034:756;;39029:3;;;;;:::i;:::-;;;;38999:791;;;;39804:6;39800:92;;;39827:14;;;;;;;;;;;:31;;;39859:10;39871:8;39827:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39800:92;38005:1894;;37935:1964:::0;;:::o;34631:28::-;;;;:::o;42299:171::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42379:6:::1;42374:89;42395:3;;:10;;42391:1;:14;42374:89;;;42447:4;42427:9;:17;42437:3;;42441:1;42437:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42427:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;42407:3;;;;;:::i;:::-;;;;42374:89;;;;42299:171:::0;;:::o;22402:208::-;22474:7;22519:1;22502:19;;:5;:19;;;22494:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22586:9;:16;22596:5;22586:16;;;;;;;;;;;;;;;;22579:23;;22402:208;;;:::o;20177:94::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20242:21:::1;20260:1;20242:9;:21::i;:::-;20177:94::o:0;42478:123::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42585:7:::1;42552:14;;:41;;;;;;;;;;;;;;;;;;42478:123:::0;:::o;43549:125::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43658:8:::1;43637:13;:18;43651:3;43637:18;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;43549:125:::0;;:::o;19526:87::-;19572:7;19599:6;;;;;;;;;;;19592:13;;19526:87;:::o;41899:277::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41974:17:::1;41994:32;42014:5;42021:4;41994:19;:32::i;:::-;41974:52;;;;42059:12;42037;;:35;;;;;;;;;;;;;;;;;;42088:6;42083:86;42104:12;42100:1;:16;42083:86;;;42138:19;:17;:19::i;:::-;42118:3;;;;;:::i;:::-;;;;42083:86;;;;41963:213;41899:277:::0;;:::o;23147:104::-;23203:13;23236:7;23229:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23147:104;:::o;24830:295::-;24945:12;:10;:12::i;:::-;24933:24;;:8;:24;;;24925:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25045:8;25000:18;:32;25019:12;:10;:12::i;:::-;25000:32;;;;;;;;;;;;;;;:42;25033:8;25000:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25098:8;25069:48;;25084:12;:10;:12::i;:::-;25069:48;;;25108:8;25069:48;;;;;;:::i;:::-;;;;;;;;24830:295;;:::o;34666:23::-;;;;;;;;;;;;;:::o;34773:30::-;;;;;;;;;;;;;:::o;26093:328::-;26268:41;26287:12;:10;:12::i;:::-;26301:7;26268:18;:41::i;:::-;26260:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26374:39;26388:4;26394:2;26398:7;26407:5;26374:13;:39::i;:::-;26093:328;;;;:::o;23322:334::-;23395:13;23429:16;23437:7;23429;:16::i;:::-;23421:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23510:21;23534:10;:8;:10::i;:::-;23510:34;;23586:1;23568:7;23562:21;:25;:86;;;;;;;;;;;;;;;;;23614:7;23623:18;:7;:16;:18::i;:::-;23597:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23562:86;23555:93;;;23322:334;;;:::o;34848:41::-;;;;;;;;;;;;;;;;;:::o;34696:30::-;;;;;;;;;;;;;:::o;40414:113::-;40468:4;40502:10;:17;40513:5;;;;;;;;;;;40502:17;;;;;;;;;;;;;;;;40492:7;:27;;;;:::i;:::-;40485:34;;40414:113;;;:::o;25196:164::-;25293:4;25317:18;:25;25336:5;25317:25;;;;;;;;;;;;;;;:35;25343:8;25317:35;;;;;;;;;;;;;;;;;;;;;;;;;25310:42;;25196:164;;;;:::o;36718:119::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36800:29:::1;36818:5;36825:3;36800:17;:29::i;:::-;36718:119:::0;;:::o;20426:192::-;19757:12;:10;:12::i;:::-;19746:23;;:7;:5;:7::i;:::-;:23;;;19738:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20535:1:::1;20515:22;;:8;:22;;::::0;20507:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20591:19;20601:8;20591:9;:19::i;:::-;20426:192:::0;:::o;34542:30::-;;;;:::o;34942:18::-;;;;;;;;;;;;;:::o;5094:387::-;5154:4;5362:12;5429:7;5417:20;5409:28;;5472:1;5465:4;:8;5458:15;;;5094:387;;;:::o;1510:157::-;1595:4;1634:25;1619:40;;;:11;:40;;;;1612:47;;1510:157;;;:::o;4199:98::-;4252:7;4279:10;4272:17;;4199:98;:::o;27931:127::-;27996:4;28048:1;28020:30;;:7;:16;28028:7;28020:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28013:37;;27931:127;;;:::o;31913:174::-;32015:2;31988:15;:24;32004:7;31988:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32071:7;32067:2;32033:46;;32042:23;32057:7;32042:14;:23::i;:::-;32033:46;;;;;;;;;;;;31913:174;;:::o;28225:348::-;28318:4;28343:16;28351:7;28343;:16::i;:::-;28335:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:13;28435:23;28450:7;28435:14;:23::i;:::-;28419:39;;28488:5;28477:16;;:7;:16;;;:51;;;;28521:7;28497:31;;:20;28509:7;28497:11;:20::i;:::-;:31;;;28477:51;:87;;;;28532:32;28549:5;28556:7;28532:16;:32::i;:::-;28477:87;28469:96;;;28225:348;;;;:::o;31217:578::-;31376:4;31349:31;;:23;31364:7;31349:14;:23::i;:::-;:31;;;31341:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31459:1;31445:16;;:2;:16;;;31437:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31515:39;31536:4;31542:2;31546:7;31515:20;:39::i;:::-;31619:29;31636:1;31640:7;31619:8;:29::i;:::-;31680:1;31661:9;:15;31671:4;31661:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31709:1;31692:9;:13;31702:2;31692:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31740:2;31721:7;:16;31729:7;31721:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31779:7;31775:2;31760:27;;31769:4;31760:27;;;;;;;;;;;;31217:578;;;:::o;40638:354::-;40685:6;40704:11;40718:69;40738:16;:23;;;;40763:16;:23;;;;40718:19;:69::i;:::-;40704:83;;;;40798:14;40815:16;40832:6;40815:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40798:41;;40879:16;40922:1;40896:16;:23;;;;:27;;;;:::i;:::-;40879:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40852:16;40869:6;40852:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:72;;;;;;;;;;;;;;;;;;40935:16;:22;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40977:7;40970:14;;;;40638:354;:::o;28915:110::-;28991:26;29001:2;29005:7;28991:26;;;;;;;;;;;;:9;:26::i;:::-;28915:110;;:::o;36845:169::-;36923:8;36934:5;36923:16;;36918:89;36946:3;36941:8;;:1;:8;;;36918:89;;36971:16;36993:1;36971:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36951:3;;;;;:::i;:::-;;;;36918:89;;;;36845:169;;:::o;39907:499::-;39952:7;39985:1;39976:5;;;;;;;;;;;:10;;;39972:111;;40010:10;40003:17;;;;39972:111;40177:2;40135:38;40155:12;;;;;;;;;;;40135:38;;40169:3;40135:19;:38::i;:::-;:44;;;40131:101;;40203:10;40196:17;;;;40131:101;40244:13;40260:14;;;;;;;;;;;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40244:50;;40326:3;40309:21;;:5;:21;;;40305:71;;40354:10;40347:17;;;;;40305:71;40393:5;40386:12;;;39907:499;;:::o;41004:151::-;41069:1;41053:12;;:17;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;41097:1;41081:12;;:17;;;;;;;:::i;:::-;;;;;;;;41128:1;41113:12;;;;;;;;;;;:16;;;41109:38;;;41146:1;41131:12;;:16;;;;;;;;;;;;;;;;;;41109:38;41004:151::o;20626:173::-;20682:16;20701:6;;;;;;;;;;;20682:25;;20727:8;20718:6;;:17;;;;;;;;;;;;;;;;;;20782:8;20751:40;;20772:8;20751:40;;;;;;;;;;;;20671:128;20626:173;:::o;41163:728::-;41240:6;41259:10;41272:1;41259:14;;41289:8;41284:102;41307:1;41303;:5;;;41284:102;;;41339:13;:27;41353:12;;;;;;;;;;;41339:27;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;41330:44;;;;;:::i;:::-;;;41310:3;;;;;:::i;:::-;;;;41284:102;;;;41398:11;41498:5;41551:1;41536:12;:16;;;;:::i;:::-;41526:27;41576:14;41613:16;41652:10;41685:12;;41720:5;41748:12;;41783;;;;;;;;;;;41459:355;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41431:398;;;;;;41412:428;;41398:442;;41876:6;41867;:15;;;;:::i;:::-;41853:30;;;;41163:728;;;;:::o;27303:315::-;27460:28;27470:4;27476:2;27480:7;27460:9;:28::i;:::-;27507:48;27530:4;27536:2;27540:7;27549:5;27507:22;:48::i;:::-;27499:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27303:315;;;;:::o;43343:100::-;43395:13;43428:7;43421:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43343:100;:::o;1900:723::-;1956:13;2186:1;2177:5;:10;2173:53;;2204:10;;;;;;;;;;;;;;;;;;;;;2173:53;2236:12;2251:5;2236:20;;2267:14;2292:78;2307:1;2299:4;:9;2292:78;;2325:8;;;;;:::i;:::-;;;;2356:2;2348:10;;;;;:::i;:::-;;;2292:78;;;2380:19;2412:6;2402:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2380:39;;2430:154;2446:1;2437:5;:10;2430:154;;2474:1;2464:11;;;;;:::i;:::-;;;2541:2;2533:5;:10;;;;:::i;:::-;2520:2;:24;;;;:::i;:::-;2507:39;;2490:6;2497;2490:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2570:2;2561:11;;;;;:::i;:::-;;;2430:154;;;2608:6;2594:21;;;;;1900:723;;;;:::o;34023:126::-;;;;:::o;29252:321::-;29382:18;29388:2;29392:7;29382:5;:18::i;:::-;29433:54;29464:1;29468:2;29472:7;29481:5;29433:22;:54::i;:::-;29411:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29252:321;;;:::o;32652:799::-;32807:4;32828:15;:2;:13;;;:15::i;:::-;32824:620;;;32880:2;32864:36;;;32901:12;:10;:12::i;:::-;32915:4;32921:7;32930:5;32864:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32860:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33123:1;33106:6;:13;:18;33102:272;;33149:60;;;;;;;;;;:::i;:::-;;;;;;;;33102:272;33324:6;33318:13;33309:6;33305:2;33301:15;33294:38;32860:529;32997:41;;;32987:51;;;:6;:51;;;;32980:58;;;;;32824:620;33428:4;33421:11;;32652:799;;;;;;;:::o;29909:382::-;30003:1;29989:16;;:2;:16;;;29981:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30062:16;30070:7;30062;:16::i;:::-;30061:17;30053:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30124:45;30153:1;30157:2;30161:7;30124:20;:45::i;:::-;30199:1;30182:9;:13;30192:2;30182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30230:2;30211:7;:16;30219:7;30211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30275:7;30271:2;30250:33;;30267:1;30250:33;;;;;;;;;;;;29909:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:126::-;1555:7;1595:42;1588:5;1584:54;1573:65;;1518:126;;;:::o;1650:96::-;1687:7;1716:24;1734:5;1716:24;:::i;:::-;1705:35;;1650:96;;;:::o;1752:122::-;1825:24;1843:5;1825:24;:::i;:::-;1818:5;1815:35;1805:63;;1864:1;1861;1854:12;1805:63;1752:122;:::o;1880:139::-;1926:5;1964:6;1951:20;1942:29;;1980:33;2007:5;1980:33;:::i;:::-;1880:139;;;;:::o;2025:329::-;2084:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:119;;;2139:79;;:::i;:::-;2101:119;2259:1;2284:53;2329:7;2320:6;2309:9;2305:22;2284:53;:::i;:::-;2274:63;;2230:117;2025:329;;;;:::o;2360:99::-;2412:6;2446:5;2440:12;2430:22;;2360:99;;;:::o;2465:169::-;2549:11;2583:6;2578:3;2571:19;2623:4;2618:3;2614:14;2599:29;;2465:169;;;;:::o;2640:307::-;2708:1;2718:113;2732:6;2729:1;2726:13;2718:113;;;2817:1;2812:3;2808:11;2802:18;2798:1;2793:3;2789:11;2782:39;2754:2;2751:1;2747:10;2742:15;;2718:113;;;2849:6;2846:1;2843:13;2840:101;;;2929:1;2920:6;2915:3;2911:16;2904:27;2840:101;2689:258;2640:307;;;:::o;2953:102::-;2994:6;3045:2;3041:7;3036:2;3029:5;3025:14;3021:28;3011:38;;2953:102;;;:::o;3061:364::-;3149:3;3177:39;3210:5;3177:39;:::i;:::-;3232:71;3296:6;3291:3;3232:71;:::i;:::-;3225:78;;3312:52;3357:6;3352:3;3345:4;3338:5;3334:16;3312:52;:::i;:::-;3389:29;3411:6;3389:29;:::i;:::-;3384:3;3380:39;3373:46;;3153:272;3061:364;;;;:::o;3431:313::-;3544:4;3582:2;3571:9;3567:18;3559:26;;3631:9;3625:4;3621:20;3617:1;3606:9;3602:17;3595:47;3659:78;3732:4;3723:6;3659:78;:::i;:::-;3651:86;;3431:313;;;;:::o;3750:77::-;3787:7;3816:5;3805:16;;3750:77;;;:::o;3833:122::-;3906:24;3924:5;3906:24;:::i;:::-;3899:5;3896:35;3886:63;;3945:1;3942;3935:12;3886:63;3833:122;:::o;3961:139::-;4007:5;4045:6;4032:20;4023:29;;4061:33;4088:5;4061:33;:::i;:::-;3961:139;;;;:::o;4106:329::-;4165:6;4214:2;4202:9;4193:7;4189:23;4185:32;4182:119;;;4220:79;;:::i;:::-;4182:119;4340:1;4365:53;4410:7;4401:6;4390:9;4386:22;4365:53;:::i;:::-;4355:63;;4311:117;4106:329;;;;:::o;4441:118::-;4528:24;4546:5;4528:24;:::i;:::-;4523:3;4516:37;4441:118;;:::o;4565:222::-;4658:4;4696:2;4685:9;4681:18;4673:26;;4709:71;4777:1;4766:9;4762:17;4753:6;4709:71;:::i;:::-;4565:222;;;;:::o;4793:474::-;4861:6;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;4793:474;;;;;:::o;5273:116::-;5343:21;5358:5;5343:21;:::i;:::-;5336:5;5333:32;5323:60;;5379:1;5376;5369:12;5323:60;5273:116;:::o;5395:133::-;5438:5;5476:6;5463:20;5454:29;;5492:30;5516:5;5492:30;:::i;:::-;5395:133;;;;:::o;5534:323::-;5590:6;5639:2;5627:9;5618:7;5614:23;5610:32;5607:119;;;5645:79;;:::i;:::-;5607:119;5765:1;5790:50;5832:7;5823:6;5812:9;5808:22;5790:50;:::i;:::-;5780:60;;5736:114;5534:323;;;;:::o;5863:118::-;5950:24;5968:5;5950:24;:::i;:::-;5945:3;5938:37;5863:118;;:::o;5987:222::-;6080:4;6118:2;6107:9;6103:18;6095:26;;6131:71;6199:1;6188:9;6184:17;6175:6;6131:71;:::i;:::-;5987:222;;;;:::o;6215:89::-;6251:7;6291:6;6284:5;6280:18;6269:29;;6215:89;;;:::o;6310:120::-;6382:23;6399:5;6382:23;:::i;:::-;6375:5;6372:34;6362:62;;6420:1;6417;6410:12;6362:62;6310:120;:::o;6436:137::-;6481:5;6519:6;6506:20;6497:29;;6535:32;6561:5;6535:32;:::i;:::-;6436:137;;;;:::o;6579:466::-;6643:6;6651;6700:2;6688:9;6679:7;6675:23;6671:32;6668:119;;;6706:79;;:::i;:::-;6668:119;6826:1;6851:52;6895:7;6886:6;6875:9;6871:22;6851:52;:::i;:::-;6841:62;;6797:116;6952:2;6978:50;7020:7;7011:6;7000:9;6996:22;6978:50;:::i;:::-;6968:60;;6923:115;6579:466;;;;;:::o;7051:619::-;7128:6;7136;7144;7193:2;7181:9;7172:7;7168:23;7164:32;7161:119;;;7199:79;;:::i;:::-;7161:119;7319:1;7344:53;7389:7;7380:6;7369:9;7365:22;7344:53;:::i;:::-;7334:63;;7290:117;7446:2;7472:53;7517:7;7508:6;7497:9;7493:22;7472:53;:::i;:::-;7462:63;;7417:118;7574:2;7600:53;7645:7;7636:6;7625:9;7621:22;7600:53;:::i;:::-;7590:63;;7545:118;7051:619;;;;;:::o;7676:474::-;7744:6;7752;7801:2;7789:9;7780:7;7776:23;7772:32;7769:119;;;7807:79;;:::i;:::-;7769:119;7927:1;7952:53;7997:7;7988:6;7977:9;7973:22;7952:53;:::i;:::-;7942:63;;7898:117;8054:2;8080:53;8125:7;8116:6;8105:9;8101:22;8080:53;:::i;:::-;8070:63;;8025:118;7676:474;;;;;:::o;8156:115::-;8241:23;8258:5;8241:23;:::i;:::-;8236:3;8229:36;8156:115;;:::o;8277:218::-;8368:4;8406:2;8395:9;8391:18;8383:26;;8419:69;8485:1;8474:9;8470:17;8461:6;8419:69;:::i;:::-;8277:218;;;;:::o;8501:327::-;8559:6;8608:2;8596:9;8587:7;8583:23;8579:32;8576:119;;;8614:79;;:::i;:::-;8576:119;8734:1;8759:52;8803:7;8794:6;8783:9;8779:22;8759:52;:::i;:::-;8749:62;;8705:116;8501:327;;;;:::o;8834:60::-;8862:3;8883:5;8876:12;;8834:60;;;:::o;8900:142::-;8950:9;8983:53;9001:34;9010:24;9028:5;9010:24;:::i;:::-;9001:34;:::i;:::-;8983:53;:::i;:::-;8970:66;;8900:142;;;:::o;9048:126::-;9098:9;9131:37;9162:5;9131:37;:::i;:::-;9118:50;;9048:126;;;:::o;9180:150::-;9254:9;9287:37;9318:5;9287:37;:::i;:::-;9274:50;;9180:150;;;:::o;9336:179::-;9447:61;9502:5;9447:61;:::i;:::-;9442:3;9435:74;9336:179;;:::o;9521:270::-;9638:4;9676:2;9665:9;9661:18;9653:26;;9689:95;9781:1;9770:9;9766:17;9757:6;9689:95;:::i;:::-;9521:270;;;;:::o;9797:472::-;9864:6;9872;9921:2;9909:9;9900:7;9896:23;9892:32;9889:119;;;9927:79;;:::i;:::-;9889:119;10047:1;10072:52;10116:7;10107:6;10096:9;10092:22;10072:52;:::i;:::-;10062:62;;10018:116;10173:2;10199:53;10244:7;10235:6;10224:9;10220:22;10199:53;:::i;:::-;10189:63;;10144:118;9797:472;;;;;:::o;10275:117::-;10384:1;10381;10374:12;10398:117;10507:1;10504;10497:12;10521:180;10569:77;10566:1;10559:88;10666:4;10663:1;10656:15;10690:4;10687:1;10680:15;10707:281;10790:27;10812:4;10790:27;:::i;:::-;10782:6;10778:40;10920:6;10908:10;10905:22;10884:18;10872:10;10869:34;10866:62;10863:88;;;10931:18;;:::i;:::-;10863:88;10971:10;10967:2;10960:22;10750:238;10707:281;;:::o;10994:129::-;11028:6;11055:20;;:::i;:::-;11045:30;;11084:33;11112:4;11104:6;11084:33;:::i;:::-;10994:129;;;:::o;11129:308::-;11191:4;11281:18;11273:6;11270:30;11267:56;;;11303:18;;:::i;:::-;11267:56;11341:29;11363:6;11341:29;:::i;:::-;11333:37;;11425:4;11419;11415:15;11407:23;;11129:308;;;:::o;11443:154::-;11527:6;11522:3;11517;11504:30;11589:1;11580:6;11575:3;11571:16;11564:27;11443:154;;;:::o;11603:412::-;11681:5;11706:66;11722:49;11764:6;11722:49;:::i;:::-;11706:66;:::i;:::-;11697:75;;11795:6;11788:5;11781:21;11833:4;11826:5;11822:16;11871:3;11862:6;11857:3;11853:16;11850:25;11847:112;;;11878:79;;:::i;:::-;11847:112;11968:41;12002:6;11997:3;11992;11968:41;:::i;:::-;11687:328;11603:412;;;;;:::o;12035:340::-;12091:5;12140:3;12133:4;12125:6;12121:17;12117:27;12107:122;;12148:79;;:::i;:::-;12107:122;12265:6;12252:20;12290:79;12365:3;12357:6;12350:4;12342:6;12338:17;12290:79;:::i;:::-;12281:88;;12097:278;12035:340;;;;:::o;12381:509::-;12450:6;12499:2;12487:9;12478:7;12474:23;12470:32;12467:119;;;12505:79;;:::i;:::-;12467:119;12653:1;12642:9;12638:17;12625:31;12683:18;12675:6;12672:30;12669:117;;;12705:79;;:::i;:::-;12669:117;12810:63;12865:7;12856:6;12845:9;12841:22;12810:63;:::i;:::-;12800:73;;12596:287;12381:509;;;;:::o;12896:468::-;12961:6;12969;13018:2;13006:9;12997:7;12993:23;12989:32;12986:119;;;13024:79;;:::i;:::-;12986:119;13144:1;13169:53;13214:7;13205:6;13194:9;13190:22;13169:53;:::i;:::-;13159:63;;13115:117;13271:2;13297:50;13339:7;13330:6;13319:9;13315:22;13297:50;:::i;:::-;13287:60;;13242:115;12896:468;;;;;:::o;13370:117::-;13479:1;13476;13469:12;13493:117;13602:1;13599;13592:12;13632:567;13704:8;13714:6;13764:3;13757:4;13749:6;13745:17;13741:27;13731:122;;13772:79;;:::i;:::-;13731:122;13885:6;13872:20;13862:30;;13915:18;13907:6;13904:30;13901:117;;;13937:79;;:::i;:::-;13901:117;14051:4;14043:6;14039:17;14027:29;;14105:3;14097:4;14089:6;14085:17;14075:8;14071:32;14068:41;14065:128;;;14112:79;;:::i;:::-;14065:128;13632:567;;;;;:::o;14205:557::-;14290:6;14298;14347:2;14335:9;14326:7;14322:23;14318:32;14315:119;;;14353:79;;:::i;:::-;14315:119;14501:1;14490:9;14486:17;14473:31;14531:18;14523:6;14520:30;14517:117;;;14553:79;;:::i;:::-;14517:117;14666:79;14737:7;14728:6;14717:9;14713:22;14666:79;:::i;:::-;14648:97;;;;14444:311;14205:557;;;;;:::o;14768:472::-;14835:6;14843;14892:2;14880:9;14871:7;14867:23;14863:32;14860:119;;;14898:79;;:::i;:::-;14860:119;15018:1;15043:52;15087:7;15078:6;15067:9;15063:22;15043:52;:::i;:::-;15033:62;;14989:116;15144:2;15170:53;15215:7;15206:6;15195:9;15191:22;15170:53;:::i;:::-;15160:63;;15115:118;14768:472;;;;;:::o;15246:474::-;15314:6;15322;15371:2;15359:9;15350:7;15346:23;15342:32;15339:119;;;15377:79;;:::i;:::-;15339:119;15497:1;15522:53;15567:7;15558:6;15547:9;15543:22;15522:53;:::i;:::-;15512:63;;15468:117;15624:2;15650:53;15695:7;15686:6;15675:9;15671:22;15650:53;:::i;:::-;15640:63;;15595:118;15246:474;;;;;:::o;15726:468::-;15791:6;15799;15848:2;15836:9;15827:7;15823:23;15819:32;15816:119;;;15854:79;;:::i;:::-;15816:119;15974:1;15999:53;16044:7;16035:6;16024:9;16020:22;15999:53;:::i;:::-;15989:63;;15945:117;16101:2;16127:50;16169:7;16160:6;16149:9;16145:22;16127:50;:::i;:::-;16117:60;;16072:115;15726:468;;;;;:::o;16200:307::-;16261:4;16351:18;16343:6;16340:30;16337:56;;;16373:18;;:::i;:::-;16337:56;16411:29;16433:6;16411:29;:::i;:::-;16403:37;;16495:4;16489;16485:15;16477:23;;16200:307;;;:::o;16513:410::-;16590:5;16615:65;16631:48;16672:6;16631:48;:::i;:::-;16615:65;:::i;:::-;16606:74;;16703:6;16696:5;16689:21;16741:4;16734:5;16730:16;16779:3;16770:6;16765:3;16761:16;16758:25;16755:112;;;16786:79;;:::i;:::-;16755:112;16876:41;16910:6;16905:3;16900;16876:41;:::i;:::-;16596:327;16513:410;;;;;:::o;16942:338::-;16997:5;17046:3;17039:4;17031:6;17027:17;17023:27;17013:122;;17054:79;;:::i;:::-;17013:122;17171:6;17158:20;17196:78;17270:3;17262:6;17255:4;17247:6;17243:17;17196:78;:::i;:::-;17187:87;;17003:277;16942:338;;;;:::o;17286:943::-;17381:6;17389;17397;17405;17454:3;17442:9;17433:7;17429:23;17425:33;17422:120;;;17461:79;;:::i;:::-;17422:120;17581:1;17606:53;17651:7;17642:6;17631:9;17627:22;17606:53;:::i;:::-;17596:63;;17552:117;17708:2;17734:53;17779:7;17770:6;17759:9;17755:22;17734:53;:::i;:::-;17724:63;;17679:118;17836:2;17862:53;17907:7;17898:6;17887:9;17883:22;17862:53;:::i;:::-;17852:63;;17807:118;17992:2;17981:9;17977:18;17964:32;18023:18;18015:6;18012:30;18009:117;;;18045:79;;:::i;:::-;18009:117;18150:62;18204:7;18195:6;18184:9;18180:22;18150:62;:::i;:::-;18140:72;;17935:287;17286:943;;;;;;;:::o;18235:474::-;18303:6;18311;18360:2;18348:9;18339:7;18335:23;18331:32;18328:119;;;18366:79;;:::i;:::-;18328:119;18486:1;18511:53;18556:7;18547:6;18536:9;18532:22;18511:53;:::i;:::-;18501:63;;18457:117;18613:2;18639:53;18684:7;18675:6;18664:9;18660:22;18639:53;:::i;:::-;18629:63;;18584:118;18235:474;;;;;:::o;18715:470::-;18781:6;18789;18838:2;18826:9;18817:7;18813:23;18809:32;18806:119;;;18844:79;;:::i;:::-;18806:119;18964:1;18989:52;19033:7;19024:6;19013:9;19009:22;18989:52;:::i;:::-;18979:62;;18935:116;19090:2;19116:52;19160:7;19151:6;19140:9;19136:22;19116:52;:::i;:::-;19106:62;;19061:117;18715:470;;;;;:::o;19191:141::-;19256:9;19289:37;19320:5;19289:37;:::i;:::-;19276:50;;19191:141;;;:::o;19338:161::-;19440:52;19486:5;19440:52;:::i;:::-;19435:3;19428:65;19338:161;;:::o;19505:252::-;19613:4;19651:2;19640:9;19636:18;19628:26;;19664:86;19747:1;19736:9;19732:17;19723:6;19664:86;:::i;:::-;19505:252;;;;:::o;19763:182::-;19903:34;19899:1;19891:6;19887:14;19880:58;19763:182;:::o;19951:366::-;20093:3;20114:67;20178:2;20173:3;20114:67;:::i;:::-;20107:74;;20190:93;20279:3;20190:93;:::i;:::-;20308:2;20303:3;20299:12;20292:19;;19951:366;;;:::o;20323:419::-;20489:4;20527:2;20516:9;20512:18;20504:26;;20576:9;20570:4;20566:20;20562:1;20551:9;20547:17;20540:47;20604:131;20730:4;20604:131;:::i;:::-;20596:139;;20323:419;;;:::o;20748:180::-;20796:77;20793:1;20786:88;20893:4;20890:1;20883:15;20917:4;20914:1;20907:15;20934:320;20978:6;21015:1;21009:4;21005:12;20995:22;;21062:1;21056:4;21052:12;21083:18;21073:81;;21139:4;21131:6;21127:17;21117:27;;21073:81;21201:2;21193:6;21190:14;21170:18;21167:38;21164:84;;21220:18;;:::i;:::-;21164:84;20985:269;20934:320;;;:::o;21260:231::-;21400:34;21396:1;21388:6;21384:14;21377:58;21469:14;21464:2;21456:6;21452:15;21445:39;21260:231;:::o;21497:366::-;21639:3;21660:67;21724:2;21719:3;21660:67;:::i;:::-;21653:74;;21736:93;21825:3;21736:93;:::i;:::-;21854:2;21849:3;21845:12;21838:19;;21497:366;;;:::o;21869:419::-;22035:4;22073:2;22062:9;22058:18;22050:26;;22122:9;22116:4;22112:20;22108:1;22097:9;22093:17;22086:47;22150:131;22276:4;22150:131;:::i;:::-;22142:139;;21869:419;;;:::o;22294:220::-;22434:34;22430:1;22422:6;22418:14;22411:58;22503:3;22498:2;22490:6;22486:15;22479:28;22294:220;:::o;22520:366::-;22662:3;22683:67;22747:2;22742:3;22683:67;:::i;:::-;22676:74;;22759:93;22848:3;22759:93;:::i;:::-;22877:2;22872:3;22868:12;22861:19;;22520:366;;;:::o;22892:419::-;23058:4;23096:2;23085:9;23081:18;23073:26;;23145:9;23139:4;23135:20;23131:1;23120:9;23116:17;23109:47;23173:131;23299:4;23173:131;:::i;:::-;23165:139;;22892:419;;;:::o;23317:243::-;23457:34;23453:1;23445:6;23441:14;23434:58;23526:26;23521:2;23513:6;23509:15;23502:51;23317:243;:::o;23566:366::-;23708:3;23729:67;23793:2;23788:3;23729:67;:::i;:::-;23722:74;;23805:93;23894:3;23805:93;:::i;:::-;23923:2;23918:3;23914:12;23907:19;;23566:366;;;:::o;23938:419::-;24104:4;24142:2;24131:9;24127:18;24119:26;;24191:9;24185:4;24181:20;24177:1;24166:9;24162:17;24155:47;24219:131;24345:4;24219:131;:::i;:::-;24211:139;;23938:419;;;:::o;24363:236::-;24503:34;24499:1;24491:6;24487:14;24480:58;24572:19;24567:2;24559:6;24555:15;24548:44;24363:236;:::o;24605:366::-;24747:3;24768:67;24832:2;24827:3;24768:67;:::i;:::-;24761:74;;24844:93;24933:3;24844:93;:::i;:::-;24962:2;24957:3;24953:12;24946:19;;24605:366;;;:::o;24977:419::-;25143:4;25181:2;25170:9;25166:18;25158:26;;25230:9;25224:4;25220:20;25216:1;25205:9;25201:17;25194:47;25258:131;25384:4;25258:131;:::i;:::-;25250:139;;24977:419;;;:::o;25402:180::-;25450:77;25447:1;25440:88;25547:4;25544:1;25537:15;25571:4;25568:1;25561:15;25588:305;25628:3;25647:20;25665:1;25647:20;:::i;:::-;25642:25;;25681:20;25699:1;25681:20;:::i;:::-;25676:25;;25835:1;25767:66;25763:74;25760:1;25757:81;25754:107;;;25841:18;;:::i;:::-;25754:107;25885:1;25882;25878:9;25871:16;;25588:305;;;;:::o;25899:167::-;26039:19;26035:1;26027:6;26023:14;26016:43;25899:167;:::o;26072:366::-;26214:3;26235:67;26299:2;26294:3;26235:67;:::i;:::-;26228:74;;26311:93;26400:3;26311:93;:::i;:::-;26429:2;26424:3;26420:12;26413:19;;26072:366;;;:::o;26444:419::-;26610:4;26648:2;26637:9;26633:18;26625:26;;26697:9;26691:4;26687:20;26683:1;26672:9;26668:17;26661:47;26725:131;26851:4;26725:131;:::i;:::-;26717:139;;26444:419;;;:::o;26869:229::-;27009:34;27005:1;26997:6;26993:14;26986:58;27078:12;27073:2;27065:6;27061:15;27054:37;26869:229;:::o;27104:366::-;27246:3;27267:67;27331:2;27326:3;27267:67;:::i;:::-;27260:74;;27343:93;27432:3;27343:93;:::i;:::-;27461:2;27456:3;27452:12;27445:19;;27104:366;;;:::o;27476:419::-;27642:4;27680:2;27669:9;27665:18;27657:26;;27729:9;27723:4;27719:20;27715:1;27704:9;27700:17;27693:47;27757:131;27883:4;27757:131;:::i;:::-;27749:139;;27476:419;;;:::o;27901:233::-;27940:3;27963:24;27981:5;27963:24;:::i;:::-;27954:33;;28009:66;28002:5;27999:77;27996:103;;28079:18;;:::i;:::-;27996:103;28126:1;28119:5;28115:13;28108:20;;27901:233;;;:::o;28140:228::-;28280:34;28276:1;28268:6;28264:14;28257:58;28349:11;28344:2;28336:6;28332:15;28325:36;28140:228;:::o;28374:366::-;28516:3;28537:67;28601:2;28596:3;28537:67;:::i;:::-;28530:74;;28613:93;28702:3;28613:93;:::i;:::-;28731:2;28726:3;28722:12;28715:19;;28374:366;;;:::o;28746:419::-;28912:4;28950:2;28939:9;28935:18;28927:26;;28999:9;28993:4;28989:20;28985:1;28974:9;28970:17;28963:47;29027:131;29153:4;29027:131;:::i;:::-;29019:139;;28746:419;;;:::o;29171:166::-;29311:18;29307:1;29299:6;29295:14;29288:42;29171:166;:::o;29343:366::-;29485:3;29506:67;29570:2;29565:3;29506:67;:::i;:::-;29499:74;;29582:93;29671:3;29582:93;:::i;:::-;29700:2;29695:3;29691:12;29684:19;;29343:366;;;:::o;29715:419::-;29881:4;29919:2;29908:9;29904:18;29896:26;;29968:9;29962:4;29958:20;29954:1;29943:9;29939:17;29932:47;29996:131;30122:4;29996:131;:::i;:::-;29988:139;;29715:419;;;:::o;30140:158::-;30280:10;30276:1;30268:6;30264:14;30257:34;30140:158;:::o;30304:365::-;30446:3;30467:66;30531:1;30526:3;30467:66;:::i;:::-;30460:73;;30542:93;30631:3;30542:93;:::i;:::-;30660:2;30655:3;30651:12;30644:19;;30304:365;;;:::o;30675:419::-;30841:4;30879:2;30868:9;30864:18;30856:26;;30928:9;30922:4;30918:20;30914:1;30903:9;30899:17;30892:47;30956:131;31082:4;30956:131;:::i;:::-;30948:139;;30675:419;;;:::o;31100:169::-;31240:21;31236:1;31228:6;31224:14;31217:45;31100:169;:::o;31275:366::-;31417:3;31438:67;31502:2;31497:3;31438:67;:::i;:::-;31431:74;;31514:93;31603:3;31514:93;:::i;:::-;31632:2;31627:3;31623:12;31616:19;;31275:366;;;:::o;31647:419::-;31813:4;31851:2;31840:9;31836:18;31828:26;;31900:9;31894:4;31890:20;31886:1;31875:9;31871:17;31864:47;31928:131;32054:4;31928:131;:::i;:::-;31920:139;;31647:419;;;:::o;32072:172::-;32212:24;32208:1;32200:6;32196:14;32189:48;32072:172;:::o;32250:366::-;32392:3;32413:67;32477:2;32472:3;32413:67;:::i;:::-;32406:74;;32489:93;32578:3;32489:93;:::i;:::-;32607:2;32602:3;32598:12;32591:19;;32250:366;;;:::o;32622:419::-;32788:4;32826:2;32815:9;32811:18;32803:26;;32875:9;32869:4;32865:20;32861:1;32850:9;32846:17;32839:47;32903:131;33029:4;32903:131;:::i;:::-;32895:139;;32622:419;;;:::o;33047:179::-;33187:31;33183:1;33175:6;33171:14;33164:55;33047:179;:::o;33232:366::-;33374:3;33395:67;33459:2;33454:3;33395:67;:::i;:::-;33388:74;;33471:93;33560:3;33471:93;:::i;:::-;33589:2;33584:3;33580:12;33573:19;;33232:366;;;:::o;33604:419::-;33770:4;33808:2;33797:9;33793:18;33785:26;;33857:9;33851:4;33847:20;33843:1;33832:9;33828:17;33821:47;33885:131;34011:4;33885:131;:::i;:::-;33877:139;;33604:419;;;:::o;34029:143::-;34086:5;34117:6;34111:13;34102:22;;34133:33;34160:5;34133:33;:::i;:::-;34029:143;;;;:::o;34178:351::-;34248:6;34297:2;34285:9;34276:7;34272:23;34268:32;34265:119;;;34303:79;;:::i;:::-;34265:119;34423:1;34448:64;34504:7;34495:6;34484:9;34480:22;34448:64;:::i;:::-;34438:74;;34394:128;34178:351;;;;:::o;34535:166::-;34675:18;34671:1;34663:6;34659:14;34652:42;34535:166;:::o;34707:366::-;34849:3;34870:67;34934:2;34929:3;34870:67;:::i;:::-;34863:74;;34946:93;35035:3;34946:93;:::i;:::-;35064:2;35059:3;35055:12;35048:19;;34707:366;;;:::o;35079:419::-;35245:4;35283:2;35272:9;35268:18;35260:26;;35332:9;35326:4;35322:20;35318:1;35307:9;35303:17;35296:47;35360:131;35486:4;35360:131;:::i;:::-;35352:139;;35079:419;;;:::o;35504:332::-;35625:4;35663:2;35652:9;35648:18;35640:26;;35676:71;35744:1;35733:9;35729:17;35720:6;35676:71;:::i;:::-;35757:72;35825:2;35814:9;35810:18;35801:6;35757:72;:::i;:::-;35504:332;;;;;:::o;35842:242::-;35881:3;35900:19;35917:1;35900:19;:::i;:::-;35895:24;;35933:19;35950:1;35933:19;:::i;:::-;35928:24;;36026:1;36018:6;36014:14;36011:1;36008:21;36005:47;;;36032:18;;:::i;:::-;36005:47;36076:1;36073;36069:9;36062:16;;35842:242;;;;:::o;36090:438::-;36237:4;36275:2;36264:9;36260:18;36252:26;;36288:71;36356:1;36345:9;36341:17;36332:6;36288:71;:::i;:::-;36369:70;36435:2;36424:9;36420:18;36411:6;36369:70;:::i;:::-;36449:72;36517:2;36506:9;36502:18;36493:6;36449:72;:::i;:::-;36090:438;;;;;;:::o;36534:180::-;36582:77;36579:1;36572:88;36679:4;36676:1;36669:15;36703:4;36700:1;36693:15;36720:113;36786:6;36820:5;36814:12;36804:22;;36720:113;;;:::o;36839:183::-;36937:11;36971:6;36966:3;36959:19;37011:4;37006:3;37002:14;36987:29;;36839:183;;;;:::o;37028:131::-;37094:4;37117:3;37109:11;;37147:4;37142:3;37138:14;37130:22;;37028:131;;;:::o;37165:105::-;37240:23;37257:5;37240:23;:::i;:::-;37235:3;37228:36;37165:105;;:::o;37276:175::-;37343:10;37364:44;37404:3;37396:6;37364:44;:::i;:::-;37440:4;37435:3;37431:14;37417:28;;37276:175;;;;:::o;37457:112::-;37526:4;37558;37553:3;37549:14;37541:22;;37457:112;;;:::o;37603:724::-;37720:3;37749:53;37796:5;37749:53;:::i;:::-;37818:85;37896:6;37891:3;37818:85;:::i;:::-;37811:92;;37927:55;37976:5;37927:55;:::i;:::-;38005:7;38036:1;38021:281;38046:6;38043:1;38040:13;38021:281;;;38122:6;38116:13;38149:61;38206:3;38191:13;38149:61;:::i;:::-;38142:68;;38233:59;38285:6;38233:59;:::i;:::-;38223:69;;38081:221;38068:1;38065;38061:9;38056:14;;38021:281;;;38025:14;38318:3;38311:10;;37725:602;;;37603:724;;;;:::o;38333:479::-;38502:4;38540:2;38529:9;38525:18;38517:26;;38553:71;38621:1;38610:9;38606:17;38597:6;38553:71;:::i;:::-;38671:9;38665:4;38661:20;38656:2;38645:9;38641:18;38634:48;38699:106;38800:4;38791:6;38699:106;:::i;:::-;38691:114;;38333:479;;;;;:::o;38818:229::-;38958:34;38954:1;38946:6;38942:14;38935:58;39027:12;39022:2;39014:6;39010:15;39003:37;38818:229;:::o;39053:366::-;39195:3;39216:67;39280:2;39275:3;39216:67;:::i;:::-;39209:74;;39292:93;39381:3;39292:93;:::i;:::-;39410:2;39405:3;39401:12;39394:19;;39053:366;;;:::o;39425:419::-;39591:4;39629:2;39618:9;39614:18;39606:26;;39678:9;39672:4;39668:20;39664:1;39653:9;39649:17;39642:47;39706:131;39832:4;39706:131;:::i;:::-;39698:139;;39425:419;;;:::o;39850:175::-;39990:27;39986:1;39978:6;39974:14;39967:51;39850:175;:::o;40031:366::-;40173:3;40194:67;40258:2;40253:3;40194:67;:::i;:::-;40187:74;;40270:93;40359:3;40270:93;:::i;:::-;40388:2;40383:3;40379:12;40372:19;;40031:366;;;:::o;40403:419::-;40569:4;40607:2;40596:9;40592:18;40584:26;;40656:9;40650:4;40646:20;40642:1;40631:9;40627:17;40620:47;40684:131;40810:4;40684:131;:::i;:::-;40676:139;;40403:419;;;:::o;40828:234::-;40968:34;40964:1;40956:6;40952:14;40945:58;41037:17;41032:2;41024:6;41020:15;41013:42;40828:234;:::o;41068:366::-;41210:3;41231:67;41295:2;41290:3;41231:67;:::i;:::-;41224:74;;41307:93;41396:3;41307:93;:::i;:::-;41425:2;41420:3;41416:12;41409:19;;41068:366;;;:::o;41440:419::-;41606:4;41644:2;41633:9;41629:18;41621:26;;41693:9;41687:4;41683:20;41679:1;41668:9;41664:17;41657:47;41721:131;41847:4;41721:131;:::i;:::-;41713:139;;41440:419;;;:::o;41865:148::-;41967:11;42004:3;41989:18;;41865:148;;;;:::o;42019:377::-;42125:3;42153:39;42186:5;42153:39;:::i;:::-;42208:89;42290:6;42285:3;42208:89;:::i;:::-;42201:96;;42306:52;42351:6;42346:3;42339:4;42332:5;42328:16;42306:52;:::i;:::-;42383:6;42378:3;42374:16;42367:23;;42129:267;42019:377;;;;:::o;42402:435::-;42582:3;42604:95;42695:3;42686:6;42604:95;:::i;:::-;42597:102;;42716:95;42807:3;42798:6;42716:95;:::i;:::-;42709:102;;42828:3;42821:10;;42402:435;;;;;:::o;42843:348::-;42883:7;42906:20;42924:1;42906:20;:::i;:::-;42901:25;;42940:20;42958:1;42940:20;:::i;:::-;42935:25;;43128:1;43060:66;43056:74;43053:1;43050:81;43045:1;43038:9;43031:17;43027:105;43024:131;;;43135:18;;:::i;:::-;43024:131;43183:1;43180;43176:9;43165:20;;42843:348;;;;:::o;43197:225::-;43337:34;43333:1;43325:6;43321:14;43314:58;43406:8;43401:2;43393:6;43389:15;43382:33;43197:225;:::o;43428:366::-;43570:3;43591:67;43655:2;43650:3;43591:67;:::i;:::-;43584:74;;43667:93;43756:3;43667:93;:::i;:::-;43785:2;43780:3;43776:12;43769:19;;43428:366;;;:::o;43800:419::-;43966:4;44004:2;43993:9;43989:18;43981:26;;44053:9;44047:4;44043:20;44039:1;44028:9;44024:17;44017:47;44081:131;44207:4;44081:131;:::i;:::-;44073:139;;43800:419;;;:::o;44225:231::-;44365:34;44361:1;44353:6;44349:14;44342:58;44434:14;44429:2;44421:6;44417:15;44410:39;44225:231;:::o;44462:366::-;44604:3;44625:67;44689:2;44684:3;44625:67;:::i;:::-;44618:74;;44701:93;44790:3;44701:93;:::i;:::-;44819:2;44814:3;44810:12;44803:19;;44462:366;;;:::o;44834:419::-;45000:4;45038:2;45027:9;45023:18;45015:26;;45087:9;45081:4;45077:20;45073:1;45062:9;45058:17;45051:47;45115:131;45241:4;45115:131;:::i;:::-;45107:139;;44834:419;;;:::o;45259:228::-;45399:34;45395:1;45387:6;45383:14;45376:58;45468:11;45463:2;45455:6;45451:15;45444:36;45259:228;:::o;45493:366::-;45635:3;45656:67;45720:2;45715:3;45656:67;:::i;:::-;45649:74;;45732:93;45821:3;45732:93;:::i;:::-;45850:2;45845:3;45841:12;45834:19;;45493:366;;;:::o;45865:419::-;46031:4;46069:2;46058:9;46054:18;46046:26;;46118:9;46112:4;46108:20;46104:1;46093:9;46089:17;46082:47;46146:131;46272:4;46146:131;:::i;:::-;46138:139;;45865:419;;;:::o;46290:223::-;46430:34;46426:1;46418:6;46414:14;46407:58;46499:6;46494:2;46486:6;46482:15;46475:31;46290:223;:::o;46519:366::-;46661:3;46682:67;46746:2;46741:3;46682:67;:::i;:::-;46675:74;;46758:93;46847:3;46758:93;:::i;:::-;46876:2;46871:3;46867:12;46860:19;;46519:366;;;:::o;46891:419::-;47057:4;47095:2;47084:9;47080:18;47072:26;;47144:9;47138:4;47134:20;47130:1;47119:9;47115:17;47108:47;47172:131;47298:4;47172:131;:::i;:::-;47164:139;;46891:419;;;:::o;47316:191::-;47356:4;47376:20;47394:1;47376:20;:::i;:::-;47371:25;;47410:20;47428:1;47410:20;:::i;:::-;47405:25;;47449:1;47446;47443:8;47440:34;;;47454:18;;:::i;:::-;47440:34;47499:1;47496;47492:9;47484:17;;47316:191;;;;:::o;47513:180::-;47561:77;47558:1;47551:88;47658:4;47655:1;47648:15;47682:4;47679:1;47672:15;47699:171;47737:3;47760:23;47777:5;47760:23;:::i;:::-;47751:32;;47805:6;47798:5;47795:17;47792:43;;47815:18;;:::i;:::-;47792:43;47862:1;47855:5;47851:13;47844:20;;47699:171;;;:::o;47876:143::-;47933:5;47964:6;47958:13;47949:22;;47980:33;48007:5;47980:33;:::i;:::-;47876:143;;;;:::o;48025:351::-;48095:6;48144:2;48132:9;48123:7;48119:23;48115:32;48112:119;;;48150:79;;:::i;:::-;48112:119;48270:1;48295:64;48351:7;48342:6;48331:9;48327:22;48295:64;:::i;:::-;48285:74;;48241:128;48025:351;;;;:::o;48382:79::-;48421:7;48450:5;48439:16;;48382:79;;;:::o;48467:157::-;48572:45;48592:24;48610:5;48592:24;:::i;:::-;48572:45;:::i;:::-;48567:3;48560:58;48467:157;;:::o;48630:77::-;48667:7;48696:5;48685:16;;48630:77;;;:::o;48713:79::-;48752:7;48781:5;48770:16;;48713:79;;;:::o;48798:157::-;48903:45;48923:24;48941:5;48923:24;:::i;:::-;48903:45;:::i;:::-;48898:3;48891:58;48798:157;;:::o;48961:104::-;49006:7;49035:24;49053:5;49035:24;:::i;:::-;49024:35;;48961:104;;;:::o;49071:94::-;49104:8;49152:5;49148:2;49144:14;49123:35;;49071:94;;;:::o;49171:::-;49210:7;49239:20;49253:5;49239:20;:::i;:::-;49228:31;;49171:94;;;:::o;49271:108::-;49318:7;49347:26;49367:5;49347:26;:::i;:::-;49336:37;;49271:108;;;:::o;49385:189::-;49506:61;49534:32;49560:5;49534:32;:::i;:::-;49506:61;:::i;:::-;49501:3;49494:74;49385:189;;:::o;49580:100::-;49619:7;49648:26;49668:5;49648:26;:::i;:::-;49637:37;;49580:100;;;:::o;49686:157::-;49791:45;49811:24;49829:5;49811:24;:::i;:::-;49791:45;:::i;:::-;49786:3;49779:58;49686:157;;:::o;49849:96::-;49883:8;49932:5;49927:3;49923:15;49902:36;;49849:96;;;:::o;49951:94::-;49989:7;50018:21;50033:5;50018:21;:::i;:::-;50007:32;;49951:94;;;:::o;50051:153::-;50154:43;50173:23;50190:5;50173:23;:::i;:::-;50154:43;:::i;:::-;50149:3;50142:56;50051:153;;:::o;50210:1411::-;50560:3;50575:75;50646:3;50637:6;50575:75;:::i;:::-;50675:2;50670:3;50666:12;50659:19;;50688:75;50759:3;50750:6;50688:75;:::i;:::-;50788:2;50783:3;50779:12;50772:19;;50801:91;50888:3;50879:6;50801:91;:::i;:::-;50917:2;50912:3;50908:12;50901:19;;50930:75;51001:3;50992:6;50930:75;:::i;:::-;51030:2;51025:3;51021:12;51014:19;;51043:75;51114:3;51105:6;51043:75;:::i;:::-;51143:2;51138:3;51134:12;51127:19;;51156:75;51227:3;51218:6;51156:75;:::i;:::-;51256:2;51251:3;51247:12;51240:19;;51269:75;51340:3;51331:6;51269:75;:::i;:::-;51369:2;51364:3;51360:12;51353:19;;51382:75;51453:3;51444:6;51382:75;:::i;:::-;51482:2;51477:3;51473:12;51466:19;;51495:73;51564:3;51555:6;51495:73;:::i;:::-;51593:1;51588:3;51584:11;51577:18;;51612:3;51605:10;;50210:1411;;;;;;;;;;;;:::o;51627:180::-;51675:77;51672:1;51665:88;51772:4;51769:1;51762:15;51796:4;51793:1;51786:15;51813:176;51845:1;51862:20;51880:1;51862:20;:::i;:::-;51857:25;;51896:20;51914:1;51896:20;:::i;:::-;51891:25;;51935:1;51925:35;;51940:18;;:::i;:::-;51925:35;51981:1;51978;51974:9;51969:14;;51813:176;;;;:::o;51995:237::-;52135:34;52131:1;52123:6;52119:14;52112:58;52204:20;52199:2;52191:6;52187:15;52180:45;51995:237;:::o;52238:366::-;52380:3;52401:67;52465:2;52460:3;52401:67;:::i;:::-;52394:74;;52477:93;52566:3;52477:93;:::i;:::-;52595:2;52590:3;52586:12;52579:19;;52238:366;;;:::o;52610:419::-;52776:4;52814:2;52803:9;52799:18;52791:26;;52863:9;52857:4;52853:20;52849:1;52838:9;52834:17;52827:47;52891:131;53017:4;52891:131;:::i;:::-;52883:139;;52610:419;;;:::o;53035:185::-;53075:1;53092:20;53110:1;53092:20;:::i;:::-;53087:25;;53126:20;53144:1;53126:20;:::i;:::-;53121:25;;53165:1;53155:35;;53170:18;;:::i;:::-;53155:35;53212:1;53209;53205:9;53200:14;;53035:185;;;;:::o;53226:98::-;53277:6;53311:5;53305:12;53295:22;;53226:98;;;:::o;53330:168::-;53413:11;53447:6;53442:3;53435:19;53487:4;53482:3;53478:14;53463:29;;53330:168;;;;:::o;53504:360::-;53590:3;53618:38;53650:5;53618:38;:::i;:::-;53672:70;53735:6;53730:3;53672:70;:::i;:::-;53665:77;;53751:52;53796:6;53791:3;53784:4;53777:5;53773:16;53751:52;:::i;:::-;53828:29;53850:6;53828:29;:::i;:::-;53823:3;53819:39;53812:46;;53594:270;53504:360;;;;:::o;53870:640::-;54065:4;54103:3;54092:9;54088:19;54080:27;;54117:71;54185:1;54174:9;54170:17;54161:6;54117:71;:::i;:::-;54198:72;54266:2;54255:9;54251:18;54242:6;54198:72;:::i;:::-;54280;54348:2;54337:9;54333:18;54324:6;54280:72;:::i;:::-;54399:9;54393:4;54389:20;54384:2;54373:9;54369:18;54362:48;54427:76;54498:4;54489:6;54427:76;:::i;:::-;54419:84;;53870:640;;;;;;;:::o;54516:141::-;54572:5;54603:6;54597:13;54588:22;;54619:32;54645:5;54619:32;:::i;:::-;54516:141;;;;:::o;54663:349::-;54732:6;54781:2;54769:9;54760:7;54756:23;54752:32;54749:119;;;54787:79;;:::i;:::-;54749:119;54907:1;54932:63;54987:7;54978:6;54967:9;54963:22;54932:63;:::i;:::-;54922:73;;54878:127;54663:349;;;;:::o;55018:182::-;55158:34;55154:1;55146:6;55142:14;55135:58;55018:182;:::o;55206:366::-;55348:3;55369:67;55433:2;55428:3;55369:67;:::i;:::-;55362:74;;55445:93;55534:3;55445:93;:::i;:::-;55563:2;55558:3;55554:12;55547:19;;55206:366;;;:::o;55578:419::-;55744:4;55782:2;55771:9;55767:18;55759:26;;55831:9;55825:4;55821:20;55817:1;55806:9;55802:17;55795:47;55859:131;55985:4;55859:131;:::i;:::-;55851:139;;55578:419;;;:::o;56003:178::-;56143:30;56139:1;56131:6;56127:14;56120:54;56003:178;:::o;56187:366::-;56329:3;56350:67;56414:2;56409:3;56350:67;:::i;:::-;56343:74;;56426:93;56515:3;56426:93;:::i;:::-;56544:2;56539:3;56535:12;56528:19;;56187:366;;;:::o;56559:419::-;56725:4;56763:2;56752:9;56748:18;56740:26;;56812:9;56806:4;56802:20;56798:1;56787:9;56783:17;56776:47;56840:131;56966:4;56840:131;:::i;:::-;56832:139;;56559:419;;;:::o

Swarm Source

ipfs://0294bc23880bbaf19bb85ae545646e25e5097dd47616657a2568034efc54f631
Loading...
Loading
Loading...
Loading
[ 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.