ETH Price: $2,273.82 (-3.81%)

Token

Women Of Future 2.0 (WOF2)
 

Overview

Max Total Supply

0 WOF2

Holders

130

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 WOF2
0x44405406745Ad8877f71D5f5f3ceE5717F1D5927
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NFT

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-08
*/

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

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

        return account.code.length > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

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


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol)

pragma solidity ^0.8.0;


/**
 * @dev ERC721 token with storage based token URI management.
 */
abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

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

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

    /**
     * @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 override {
        super._burn(tokenId);

        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: contract.sol


pragma solidity 0.8.7;




contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    address public owner = 0x7DE76Ad3b42205d304CC263B92B4d99b466660cb;
    address public wlMinter=0x471bBe887544c6e56ceC501aBe6f6b281F3B137E;
    address public pbMinter=0x16e5AdE48bFd20fc908E7674206670E318e781E5;
    address public holderMinter=0x5431B094322D0A40920FeBE18C1CF8F1C2E221E8;
    uint256 public normalPrice = 70000000000000000;  // 0.07ETH
    uint256 public totalMint = 0;
    uint256 public maxMint = 7777;
    bool public publicMintOpen=false;
    string public baseUrl =
        "https://api.womenoffuture.io/no-reveal/";

    constructor() ERC721("Women Of Future 2.0", "WOF2") {


    }

    receive() external payable {}

    modifier onlyOwner() {
        require(msg.sender == owner, "ADMIN_ONLY");
        _;
    }

    function append(
        string memory a,
        string memory b,
        string memory c
    ) internal pure returns (string memory) {
        return string(abi.encodePacked(a, b, c));
    }


  function changeBaseURI(string memory baseURI_) public onlyOwner {
        baseUrl = baseURI_;
    }


    function awardItemWL(address player, uint256 tokenCount,bytes32 message, bytes memory sig) public payable {
        require(msg.value>=tokenCount*normalPrice);
        require(recoverSigner(message,sig)==wlMinter);
        require(totalMint<=maxMint);

        for (uint256 i = 0; i < tokenCount; i++) {
            uint256 newItemId = _tokenIds.current();
            _tokenIds.increment();
            _mint(player, newItemId);
            _setTokenURI(
                newItemId,
                append(baseUrl, Strings.toString(newItemId + 1), ".json")
            );
            totalMint++;
        }

    }

        function awardItemHolder(address player,bytes32 message, bytes memory sig) public payable {
        require(recoverSigner(message,sig)==holderMinter);
        require(totalMint<=maxMint);
            uint256 newItemId = _tokenIds.current();
            _tokenIds.increment();
            _mint(player, newItemId);
            _setTokenURI(
                newItemId,
                append(baseUrl, Strings.toString(newItemId + 1), ".json")
            );
            totalMint++;

    }


        function awardItemPB(address player, uint256 tokenCount,bytes32 message, bytes memory sig) public payable {
        require(msg.value>=tokenCount*normalPrice);
        require(recoverSigner(message,sig)==pbMinter);
        require(totalMint<=maxMint);
        require(publicMintOpen);
        for (uint256 i = 0; i < tokenCount; i++) {
            uint256 newItemId = _tokenIds.current();
            _tokenIds.increment();
            _mint(player, newItemId);
            _setTokenURI(
                newItemId,
                append(baseUrl, Strings.toString(newItemId + 1), ".json")
            );
            totalMint++;
        }

    }

    function claimBalance(uint256 withdrawAmount) external onlyOwner {
        payable(msg.sender).transfer(withdrawAmount);
    }

     function adminMint(address player, uint256 tokenCount) external onlyOwner {
         require(totalMint<=300);
           for (uint256 i = 0; i < tokenCount; i++) {
            uint256 newItemId = _tokenIds.current();
            _tokenIds.increment();
            _mint(player, newItemId);
            _setTokenURI(
                newItemId,
                append(baseUrl, Strings.toString(newItemId + 1), ".json")
            );
            totalMint++;
        }
    }


    function changeOwner(address adres) external onlyOwner {
        require(adres != address(0));
        owner = adres;
    }

      function changePublicMint(bool boo) external onlyOwner {
        publicMintOpen=boo;
    }

     function recoverSigner(bytes32 message, bytes memory sig)
       public
       pure
       returns (address)
    {
       uint8 v;
       bytes32 r;
       bytes32 s;

       (v, r, s) = splitSignature(sig);
       return ecrecover(message, v, r, s);
  }
  function splitSignature(bytes memory sig)
       public
       pure
       returns (uint8, bytes32, bytes32)
   {
       require(sig.length == 65);

       bytes32 r;
       bytes32 s;
       uint8 v;

       assembly {
           // first 32 bytes, after the length prefix
           r := mload(add(sig, 32))
           // second 32 bytes
           s := mload(add(sig, 64))
           // final byte (first byte of the next 32 bytes)
           v := byte(0, mload(add(sig, 96)))
       }

       return (v, r, s);
   }
}

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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"tokenCount","type":"uint256"}],"name":"adminMint","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":"player","type":"address"},{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"awardItemHolder","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"awardItemPB","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"player","type":"address"},{"internalType":"uint256","name":"tokenCount","type":"uint256"},{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"awardItemWL","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseUrl","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"changeBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adres","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"boo","type":"bool"}],"name":"changePublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"withdrawAmount","type":"uint256"}],"name":"claimBalance","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":[],"name":"holderMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMint","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":"normalPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"pbMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"message","type":"bytes32"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"recoverSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"pure","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":"bytes","name":"sig","type":"bytes"}],"name":"splitSignature","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMint","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":[],"name":"wlMinter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737de76ad3b42205d304cc263b92b4d99b466660cb600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073471bbe887544c6e56cec501abe6f6b281f3b137e600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507316e5ade48bfd20fc908e7674206670e318e781e5600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735431b094322d0a40920febe18c1cf8f1c2e221e8600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555066f8b0a10e470000600c556000600d55611e61600e556000600f60006101000a81548160ff021916908315150217905550604051806060016040528060278152602001620044046027913960109080519060200190620001ba9291906200026f565b50348015620001c857600080fd5b506040518060400160405280601381526020017f576f6d656e204f662046757475726520322e30000000000000000000000000008152506040518060400160405280600481526020017f574f46320000000000000000000000000000000000000000000000000000000081525081600090805190602001906200024d9291906200026f565b508060019080519060200190620002669291906200026f565b50505062000384565b8280546200027d906200031f565b90600052602060002090601f016020900481019282620002a15760008555620002ed565b82601f10620002bc57805160ff1916838001178555620002ed565b82800160010185558215620002ed579182015b82811115620002ec578251825591602001919060010190620002cf565b5b509050620002fc919062000300565b5090565b5b808211156200031b57600081600090555060010162000301565b5090565b600060028204905060018216806200033857607f821691505b602082108114156200034f576200034e62000355565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61407080620003946000396000f3fe6080604052600436106101e75760003560e01c806389a00f9b11610102578063b88d4fde11610095578063e58306f911610064578063e58306f9146106f9578063e985e9c514610722578063e9fad3961461075f578063ef92fd7a14610788576101ee565b8063b88d4fde1461064c578063bcc9ca5b14610675578063c87b56dd146106a0578063d21a8409146106dd576101ee565b806397aba7f9116100d157806397aba7f91461057e578063a22cb465146105bb578063a6f9dae1146105e4578063a7bb58031461060d576101ee565b806389a00f9b146104d45780638da5cb5b146104fd578063945ec9dd1461052857806395d89b4114610553576101ee565b806342842e0e1161017a5780635bcabf04116101495780635bcabf04146104045780636352211e1461042f57806370a082311461046c5780637501f741146104a9576101ee565b806342842e0e14610369578063575cfd561461039257806359a7715a146103bd5780635b0e4096146103e8576101ee565b806323b872dd116101b657806323b872dd146102c157806330b81aa7146102ea57806338da68ec1461031557806339a0c6f914610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612e7d565b6107a4565b6040516102279190613393565b60405180910390f35b34801561023c57600080fd5b50610245610886565b60405161025291906133f3565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612f69565b610918565b60405161028f919061332c565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612d31565b61099d565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612bac565b610ab5565b005b3480156102f657600080fd5b506102ff610b15565b60405161030c919061332c565b60405180910390f35b34801561032157600080fd5b5061032a610b3b565b604051610337919061332c565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190612f20565b610b61565b005b34801561037557600080fd5b50610390600480360381019061038b9190612bac565b610c0b565b005b34801561039e57600080fd5b506103a7610c2b565b6040516103b4919061332c565b60405180910390f35b3480156103c957600080fd5b506103d2610c51565b6040516103df9190613635565b60405180910390f35b61040260048036038101906103fd9190612cc2565b610c57565b005b34801561041057600080fd5b50610419610df2565b60405161042691906133f3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612f69565b610e80565b604051610463919061332c565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612b3f565b610f32565b6040516104a09190613635565b60405180910390f35b3480156104b557600080fd5b506104be610fea565b6040516104cb9190613635565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612df4565b610ff0565b005b34801561050957600080fd5b5061051261109d565b60405161051f919061332c565b60405180910390f35b34801561053457600080fd5b5061053d6110c3565b60405161054a9190613635565b60405180910390f35b34801561055f57600080fd5b506105686110c9565b60405161057591906133f3565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612e21565b61115b565b6040516105b2919061332c565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190612c82565b6111d0565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612b3f565b6111e6565b005b34801561061957600080fd5b50610634600480360381019061062f9190612ed7565b6112f4565b60405161064393929190613650565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612bff565b611337565b005b34801561068157600080fd5b5061068a611399565b6040516106979190613393565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612f69565b6113ac565b6040516106d491906133f3565b60405180910390f35b6106f760048036038101906106f29190612d71565b6114fe565b005b34801561070557600080fd5b50610720600480360381019061071b9190612d31565b6116d3565b005b34801561072e57600080fd5b5061074960048036038101906107449190612b6c565b6118b9565b6040516107569190613393565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190612f69565b61194d565b005b6107a2600480360381019061079d9190612d71565b611a27565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f575061087e82611c15565b5b9050919050565b60606000805461089590613933565b80601f01602080910402602001604051908101604052809291908181526020018280546108c190613933565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b600061092382611c7f565b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613595565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a882610e80565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906135d5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a38611ceb565b73ffffffffffffffffffffffffffffffffffffffff161480610a675750610a6681610a61611ceb565b6118b9565b5b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906134d5565b60405180910390fd5b610ab08383611cf3565b505050565b610ac6610ac0611ceb565b82611dac565b610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613615565b60405180910390fd5b610b10838383611e8a565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be8906135f5565b60405180910390fd5b8060109080519060200190610c0792919061293e565b5050565b610c2683838360405180602001604052806000815250611337565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c9a838361115b565b73ffffffffffffffffffffffffffffffffffffffff1614610cba57600080fd5b600e54600d541115610ccb57600080fd5b6000610cd760076120f1565b9050610ce360076120ff565b610ced8482612115565b610dd481610dcf60108054610d0190613933565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2d90613933565b8015610d7a5780601f10610d4f57610100808354040283529160200191610d7a565b820191906000526020600020905b815481529060010190602001808311610d5d57829003601f168201915b5050505050610d94600186610d8f9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d6000815480929190610de790613996565b919050555050505050565b60108054610dff90613933565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2b90613933565b8015610e785780601f10610e4d57610100808354040283529160200191610e78565b820191906000526020600020905b815481529060010190602001808311610e5b57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090613515565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906134f5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906135f5565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6060600180546110d890613933565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613933565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b5050505050905090565b60008060008061116a856112f4565b8093508194508295505050506001868484846040516000815260200160405260405161119994939291906133ae565b6020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b50505060206040510351935050505092915050565b6111e26111db611ceb565b83836124f3565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906135f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112b057600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000604184511461130757600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b611348611342611ceb565b83611dac565b611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90613615565b60405180910390fd5b61139384848484612660565b50505050565b600f60009054906101000a900460ff1681565b60606113b782611c7f565b6113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed90613575565b60405180910390fd5b600060066000848152602001908152602001600020805461141690613933565b80601f016020809104026020016040519081016040528092919081815260200182805461144290613933565b801561148f5780601f106114645761010080835404028352916020019161148f565b820191906000526020600020905b81548152906001019060200180831161147257829003601f168201915b5050505050905060006114a06126bc565b90506000815114156114b65781925050506114f9565b6000825111156114eb5780826040516020016114d39291906132d7565b604051602081830303815290604052925050506114f9565b6114f4846126d3565b925050505b919050565b600c548361150c91906137d8565b34101561151857600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661155b838361115b565b73ffffffffffffffffffffffffffffffffffffffff161461157b57600080fd5b600e54600d54111561158c57600080fd5b60005b838110156116cc5760006115a360076120f1565b90506115af60076120ff565b6115b98682612115565b6116a08161169b601080546115cd90613933565b80601f01602080910402602001604051908101604052809291908181526020018280546115f990613933565b80156116465780601f1061161b57610100808354040283529160200191611646565b820191906000526020600020905b81548152906001019060200180831161162957829003601f168201915b505050505061166060018661165b9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d60008154809291906116b390613996565b91905055505080806116c490613996565b91505061158f565b5050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906135f5565b60405180910390fd5b61012c600d54111561177457600080fd5b60005b818110156118b457600061178b60076120f1565b905061179760076120ff565b6117a18482612115565b61188881611883601080546117b590613933565b80601f01602080910402602001604051908101604052809291908181526020018280546117e190613933565b801561182e5780601f106118035761010080835404028352916020019161182e565b820191906000526020600020905b81548152906001019060200180831161181157829003601f168201915b50505050506118486001866118439190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d600081548092919061189b90613996565b91905055505080806118ac90613996565b915050611777565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906135f5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a23573d6000803e3d6000fd5b5050565b600c5483611a3591906137d8565b341015611a4157600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a84838361115b565b73ffffffffffffffffffffffffffffffffffffffff1614611aa457600080fd5b600e54600d541115611ab557600080fd5b600f60009054906101000a900460ff16611ace57600080fd5b60005b83811015611c0e576000611ae560076120f1565b9050611af160076120ff565b611afb8682612115565b611be281611bdd60108054611b0f90613933565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b90613933565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b5050505050611ba2600186611b9d9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d6000815480929190611bf590613996565b9190505550508080611c0690613996565b915050611ad1565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6683610e80565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611db782611c7f565b611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906134b5565b60405180910390fd5b6000611e0183610e80565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7057508373ffffffffffffffffffffffffffffffffffffffff16611e5884610918565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e815750611e8081856118b9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eaa82610e80565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790613435565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613475565b60405180910390fd5b611f7b83838361277a565b611f86600082611cf3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd69190613832565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202d9190613751565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120ec83838361277f565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90613555565b60405180910390fd5b61218e81611c7f565b156121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c590613455565b60405180910390fd5b6121da6000838361277a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222a9190613751565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122eb6000838361277f565b5050565b60606000821415612337576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061244b565b600082905060005b6000821461236957808061235290613996565b915050600a8261236291906137a7565b915061233f565b60008167ffffffffffffffff81111561238557612384613acc565b5b6040519080825280601f01601f1916602001820160405280156123b75781602001600182028036833780820191505090505b5090505b60008514612444576001826123d09190613832565b9150600a856123df91906139df565b60306123eb9190613751565b60f81b81838151811061240157612400613a9d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243d91906137a7565b94506123bb565b8093505050505b919050565b6060838383604051602001612467939291906132fb565b60405160208183030381529060405290509392505050565b61248882611c7f565b6124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be90613535565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906124ee92919061293e565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990613495565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126539190613393565b60405180910390a3505050565b61266b848484611e8a565b61267784848484612784565b6126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90613415565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606126de82611c7f565b61271d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612714906135b5565b60405180910390fd5b60006127276126bc565b905060008151116127475760405180602001604052806000815250612772565b80612751846122ef565b6040516020016127629291906132d7565b6040516020818303038152906040525b915050919050565b505050565b505050565b60006127a58473ffffffffffffffffffffffffffffffffffffffff1661291b565b1561290e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127ce611ceb565b8786866040518563ffffffff1660e01b81526004016127f09493929190613347565b602060405180830381600087803b15801561280a57600080fd5b505af192505050801561283b57506040513d601f19601f820116820180604052508101906128389190612eaa565b60015b6128be573d806000811461286b576040519150601f19603f3d011682016040523d82523d6000602084013e612870565b606091505b506000815114156128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad90613415565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612913565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461294a90613933565b90600052602060002090601f01602090048101928261296c57600085556129b3565b82601f1061298557805160ff19168380011785556129b3565b828001600101855582156129b3579182015b828111156129b2578251825591602001919060010190612997565b5b5090506129c091906129c4565b5090565b5b808211156129dd5760008160009055506001016129c5565b5090565b60006129f46129ef846136ac565b613687565b905082815260208101848484011115612a1057612a0f613b00565b5b612a1b8482856138f1565b509392505050565b6000612a36612a31846136dd565b613687565b905082815260208101848484011115612a5257612a51613b00565b5b612a5d8482856138f1565b509392505050565b600081359050612a7481613fc7565b92915050565b600081359050612a8981613fde565b92915050565b600081359050612a9e81613ff5565b92915050565b600081359050612ab38161400c565b92915050565b600081519050612ac88161400c565b92915050565b600082601f830112612ae357612ae2613afb565b5b8135612af38482602086016129e1565b91505092915050565b600082601f830112612b1157612b10613afb565b5b8135612b21848260208601612a23565b91505092915050565b600081359050612b3981614023565b92915050565b600060208284031215612b5557612b54613b0a565b5b6000612b6384828501612a65565b91505092915050565b60008060408385031215612b8357612b82613b0a565b5b6000612b9185828601612a65565b9250506020612ba285828601612a65565b9150509250929050565b600080600060608486031215612bc557612bc4613b0a565b5b6000612bd386828701612a65565b9350506020612be486828701612a65565b9250506040612bf586828701612b2a565b9150509250925092565b60008060008060808587031215612c1957612c18613b0a565b5b6000612c2787828801612a65565b9450506020612c3887828801612a65565b9350506040612c4987828801612b2a565b925050606085013567ffffffffffffffff811115612c6a57612c69613b05565b5b612c7687828801612ace565b91505092959194509250565b60008060408385031215612c9957612c98613b0a565b5b6000612ca785828601612a65565b9250506020612cb885828601612a7a565b9150509250929050565b600080600060608486031215612cdb57612cda613b0a565b5b6000612ce986828701612a65565b9350506020612cfa86828701612a8f565b925050604084013567ffffffffffffffff811115612d1b57612d1a613b05565b5b612d2786828701612ace565b9150509250925092565b60008060408385031215612d4857612d47613b0a565b5b6000612d5685828601612a65565b9250506020612d6785828601612b2a565b9150509250929050565b60008060008060808587031215612d8b57612d8a613b0a565b5b6000612d9987828801612a65565b9450506020612daa87828801612b2a565b9350506040612dbb87828801612a8f565b925050606085013567ffffffffffffffff811115612ddc57612ddb613b05565b5b612de887828801612ace565b91505092959194509250565b600060208284031215612e0a57612e09613b0a565b5b6000612e1884828501612a7a565b91505092915050565b60008060408385031215612e3857612e37613b0a565b5b6000612e4685828601612a8f565b925050602083013567ffffffffffffffff811115612e6757612e66613b05565b5b612e7385828601612ace565b9150509250929050565b600060208284031215612e9357612e92613b0a565b5b6000612ea184828501612aa4565b91505092915050565b600060208284031215612ec057612ebf613b0a565b5b6000612ece84828501612ab9565b91505092915050565b600060208284031215612eed57612eec613b0a565b5b600082013567ffffffffffffffff811115612f0b57612f0a613b05565b5b612f1784828501612ace565b91505092915050565b600060208284031215612f3657612f35613b0a565b5b600082013567ffffffffffffffff811115612f5457612f53613b05565b5b612f6084828501612afc565b91505092915050565b600060208284031215612f7f57612f7e613b0a565b5b6000612f8d84828501612b2a565b91505092915050565b612f9f81613866565b82525050565b612fae81613878565b82525050565b612fbd81613884565b82525050565b6000612fce8261370e565b612fd88185613724565b9350612fe8818560208601613900565b612ff181613b0f565b840191505092915050565b600061300782613719565b6130118185613735565b9350613021818560208601613900565b61302a81613b0f565b840191505092915050565b600061304082613719565b61304a8185613746565b935061305a818560208601613900565b80840191505092915050565b6000613073603283613735565b915061307e82613b20565b604082019050919050565b6000613096602583613735565b91506130a182613b6f565b604082019050919050565b60006130b9601c83613735565b91506130c482613bbe565b602082019050919050565b60006130dc602483613735565b91506130e782613be7565b604082019050919050565b60006130ff601983613735565b915061310a82613c36565b602082019050919050565b6000613122602c83613735565b915061312d82613c5f565b604082019050919050565b6000613145603883613735565b915061315082613cae565b604082019050919050565b6000613168602a83613735565b915061317382613cfd565b604082019050919050565b600061318b602983613735565b915061319682613d4c565b604082019050919050565b60006131ae602e83613735565b91506131b982613d9b565b604082019050919050565b60006131d1602083613735565b91506131dc82613dea565b602082019050919050565b60006131f4603183613735565b91506131ff82613e13565b604082019050919050565b6000613217602c83613735565b915061322282613e62565b604082019050919050565b600061323a602f83613735565b915061324582613eb1565b604082019050919050565b600061325d602183613735565b915061326882613f00565b604082019050919050565b6000613280600a83613735565b915061328b82613f4f565b602082019050919050565b60006132a3603183613735565b91506132ae82613f78565b604082019050919050565b6132c2816138da565b82525050565b6132d1816138e4565b82525050565b60006132e38285613035565b91506132ef8284613035565b91508190509392505050565b60006133078286613035565b91506133138285613035565b915061331f8284613035565b9150819050949350505050565b60006020820190506133416000830184612f96565b92915050565b600060808201905061335c6000830187612f96565b6133696020830186612f96565b61337660408301856132b9565b81810360608301526133888184612fc3565b905095945050505050565b60006020820190506133a86000830184612fa5565b92915050565b60006080820190506133c36000830187612fb4565b6133d060208301866132c8565b6133dd6040830185612fb4565b6133ea6060830184612fb4565b95945050505050565b6000602082019050818103600083015261340d8184612ffc565b905092915050565b6000602082019050818103600083015261342e81613066565b9050919050565b6000602082019050818103600083015261344e81613089565b9050919050565b6000602082019050818103600083015261346e816130ac565b9050919050565b6000602082019050818103600083015261348e816130cf565b9050919050565b600060208201905081810360008301526134ae816130f2565b9050919050565b600060208201905081810360008301526134ce81613115565b9050919050565b600060208201905081810360008301526134ee81613138565b9050919050565b6000602082019050818103600083015261350e8161315b565b9050919050565b6000602082019050818103600083015261352e8161317e565b9050919050565b6000602082019050818103600083015261354e816131a1565b9050919050565b6000602082019050818103600083015261356e816131c4565b9050919050565b6000602082019050818103600083015261358e816131e7565b9050919050565b600060208201905081810360008301526135ae8161320a565b9050919050565b600060208201905081810360008301526135ce8161322d565b9050919050565b600060208201905081810360008301526135ee81613250565b9050919050565b6000602082019050818103600083015261360e81613273565b9050919050565b6000602082019050818103600083015261362e81613296565b9050919050565b600060208201905061364a60008301846132b9565b92915050565b600060608201905061366560008301866132c8565b6136726020830185612fb4565b61367f6040830184612fb4565b949350505050565b60006136916136a2565b905061369d8282613965565b919050565b6000604051905090565b600067ffffffffffffffff8211156136c7576136c6613acc565b5b6136d082613b0f565b9050602081019050919050565b600067ffffffffffffffff8211156136f8576136f7613acc565b5b61370182613b0f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061375c826138da565b9150613767836138da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561379c5761379b613a10565b5b828201905092915050565b60006137b2826138da565b91506137bd836138da565b9250826137cd576137cc613a3f565b5b828204905092915050565b60006137e3826138da565b91506137ee836138da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561382757613826613a10565b5b828202905092915050565b600061383d826138da565b9150613848836138da565b92508282101561385b5761385a613a10565b5b828203905092915050565b6000613871826138ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561391e578082015181840152602081019050613903565b8381111561392d576000848401525b50505050565b6000600282049050600182168061394b57607f821691505b6020821081141561395f5761395e613a6e565b5b50919050565b61396e82613b0f565b810181811067ffffffffffffffff8211171561398d5761398c613acc565b5b80604052505050565b60006139a1826138da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d4576139d3613a10565b5b600182019050919050565b60006139ea826138da565b91506139f5836138da565b925082613a0557613a04613a3f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41444d494e5f4f4e4c5900000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613fd081613866565b8114613fdb57600080fd5b50565b613fe781613878565b8114613ff257600080fd5b50565b613ffe81613884565b811461400957600080fd5b50565b6140158161388e565b811461402057600080fd5b50565b61402c816138da565b811461403757600080fd5b5056fea2646970667358221220313461f846a7cd7cc16443970286a08c335003ce2a26cb9aeae721313ffd466164736f6c6343000807003368747470733a2f2f6170692e776f6d656e6f666675747572652e696f2f6e6f2d72657665616c2f

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806389a00f9b11610102578063b88d4fde11610095578063e58306f911610064578063e58306f9146106f9578063e985e9c514610722578063e9fad3961461075f578063ef92fd7a14610788576101ee565b8063b88d4fde1461064c578063bcc9ca5b14610675578063c87b56dd146106a0578063d21a8409146106dd576101ee565b806397aba7f9116100d157806397aba7f91461057e578063a22cb465146105bb578063a6f9dae1146105e4578063a7bb58031461060d576101ee565b806389a00f9b146104d45780638da5cb5b146104fd578063945ec9dd1461052857806395d89b4114610553576101ee565b806342842e0e1161017a5780635bcabf04116101495780635bcabf04146104045780636352211e1461042f57806370a082311461046c5780637501f741146104a9576101ee565b806342842e0e14610369578063575cfd561461039257806359a7715a146103bd5780635b0e4096146103e8576101ee565b806323b872dd116101b657806323b872dd146102c157806330b81aa7146102ea57806338da68ec1461031557806339a0c6f914610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612e7d565b6107a4565b6040516102279190613393565b60405180910390f35b34801561023c57600080fd5b50610245610886565b60405161025291906133f3565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612f69565b610918565b60405161028f919061332c565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612d31565b61099d565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612bac565b610ab5565b005b3480156102f657600080fd5b506102ff610b15565b60405161030c919061332c565b60405180910390f35b34801561032157600080fd5b5061032a610b3b565b604051610337919061332c565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190612f20565b610b61565b005b34801561037557600080fd5b50610390600480360381019061038b9190612bac565b610c0b565b005b34801561039e57600080fd5b506103a7610c2b565b6040516103b4919061332c565b60405180910390f35b3480156103c957600080fd5b506103d2610c51565b6040516103df9190613635565b60405180910390f35b61040260048036038101906103fd9190612cc2565b610c57565b005b34801561041057600080fd5b50610419610df2565b60405161042691906133f3565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612f69565b610e80565b604051610463919061332c565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612b3f565b610f32565b6040516104a09190613635565b60405180910390f35b3480156104b557600080fd5b506104be610fea565b6040516104cb9190613635565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190612df4565b610ff0565b005b34801561050957600080fd5b5061051261109d565b60405161051f919061332c565b60405180910390f35b34801561053457600080fd5b5061053d6110c3565b60405161054a9190613635565b60405180910390f35b34801561055f57600080fd5b506105686110c9565b60405161057591906133f3565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190612e21565b61115b565b6040516105b2919061332c565b60405180910390f35b3480156105c757600080fd5b506105e260048036038101906105dd9190612c82565b6111d0565b005b3480156105f057600080fd5b5061060b60048036038101906106069190612b3f565b6111e6565b005b34801561061957600080fd5b50610634600480360381019061062f9190612ed7565b6112f4565b60405161064393929190613650565b60405180910390f35b34801561065857600080fd5b50610673600480360381019061066e9190612bff565b611337565b005b34801561068157600080fd5b5061068a611399565b6040516106979190613393565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c29190612f69565b6113ac565b6040516106d491906133f3565b60405180910390f35b6106f760048036038101906106f29190612d71565b6114fe565b005b34801561070557600080fd5b50610720600480360381019061071b9190612d31565b6116d3565b005b34801561072e57600080fd5b5061074960048036038101906107449190612b6c565b6118b9565b6040516107569190613393565b60405180910390f35b34801561076b57600080fd5b5061078660048036038101906107819190612f69565b61194d565b005b6107a2600480360381019061079d9190612d71565b611a27565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061086f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061087f575061087e82611c15565b5b9050919050565b60606000805461089590613933565b80601f01602080910402602001604051908101604052809291908181526020018280546108c190613933565b801561090e5780601f106108e35761010080835404028352916020019161090e565b820191906000526020600020905b8154815290600101906020018083116108f157829003601f168201915b5050505050905090565b600061092382611c7f565b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990613595565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109a882610e80565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a10906135d5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a38611ceb565b73ffffffffffffffffffffffffffffffffffffffff161480610a675750610a6681610a61611ceb565b6118b9565b5b610aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9d906134d5565b60405180910390fd5b610ab08383611cf3565b505050565b610ac6610ac0611ceb565b82611dac565b610b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afc90613615565b60405180910390fd5b610b10838383611e8a565b505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be8906135f5565b60405180910390fd5b8060109080519060200190610c0792919061293e565b5050565b610c2683838360405180602001604052806000815250611337565b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c9a838361115b565b73ffffffffffffffffffffffffffffffffffffffff1614610cba57600080fd5b600e54600d541115610ccb57600080fd5b6000610cd760076120f1565b9050610ce360076120ff565b610ced8482612115565b610dd481610dcf60108054610d0190613933565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2d90613933565b8015610d7a5780601f10610d4f57610100808354040283529160200191610d7a565b820191906000526020600020905b815481529060010190602001808311610d5d57829003601f168201915b5050505050610d94600186610d8f9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d6000815480929190610de790613996565b919050555050505050565b60108054610dff90613933565b80601f0160208091040260200160405190810160405280929190818152602001828054610e2b90613933565b8015610e785780601f10610e4d57610100808354040283529160200191610e78565b820191906000526020600020905b815481529060010190602001808311610e5b57829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2090613515565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a906134f5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611077906135f5565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6060600180546110d890613933565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613933565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b5050505050905090565b60008060008061116a856112f4565b8093508194508295505050506001868484846040516000815260200160405260405161119994939291906133ae565b6020604051602081039080840390855afa1580156111bb573d6000803e3d6000fd5b50505060206040510351935050505092915050565b6111e26111db611ceb565b83836124f3565b5050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126d906135f5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112b057600080fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806000604184511461130757600080fd5b60008060006020870151925060408701519150606087015160001a90508083839550955095505050509193909250565b611348611342611ceb565b83611dac565b611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90613615565b60405180910390fd5b61139384848484612660565b50505050565b600f60009054906101000a900460ff1681565b60606113b782611c7f565b6113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed90613575565b60405180910390fd5b600060066000848152602001908152602001600020805461141690613933565b80601f016020809104026020016040519081016040528092919081815260200182805461144290613933565b801561148f5780601f106114645761010080835404028352916020019161148f565b820191906000526020600020905b81548152906001019060200180831161147257829003601f168201915b5050505050905060006114a06126bc565b90506000815114156114b65781925050506114f9565b6000825111156114eb5780826040516020016114d39291906132d7565b604051602081830303815290604052925050506114f9565b6114f4846126d3565b925050505b919050565b600c548361150c91906137d8565b34101561151857600080fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661155b838361115b565b73ffffffffffffffffffffffffffffffffffffffff161461157b57600080fd5b600e54600d54111561158c57600080fd5b60005b838110156116cc5760006115a360076120f1565b90506115af60076120ff565b6115b98682612115565b6116a08161169b601080546115cd90613933565b80601f01602080910402602001604051908101604052809291908181526020018280546115f990613933565b80156116465780601f1061161b57610100808354040283529160200191611646565b820191906000526020600020905b81548152906001019060200180831161162957829003601f168201915b505050505061166060018661165b9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d60008154809291906116b390613996565b91905055505080806116c490613996565b91505061158f565b5050505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906135f5565b60405180910390fd5b61012c600d54111561177457600080fd5b60005b818110156118b457600061178b60076120f1565b905061179760076120ff565b6117a18482612115565b61188881611883601080546117b590613933565b80601f01602080910402602001604051908101604052809291908181526020018280546117e190613933565b801561182e5780601f106118035761010080835404028352916020019161182e565b820191906000526020600020905b81548152906001019060200180831161181157829003601f168201915b50505050506118486001866118439190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d600081548092919061189b90613996565b91905055505080806118ac90613996565b915050611777565b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146119dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d4906135f5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611a23573d6000803e3d6000fd5b5050565b600c5483611a3591906137d8565b341015611a4157600080fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a84838361115b565b73ffffffffffffffffffffffffffffffffffffffff1614611aa457600080fd5b600e54600d541115611ab557600080fd5b600f60009054906101000a900460ff16611ace57600080fd5b60005b83811015611c0e576000611ae560076120f1565b9050611af160076120ff565b611afb8682612115565b611be281611bdd60108054611b0f90613933565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b90613933565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b5050505050611ba2600186611b9d9190613751565b6122ef565b6040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250612450565b61247f565b600d6000815480929190611bf590613996565b9190505550508080611c0690613996565b915050611ad1565b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d6683610e80565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611db782611c7f565b611df6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ded906134b5565b60405180910390fd5b6000611e0183610e80565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e7057508373ffffffffffffffffffffffffffffffffffffffff16611e5884610918565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e815750611e8081856118b9565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611eaa82610e80565b73ffffffffffffffffffffffffffffffffffffffff1614611f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef790613435565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6790613475565b60405180910390fd5b611f7b83838361277a565b611f86600082611cf3565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fd69190613832565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461202d9190613751565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46120ec83838361277f565b505050565b600081600001549050919050565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90613555565b60405180910390fd5b61218e81611c7f565b156121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c590613455565b60405180910390fd5b6121da6000838361277a565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461222a9190613751565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122eb6000838361277f565b5050565b60606000821415612337576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061244b565b600082905060005b6000821461236957808061235290613996565b915050600a8261236291906137a7565b915061233f565b60008167ffffffffffffffff81111561238557612384613acc565b5b6040519080825280601f01601f1916602001820160405280156123b75781602001600182028036833780820191505090505b5090505b60008514612444576001826123d09190613832565b9150600a856123df91906139df565b60306123eb9190613751565b60f81b81838151811061240157612400613a9d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561243d91906137a7565b94506123bb565b8093505050505b919050565b6060838383604051602001612467939291906132fb565b60405160208183030381529060405290509392505050565b61248882611c7f565b6124c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124be90613535565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906124ee92919061293e565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612562576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255990613495565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516126539190613393565b60405180910390a3505050565b61266b848484611e8a565b61267784848484612784565b6126b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ad90613415565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606126de82611c7f565b61271d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612714906135b5565b60405180910390fd5b60006127276126bc565b905060008151116127475760405180602001604052806000815250612772565b80612751846122ef565b6040516020016127629291906132d7565b6040516020818303038152906040525b915050919050565b505050565b505050565b60006127a58473ffffffffffffffffffffffffffffffffffffffff1661291b565b1561290e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026127ce611ceb565b8786866040518563ffffffff1660e01b81526004016127f09493929190613347565b602060405180830381600087803b15801561280a57600080fd5b505af192505050801561283b57506040513d601f19601f820116820180604052508101906128389190612eaa565b60015b6128be573d806000811461286b576040519150601f19603f3d011682016040523d82523d6000602084013e612870565b606091505b506000815114156128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad90613415565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612913565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461294a90613933565b90600052602060002090601f01602090048101928261296c57600085556129b3565b82601f1061298557805160ff19168380011785556129b3565b828001600101855582156129b3579182015b828111156129b2578251825591602001919060010190612997565b5b5090506129c091906129c4565b5090565b5b808211156129dd5760008160009055506001016129c5565b5090565b60006129f46129ef846136ac565b613687565b905082815260208101848484011115612a1057612a0f613b00565b5b612a1b8482856138f1565b509392505050565b6000612a36612a31846136dd565b613687565b905082815260208101848484011115612a5257612a51613b00565b5b612a5d8482856138f1565b509392505050565b600081359050612a7481613fc7565b92915050565b600081359050612a8981613fde565b92915050565b600081359050612a9e81613ff5565b92915050565b600081359050612ab38161400c565b92915050565b600081519050612ac88161400c565b92915050565b600082601f830112612ae357612ae2613afb565b5b8135612af38482602086016129e1565b91505092915050565b600082601f830112612b1157612b10613afb565b5b8135612b21848260208601612a23565b91505092915050565b600081359050612b3981614023565b92915050565b600060208284031215612b5557612b54613b0a565b5b6000612b6384828501612a65565b91505092915050565b60008060408385031215612b8357612b82613b0a565b5b6000612b9185828601612a65565b9250506020612ba285828601612a65565b9150509250929050565b600080600060608486031215612bc557612bc4613b0a565b5b6000612bd386828701612a65565b9350506020612be486828701612a65565b9250506040612bf586828701612b2a565b9150509250925092565b60008060008060808587031215612c1957612c18613b0a565b5b6000612c2787828801612a65565b9450506020612c3887828801612a65565b9350506040612c4987828801612b2a565b925050606085013567ffffffffffffffff811115612c6a57612c69613b05565b5b612c7687828801612ace565b91505092959194509250565b60008060408385031215612c9957612c98613b0a565b5b6000612ca785828601612a65565b9250506020612cb885828601612a7a565b9150509250929050565b600080600060608486031215612cdb57612cda613b0a565b5b6000612ce986828701612a65565b9350506020612cfa86828701612a8f565b925050604084013567ffffffffffffffff811115612d1b57612d1a613b05565b5b612d2786828701612ace565b9150509250925092565b60008060408385031215612d4857612d47613b0a565b5b6000612d5685828601612a65565b9250506020612d6785828601612b2a565b9150509250929050565b60008060008060808587031215612d8b57612d8a613b0a565b5b6000612d9987828801612a65565b9450506020612daa87828801612b2a565b9350506040612dbb87828801612a8f565b925050606085013567ffffffffffffffff811115612ddc57612ddb613b05565b5b612de887828801612ace565b91505092959194509250565b600060208284031215612e0a57612e09613b0a565b5b6000612e1884828501612a7a565b91505092915050565b60008060408385031215612e3857612e37613b0a565b5b6000612e4685828601612a8f565b925050602083013567ffffffffffffffff811115612e6757612e66613b05565b5b612e7385828601612ace565b9150509250929050565b600060208284031215612e9357612e92613b0a565b5b6000612ea184828501612aa4565b91505092915050565b600060208284031215612ec057612ebf613b0a565b5b6000612ece84828501612ab9565b91505092915050565b600060208284031215612eed57612eec613b0a565b5b600082013567ffffffffffffffff811115612f0b57612f0a613b05565b5b612f1784828501612ace565b91505092915050565b600060208284031215612f3657612f35613b0a565b5b600082013567ffffffffffffffff811115612f5457612f53613b05565b5b612f6084828501612afc565b91505092915050565b600060208284031215612f7f57612f7e613b0a565b5b6000612f8d84828501612b2a565b91505092915050565b612f9f81613866565b82525050565b612fae81613878565b82525050565b612fbd81613884565b82525050565b6000612fce8261370e565b612fd88185613724565b9350612fe8818560208601613900565b612ff181613b0f565b840191505092915050565b600061300782613719565b6130118185613735565b9350613021818560208601613900565b61302a81613b0f565b840191505092915050565b600061304082613719565b61304a8185613746565b935061305a818560208601613900565b80840191505092915050565b6000613073603283613735565b915061307e82613b20565b604082019050919050565b6000613096602583613735565b91506130a182613b6f565b604082019050919050565b60006130b9601c83613735565b91506130c482613bbe565b602082019050919050565b60006130dc602483613735565b91506130e782613be7565b604082019050919050565b60006130ff601983613735565b915061310a82613c36565b602082019050919050565b6000613122602c83613735565b915061312d82613c5f565b604082019050919050565b6000613145603883613735565b915061315082613cae565b604082019050919050565b6000613168602a83613735565b915061317382613cfd565b604082019050919050565b600061318b602983613735565b915061319682613d4c565b604082019050919050565b60006131ae602e83613735565b91506131b982613d9b565b604082019050919050565b60006131d1602083613735565b91506131dc82613dea565b602082019050919050565b60006131f4603183613735565b91506131ff82613e13565b604082019050919050565b6000613217602c83613735565b915061322282613e62565b604082019050919050565b600061323a602f83613735565b915061324582613eb1565b604082019050919050565b600061325d602183613735565b915061326882613f00565b604082019050919050565b6000613280600a83613735565b915061328b82613f4f565b602082019050919050565b60006132a3603183613735565b91506132ae82613f78565b604082019050919050565b6132c2816138da565b82525050565b6132d1816138e4565b82525050565b60006132e38285613035565b91506132ef8284613035565b91508190509392505050565b60006133078286613035565b91506133138285613035565b915061331f8284613035565b9150819050949350505050565b60006020820190506133416000830184612f96565b92915050565b600060808201905061335c6000830187612f96565b6133696020830186612f96565b61337660408301856132b9565b81810360608301526133888184612fc3565b905095945050505050565b60006020820190506133a86000830184612fa5565b92915050565b60006080820190506133c36000830187612fb4565b6133d060208301866132c8565b6133dd6040830185612fb4565b6133ea6060830184612fb4565b95945050505050565b6000602082019050818103600083015261340d8184612ffc565b905092915050565b6000602082019050818103600083015261342e81613066565b9050919050565b6000602082019050818103600083015261344e81613089565b9050919050565b6000602082019050818103600083015261346e816130ac565b9050919050565b6000602082019050818103600083015261348e816130cf565b9050919050565b600060208201905081810360008301526134ae816130f2565b9050919050565b600060208201905081810360008301526134ce81613115565b9050919050565b600060208201905081810360008301526134ee81613138565b9050919050565b6000602082019050818103600083015261350e8161315b565b9050919050565b6000602082019050818103600083015261352e8161317e565b9050919050565b6000602082019050818103600083015261354e816131a1565b9050919050565b6000602082019050818103600083015261356e816131c4565b9050919050565b6000602082019050818103600083015261358e816131e7565b9050919050565b600060208201905081810360008301526135ae8161320a565b9050919050565b600060208201905081810360008301526135ce8161322d565b9050919050565b600060208201905081810360008301526135ee81613250565b9050919050565b6000602082019050818103600083015261360e81613273565b9050919050565b6000602082019050818103600083015261362e81613296565b9050919050565b600060208201905061364a60008301846132b9565b92915050565b600060608201905061366560008301866132c8565b6136726020830185612fb4565b61367f6040830184612fb4565b949350505050565b60006136916136a2565b905061369d8282613965565b919050565b6000604051905090565b600067ffffffffffffffff8211156136c7576136c6613acc565b5b6136d082613b0f565b9050602081019050919050565b600067ffffffffffffffff8211156136f8576136f7613acc565b5b61370182613b0f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061375c826138da565b9150613767836138da565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561379c5761379b613a10565b5b828201905092915050565b60006137b2826138da565b91506137bd836138da565b9250826137cd576137cc613a3f565b5b828204905092915050565b60006137e3826138da565b91506137ee836138da565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561382757613826613a10565b5b828202905092915050565b600061383d826138da565b9150613848836138da565b92508282101561385b5761385a613a10565b5b828203905092915050565b6000613871826138ba565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561391e578082015181840152602081019050613903565b8381111561392d576000848401525b50505050565b6000600282049050600182168061394b57607f821691505b6020821081141561395f5761395e613a6e565b5b50919050565b61396e82613b0f565b810181811067ffffffffffffffff8211171561398d5761398c613acc565b5b80604052505050565b60006139a1826138da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d4576139d3613a10565b5b600182019050919050565b60006139ea826138da565b91506139f5836138da565b925082613a0557613a04613a3f565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f45524337323155524953746f726167653a2055524920717565727920666f722060008201527f6e6f6e6578697374656e7420746f6b656e000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f41444d494e5f4f4e4c5900000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613fd081613866565b8114613fdb57600080fd5b50565b613fe781613878565b8114613ff257600080fd5b50565b613ffe81613884565b811461400957600080fd5b50565b6140158161388e565b811461402057600080fd5b50565b61402c816138da565b811461403757600080fd5b5056fea2646970667358221220313461f846a7cd7cc16443970286a08c335003ce2a26cb9aeae721313ffd466164736f6c63430008070033

Deployed Bytecode Sourcemap

38257:4707:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23079:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25583:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25106:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26333:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38525:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38452;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39350:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26743:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38598:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38740:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40102:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38850:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23718:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23448:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38775:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42051:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38380:65;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38675:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24193:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42152:265;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25876:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41915:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42421:540;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;26999:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38811:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36704:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39461:629;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41421:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26102:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41284:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40615:661;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23079:305;23181:4;23233:25;23218:40;;;:11;:40;;;;:105;;;;23290:33;23275:48;;;:11;:48;;;;23218:105;:158;;;;23340:36;23364:11;23340:23;:36::i;:::-;23218:158;23198:178;;23079:305;;;:::o;24024:100::-;24078:13;24111:5;24104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24024:100;:::o;25583:221::-;25659:7;25687:16;25695:7;25687;:16::i;:::-;25679:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25772:15;:24;25788:7;25772:24;;;;;;;;;;;;;;;;;;;;;25765:31;;25583:221;;;:::o;25106:411::-;25187:13;25203:23;25218:7;25203:14;:23::i;:::-;25187:39;;25251:5;25245:11;;:2;:11;;;;25237:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25345:5;25329:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25354:37;25371:5;25378:12;:10;:12::i;:::-;25354:16;:37::i;:::-;25329:62;25307:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25488:21;25497:2;25501:7;25488:8;:21::i;:::-;25176:341;25106:411;;:::o;26333:339::-;26528:41;26547:12;:10;:12::i;:::-;26561:7;26528:18;:41::i;:::-;26520:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26636:28;26646:4;26652:2;26656:7;26636:9;:28::i;:::-;26333:339;;;:::o;38525:66::-;;;;;;;;;;;;;:::o;38452:::-;;;;;;;;;;;;;:::o;39350:101::-;39096:5;;;;;;;;;;;39082:19;;:10;:19;;;39074:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;39435:8:::1;39425:7;:18;;;;;;;;;;;;:::i;:::-;;39350:101:::0;:::o;26743:185::-;26881:39;26898:4;26904:2;26908:7;26881:39;;;;;;;;;;;;:16;:39::i;:::-;26743:185;;;:::o;38598:70::-;;;;;;;;;;;;;:::o;38740:28::-;;;;:::o;40102:499::-;40239:12;;;;;;;;;;;40211:40;;:26;40225:7;40233:3;40211:13;:26::i;:::-;:40;;;40203:49;;;;;;40282:7;;40271:9;;:18;;40263:27;;;;;;40305:17;40325:19;:9;:17;:19::i;:::-;40305:39;;40359:21;:9;:19;:21::i;:::-;40395:24;40401:6;40409:9;40395:5;:24::i;:::-;40434:131;40465:9;40493:57;40500:7;40493:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40509:31;40538:1;40526:9;:13;;;;:::i;:::-;40509:16;:31::i;:::-;40493:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;40434:12;:131::i;:::-;40580:9;;:11;;;;;;;;;:::i;:::-;;;;;;40192:409;40102:499;;;:::o;38850:74::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23718:239::-;23790:7;23810:13;23826:7;:16;23834:7;23826:16;;;;;;;;;;;;;;;;;;;;;23810:32;;23878:1;23861:19;;:5;:19;;;;23853:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23944:5;23937:12;;;23718:239;;;:::o;23448:208::-;23520:7;23565:1;23548:19;;:5;:19;;;;23540:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23632:9;:16;23642:5;23632:16;;;;;;;;;;;;;;;;23625:23;;23448:208;;;:::o;38775:29::-;;;;:::o;42051:92::-;39096:5;;;;;;;;;;;39082:19;;:10;:19;;;39074:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42132:3:::1;42117:14;;:18;;;;;;;;;;;;;;;;;;42051:92:::0;:::o;38380:65::-;;;;;;;;;;;;;:::o;38675:46::-;;;;:::o;24193:104::-;24249:13;24282:7;24275:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24193:104;:::o;42152:265::-;42255:7;42279;42296:9;42315;42348:19;42363:3;42348:14;:19::i;:::-;42336:31;;;;;;;;;;;;42384:27;42394:7;42403:1;42406;42409;42384:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42377:34;;;;;42152:265;;;;:::o;25876:155::-;25971:52;25990:12;:10;:12::i;:::-;26004:8;26014;25971:18;:52::i;:::-;25876:155;;:::o;41915:126::-;39096:5;;;;;;;;;;;39082:19;;:10;:19;;;39074:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;42006:1:::1;41989:19;;:5;:19;;;;41981:28;;;::::0;::::1;;42028:5;42020;;:13;;;;;;;;;;;;;;;;;;41915:126:::0;:::o;42421:540::-;42508:5;42515:7;42524;42569:2;42555:3;:10;:16;42547:25;;;;;;42584:9;42603;42622:7;42739:2;42734:3;42730:12;42724:19;42719:24;;42807:2;42802:3;42798:12;42792:19;42787:24;;42912:2;42907:3;42903:12;42897:19;42894:1;42889:28;42884:33;;42946:1;42949;42952;42938:16;;;;;;;;;42421:540;;;;;:::o;26999:328::-;27174:41;27193:12;:10;:12::i;:::-;27207:7;27174:18;:41::i;:::-;27166:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27280:39;27294:4;27300:2;27304:7;27313:5;27280:13;:39::i;:::-;26999:328;;;;:::o;38811:32::-;;;;;;;;;;;;;:::o;36704:679::-;36777:13;36811:16;36819:7;36811;:16::i;:::-;36803:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36894:23;36920:10;:19;36931:7;36920:19;;;;;;;;;;;36894:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36950:18;36971:10;:8;:10::i;:::-;36950:31;;37079:1;37063:4;37057:18;:23;37053:72;;;37104:9;37097:16;;;;;;37053:72;37255:1;37235:9;37229:23;:27;37225:108;;;37304:4;37310:9;37287:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37273:48;;;;;;37225:108;37352:23;37367:7;37352:14;:23::i;:::-;37345:30;;;;36704:679;;;;:::o;39461:629::-;39608:11;;39597:10;:22;;;;:::i;:::-;39586:9;:33;;39578:42;;;;;;39667:8;;;;;;;;;;;39639:36;;:26;39653:7;39661:3;39639:13;:26::i;:::-;:36;;;39631:45;;;;;;39706:7;;39695:9;;:18;;39687:27;;;;;;39732:9;39727:354;39751:10;39747:1;:14;39727:354;;;39783:17;39803:19;:9;:17;:19::i;:::-;39783:39;;39837:21;:9;:19;:21::i;:::-;39873:24;39879:6;39887:9;39873:5;:24::i;:::-;39912:131;39943:9;39971:57;39978:7;39971:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39987:31;40016:1;40004:9;:13;;;;:::i;:::-;39987:16;:31::i;:::-;39971:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;39912:12;:131::i;:::-;40058:9;;:11;;;;;;;;;:::i;:::-;;;;;;39768:313;39763:3;;;;;:::i;:::-;;;;39727:354;;;;39461:629;;;;:::o;41421:484::-;39096:5;;;;;;;;;;;39082:19;;:10;:19;;;39074:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41526:3:::1;41515:9;;:14;;41507:23;;;::::0;::::1;;41549:9;41544:354;41568:10;41564:1;:14;41544:354;;;41600:17;41620:19;:9;:17;:19::i;:::-;41600:39;;41654:21;:9;:19;:21::i;:::-;41690:24;41696:6;41704:9;41690:5;:24::i;:::-;41729:131;41760:9;41788:57;41795:7;41788:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41804:31;41833:1;41821:9;:13;;;;:::i;:::-;41804:16;:31::i;:::-;41788:57;;;;;;;;;;;;;;;;::::0;:6:::1;:57::i;:::-;41729:12;:131::i;:::-;41875:9;;:11;;;;;;;;;:::i;:::-;;;;;;41585:313;41580:3;;;;;:::i;:::-;;;;41544:354;;;;41421:484:::0;;:::o;26102:164::-;26199:4;26223:18;:25;26242:5;26223:25;;;;;;;;;;;;;;;:35;26249:8;26223:35;;;;;;;;;;;;;;;;;;;;;;;;;26216:42;;26102:164;;;;:::o;41284:128::-;39096:5;;;;;;;;;;;39082:19;;:10;:19;;;39074:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;41368:10:::1;41360:28;;:44;41389:14;41360:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41284:128:::0;:::o;40615:661::-;40762:11;;40751:10;:22;;;;:::i;:::-;40740:9;:33;;40732:42;;;;;;40821:8;;;;;;;;;;;40793:36;;:26;40807:7;40815:3;40793:13;:26::i;:::-;:36;;;40785:45;;;;;;40860:7;;40849:9;;:18;;40841:27;;;;;;40887:14;;;;;;;;;;;40879:23;;;;;;40918:9;40913:354;40937:10;40933:1;:14;40913:354;;;40969:17;40989:19;:9;:17;:19::i;:::-;40969:39;;41023:21;:9;:19;:21::i;:::-;41059:24;41065:6;41073:9;41059:5;:24::i;:::-;41098:131;41129:9;41157:57;41164:7;41157:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41173:31;41202:1;41190:9;:13;;;;:::i;:::-;41173:16;:31::i;:::-;41157:57;;;;;;;;;;;;;;;;;:6;:57::i;:::-;41098:12;:131::i;:::-;41244:9;;:11;;;;;;;;;:::i;:::-;;;;;;40954:313;40949:3;;;;;:::i;:::-;;;;40913:354;;;;40615:661;;;;:::o;15833:157::-;15918:4;15957:25;15942:40;;;:11;:40;;;;15935:47;;15833:157;;;:::o;28837:127::-;28902:4;28954:1;28926:30;;:7;:16;28934:7;28926:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28919:37;;28837:127;;;:::o;4303:98::-;4356:7;4383:10;4376:17;;4303:98;:::o;32983:174::-;33085:2;33058:15;:24;33074:7;33058:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33141:7;33137:2;33103:46;;33112:23;33127:7;33112:14;:23::i;:::-;33103:46;;;;;;;;;;;;32983:174;;:::o;29131:348::-;29224:4;29249:16;29257:7;29249;:16::i;:::-;29241:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29325:13;29341:23;29356:7;29341:14;:23::i;:::-;29325:39;;29394:5;29383:16;;:7;:16;;;:51;;;;29427:7;29403:31;;:20;29415:7;29403:11;:20::i;:::-;:31;;;29383:51;:87;;;;29438:32;29455:5;29462:7;29438:16;:32::i;:::-;29383:87;29375:96;;;29131:348;;;;:::o;32240:625::-;32399:4;32372:31;;:23;32387:7;32372:14;:23::i;:::-;:31;;;32364:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32478:1;32464:16;;:2;:16;;;;32456:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32534:39;32555:4;32561:2;32565:7;32534:20;:39::i;:::-;32638:29;32655:1;32659:7;32638:8;:29::i;:::-;32699:1;32680:9;:15;32690:4;32680:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32728:1;32711:9;:13;32721:2;32711:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32759:2;32740:7;:16;32748:7;32740:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32798:7;32794:2;32779:27;;32788:4;32779:27;;;;;;;;;;;;32819:38;32839:4;32845:2;32849:7;32819:19;:38::i;:::-;32240:625;;;:::o;907:114::-;972:7;999;:14;;;992:21;;907:114;;;:::o;1029:127::-;1136:1;1118:7;:14;;;:19;;;;;;;;;;;1029:127;:::o;30815:439::-;30909:1;30895:16;;:2;:16;;;;30887:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30968:16;30976:7;30968;:16::i;:::-;30967:17;30959:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31030:45;31059:1;31063:2;31067:7;31030:20;:45::i;:::-;31105:1;31088:9;:13;31098:2;31088:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31136:2;31117:7;:16;31125:7;31117:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31181:7;31177:2;31156:33;;31173:1;31156:33;;;;;;;;;;;;31202:44;31230:1;31234:2;31238:7;31202:19;:44::i;:::-;30815:439;;:::o;1865:723::-;1921:13;2151:1;2142:5;:10;2138:53;;;2169:10;;;;;;;;;;;;;;;;;;;;;2138:53;2201:12;2216:5;2201:20;;2232:14;2257:78;2272:1;2264:4;:9;2257:78;;2290:8;;;;;:::i;:::-;;;;2321:2;2313:10;;;;;:::i;:::-;;;2257:78;;;2345:19;2377:6;2367:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:39;;2395:154;2411:1;2402:5;:10;2395:154;;2439:1;2429:11;;;;;:::i;:::-;;;2506:2;2498:5;:10;;;;:::i;:::-;2485:2;:24;;;;:::i;:::-;2472:39;;2455:6;2462;2455:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2535:2;2526:11;;;;;:::i;:::-;;;2395:154;;;2573:6;2559:21;;;;;1865:723;;;;:::o;39144:198::-;39268:13;39325:1;39328;39331;39308:25;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;39294:40;;39144:198;;;;;:::o;37539:217::-;37639:16;37647:7;37639;:16::i;:::-;37631:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;37739:9;37717:10;:19;37728:7;37717:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;37539:217;;:::o;33299:315::-;33454:8;33445:17;;:5;:17;;;;33437:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;33541:8;33503:18;:25;33522:5;33503:25;;;;;;;;;;;;;;;:35;33529:8;33503:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33587:8;33565:41;;33580:5;33565:41;;;33597:8;33565:41;;;;;;:::i;:::-;;;;;;;;33299:315;;;:::o;28209:::-;28366:28;28376:4;28382:2;28386:7;28366:9;:28::i;:::-;28413:48;28436:4;28442:2;28446:7;28455:5;28413:22;:48::i;:::-;28405:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28209:315;;;;:::o;24950:94::-;25001:13;25027:9;;;;;;;;;;;;;;24950:94;:::o;24368:334::-;24441:13;24475:16;24483:7;24475;:16::i;:::-;24467:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24556:21;24580:10;:8;:10::i;:::-;24556:34;;24632:1;24614:7;24608:21;:25;:86;;;;;;;;;;;;;;;;;24660:7;24669:18;:7;:16;:18::i;:::-;24643:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24608:86;24601:93;;;24368:334;;;:::o;35550:126::-;;;;:::o;36061:125::-;;;;:::o;34179:799::-;34334:4;34355:15;:2;:13;;;:15::i;:::-;34351:620;;;34407:2;34391:36;;;34428:12;:10;:12::i;:::-;34442:4;34448:7;34457:5;34391:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34387:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34650:1;34633:6;:13;:18;34629:272;;;34676:60;;;;;;;;;;:::i;:::-;;;;;;;;34629:272;34851:6;34845:13;34836:6;34832:2;34828:15;34821:38;34387:529;34524:41;;;34514:51;;;:6;:51;;;;34507:58;;;;;34351:620;34955:4;34948:11;;34179:799;;;;;;;:::o;5750:326::-;5810:4;6067:1;6045:7;:19;;;:23;6038:30;;5750:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:139::-;1171:5;1209:6;1196:20;1187:29;;1225:33;1252:5;1225:33;:::i;:::-;1125:139;;;;:::o;1270:137::-;1315:5;1353:6;1340:20;1331:29;;1369:32;1395:5;1369:32;:::i;:::-;1270:137;;;;:::o;1413:141::-;1469:5;1500:6;1494:13;1485:22;;1516:32;1542:5;1516:32;:::i;:::-;1413:141;;;;:::o;1573:338::-;1628:5;1677:3;1670:4;1662:6;1658:17;1654:27;1644:122;;1685:79;;:::i;:::-;1644:122;1802:6;1789:20;1827:78;1901:3;1893:6;1886:4;1878:6;1874:17;1827:78;:::i;:::-;1818:87;;1634:277;1573:338;;;;:::o;1931:340::-;1987:5;2036:3;2029:4;2021:6;2017:17;2013:27;2003:122;;2044:79;;:::i;:::-;2003:122;2161:6;2148:20;2186:79;2261:3;2253:6;2246:4;2238:6;2234:17;2186:79;:::i;:::-;2177:88;;1993:278;1931:340;;;;:::o;2277:139::-;2323:5;2361:6;2348:20;2339:29;;2377:33;2404:5;2377:33;:::i;:::-;2277:139;;;;:::o;2422:329::-;2481:6;2530:2;2518:9;2509:7;2505:23;2501:32;2498:119;;;2536:79;;:::i;:::-;2498:119;2656:1;2681:53;2726:7;2717:6;2706:9;2702:22;2681:53;:::i;:::-;2671:63;;2627:117;2422:329;;;;:::o;2757:474::-;2825:6;2833;2882:2;2870:9;2861:7;2857:23;2853:32;2850:119;;;2888:79;;:::i;:::-;2850:119;3008:1;3033:53;3078:7;3069:6;3058:9;3054:22;3033:53;:::i;:::-;3023:63;;2979:117;3135:2;3161:53;3206:7;3197:6;3186:9;3182:22;3161:53;:::i;:::-;3151:63;;3106:118;2757:474;;;;;:::o;3237:619::-;3314:6;3322;3330;3379:2;3367:9;3358:7;3354:23;3350:32;3347:119;;;3385:79;;:::i;:::-;3347:119;3505:1;3530:53;3575:7;3566:6;3555:9;3551:22;3530:53;:::i;:::-;3520:63;;3476:117;3632:2;3658:53;3703:7;3694:6;3683:9;3679:22;3658:53;:::i;:::-;3648:63;;3603:118;3760:2;3786:53;3831:7;3822:6;3811:9;3807:22;3786:53;:::i;:::-;3776:63;;3731:118;3237:619;;;;;:::o;3862:943::-;3957:6;3965;3973;3981;4030:3;4018:9;4009:7;4005:23;4001:33;3998:120;;;4037:79;;:::i;:::-;3998:120;4157:1;4182:53;4227:7;4218:6;4207:9;4203:22;4182:53;:::i;:::-;4172:63;;4128:117;4284:2;4310:53;4355:7;4346:6;4335:9;4331:22;4310:53;:::i;:::-;4300:63;;4255:118;4412:2;4438:53;4483:7;4474:6;4463:9;4459:22;4438:53;:::i;:::-;4428:63;;4383:118;4568:2;4557:9;4553:18;4540:32;4599:18;4591:6;4588:30;4585:117;;;4621:79;;:::i;:::-;4585:117;4726:62;4780:7;4771:6;4760:9;4756:22;4726:62;:::i;:::-;4716:72;;4511:287;3862:943;;;;;;;:::o;4811:468::-;4876:6;4884;4933:2;4921:9;4912:7;4908:23;4904:32;4901:119;;;4939:79;;:::i;:::-;4901:119;5059:1;5084:53;5129:7;5120:6;5109:9;5105:22;5084:53;:::i;:::-;5074:63;;5030:117;5186:2;5212:50;5254:7;5245:6;5234:9;5230:22;5212:50;:::i;:::-;5202:60;;5157:115;4811:468;;;;;:::o;5285:797::-;5371:6;5379;5387;5436:2;5424:9;5415:7;5411:23;5407:32;5404:119;;;5442:79;;:::i;:::-;5404:119;5562:1;5587:53;5632:7;5623:6;5612:9;5608:22;5587:53;:::i;:::-;5577:63;;5533:117;5689:2;5715:53;5760:7;5751:6;5740:9;5736:22;5715:53;:::i;:::-;5705:63;;5660:118;5845:2;5834:9;5830:18;5817:32;5876:18;5868:6;5865:30;5862:117;;;5898:79;;:::i;:::-;5862:117;6003:62;6057:7;6048:6;6037:9;6033:22;6003:62;:::i;:::-;5993:72;;5788:287;5285:797;;;;;:::o;6088:474::-;6156:6;6164;6213:2;6201:9;6192:7;6188:23;6184:32;6181:119;;;6219:79;;:::i;:::-;6181:119;6339:1;6364:53;6409:7;6400:6;6389:9;6385:22;6364:53;:::i;:::-;6354:63;;6310:117;6466:2;6492:53;6537:7;6528:6;6517:9;6513:22;6492:53;:::i;:::-;6482:63;;6437:118;6088:474;;;;;:::o;6568:943::-;6663:6;6671;6679;6687;6736:3;6724:9;6715:7;6711:23;6707:33;6704:120;;;6743:79;;:::i;:::-;6704:120;6863:1;6888:53;6933:7;6924:6;6913:9;6909:22;6888:53;:::i;:::-;6878:63;;6834:117;6990:2;7016:53;7061:7;7052:6;7041:9;7037:22;7016:53;:::i;:::-;7006:63;;6961:118;7118:2;7144:53;7189:7;7180:6;7169:9;7165:22;7144:53;:::i;:::-;7134:63;;7089:118;7274:2;7263:9;7259:18;7246:32;7305:18;7297:6;7294:30;7291:117;;;7327:79;;:::i;:::-;7291:117;7432:62;7486:7;7477:6;7466:9;7462:22;7432:62;:::i;:::-;7422:72;;7217:287;6568:943;;;;;;;:::o;7517:323::-;7573:6;7622:2;7610:9;7601:7;7597:23;7593:32;7590:119;;;7628:79;;:::i;:::-;7590:119;7748:1;7773:50;7815:7;7806:6;7795:9;7791:22;7773:50;:::i;:::-;7763:60;;7719:114;7517:323;;;;:::o;7846:652::-;7923:6;7931;7980:2;7968:9;7959:7;7955:23;7951:32;7948:119;;;7986:79;;:::i;:::-;7948:119;8106:1;8131:53;8176:7;8167:6;8156:9;8152:22;8131:53;:::i;:::-;8121:63;;8077:117;8261:2;8250:9;8246:18;8233:32;8292:18;8284:6;8281:30;8278:117;;;8314:79;;:::i;:::-;8278:117;8419:62;8473:7;8464:6;8453:9;8449:22;8419:62;:::i;:::-;8409:72;;8204:287;7846:652;;;;;:::o;8504:327::-;8562:6;8611:2;8599:9;8590:7;8586:23;8582:32;8579:119;;;8617:79;;:::i;:::-;8579:119;8737:1;8762:52;8806:7;8797:6;8786:9;8782:22;8762:52;:::i;:::-;8752:62;;8708:116;8504:327;;;;:::o;8837:349::-;8906:6;8955:2;8943:9;8934:7;8930:23;8926:32;8923:119;;;8961:79;;:::i;:::-;8923:119;9081:1;9106:63;9161:7;9152:6;9141:9;9137:22;9106:63;:::i;:::-;9096:73;;9052:127;8837:349;;;;:::o;9192:507::-;9260:6;9309:2;9297:9;9288:7;9284:23;9280:32;9277:119;;;9315:79;;:::i;:::-;9277:119;9463:1;9452:9;9448:17;9435:31;9493:18;9485:6;9482:30;9479:117;;;9515:79;;:::i;:::-;9479:117;9620:62;9674:7;9665:6;9654:9;9650:22;9620:62;:::i;:::-;9610:72;;9406:286;9192:507;;;;:::o;9705:509::-;9774:6;9823:2;9811:9;9802:7;9798:23;9794:32;9791:119;;;9829:79;;:::i;:::-;9791:119;9977:1;9966:9;9962:17;9949:31;10007:18;9999:6;9996:30;9993:117;;;10029:79;;:::i;:::-;9993:117;10134:63;10189:7;10180:6;10169:9;10165:22;10134:63;:::i;:::-;10124:73;;9920:287;9705:509;;;;:::o;10220:329::-;10279:6;10328:2;10316:9;10307:7;10303:23;10299:32;10296:119;;;10334:79;;:::i;:::-;10296:119;10454:1;10479:53;10524:7;10515:6;10504:9;10500:22;10479:53;:::i;:::-;10469:63;;10425:117;10220:329;;;;:::o;10555:118::-;10642:24;10660:5;10642:24;:::i;:::-;10637:3;10630:37;10555:118;;:::o;10679:109::-;10760:21;10775:5;10760:21;:::i;:::-;10755:3;10748:34;10679:109;;:::o;10794:118::-;10881:24;10899:5;10881:24;:::i;:::-;10876:3;10869:37;10794:118;;:::o;10918:360::-;11004:3;11032:38;11064:5;11032:38;:::i;:::-;11086:70;11149:6;11144:3;11086:70;:::i;:::-;11079:77;;11165:52;11210:6;11205:3;11198:4;11191:5;11187:16;11165:52;:::i;:::-;11242:29;11264:6;11242:29;:::i;:::-;11237:3;11233:39;11226:46;;11008:270;10918:360;;;;:::o;11284:364::-;11372:3;11400:39;11433:5;11400:39;:::i;:::-;11455:71;11519:6;11514:3;11455:71;:::i;:::-;11448:78;;11535:52;11580:6;11575:3;11568:4;11561:5;11557:16;11535:52;:::i;:::-;11612:29;11634:6;11612:29;:::i;:::-;11607:3;11603:39;11596:46;;11376:272;11284:364;;;;:::o;11654:377::-;11760:3;11788:39;11821:5;11788:39;:::i;:::-;11843:89;11925:6;11920:3;11843:89;:::i;:::-;11836:96;;11941:52;11986:6;11981:3;11974:4;11967:5;11963:16;11941:52;:::i;:::-;12018:6;12013:3;12009:16;12002:23;;11764:267;11654:377;;;;:::o;12037:366::-;12179:3;12200:67;12264:2;12259:3;12200:67;:::i;:::-;12193:74;;12276:93;12365:3;12276:93;:::i;:::-;12394:2;12389:3;12385:12;12378:19;;12037:366;;;:::o;12409:::-;12551:3;12572:67;12636:2;12631:3;12572:67;:::i;:::-;12565:74;;12648:93;12737:3;12648:93;:::i;:::-;12766:2;12761:3;12757:12;12750:19;;12409:366;;;:::o;12781:::-;12923:3;12944:67;13008:2;13003:3;12944:67;:::i;:::-;12937:74;;13020:93;13109:3;13020:93;:::i;:::-;13138:2;13133:3;13129:12;13122:19;;12781:366;;;:::o;13153:::-;13295:3;13316:67;13380:2;13375:3;13316:67;:::i;:::-;13309:74;;13392:93;13481:3;13392:93;:::i;:::-;13510:2;13505:3;13501:12;13494:19;;13153:366;;;:::o;13525:::-;13667:3;13688:67;13752:2;13747:3;13688:67;:::i;:::-;13681:74;;13764:93;13853:3;13764:93;:::i;:::-;13882:2;13877:3;13873:12;13866:19;;13525:366;;;:::o;13897:::-;14039:3;14060:67;14124:2;14119:3;14060:67;:::i;:::-;14053:74;;14136:93;14225:3;14136:93;:::i;:::-;14254:2;14249:3;14245:12;14238:19;;13897:366;;;:::o;14269:::-;14411:3;14432:67;14496:2;14491:3;14432:67;:::i;:::-;14425:74;;14508:93;14597:3;14508:93;:::i;:::-;14626:2;14621:3;14617:12;14610:19;;14269:366;;;:::o;14641:::-;14783:3;14804:67;14868:2;14863:3;14804:67;:::i;:::-;14797:74;;14880:93;14969:3;14880:93;:::i;:::-;14998:2;14993:3;14989:12;14982:19;;14641:366;;;:::o;15013:::-;15155:3;15176:67;15240:2;15235:3;15176:67;:::i;:::-;15169:74;;15252:93;15341:3;15252:93;:::i;:::-;15370:2;15365:3;15361:12;15354:19;;15013:366;;;:::o;15385:::-;15527:3;15548:67;15612:2;15607:3;15548:67;:::i;:::-;15541:74;;15624:93;15713:3;15624:93;:::i;:::-;15742:2;15737:3;15733:12;15726:19;;15385:366;;;:::o;15757:::-;15899:3;15920:67;15984:2;15979:3;15920:67;:::i;:::-;15913:74;;15996:93;16085:3;15996:93;:::i;:::-;16114:2;16109:3;16105:12;16098:19;;15757:366;;;:::o;16129:::-;16271:3;16292:67;16356:2;16351:3;16292:67;:::i;:::-;16285:74;;16368:93;16457:3;16368:93;:::i;:::-;16486:2;16481:3;16477:12;16470:19;;16129:366;;;:::o;16501:::-;16643:3;16664:67;16728:2;16723:3;16664:67;:::i;:::-;16657:74;;16740:93;16829:3;16740:93;:::i;:::-;16858:2;16853:3;16849:12;16842:19;;16501:366;;;:::o;16873:::-;17015:3;17036:67;17100:2;17095:3;17036:67;:::i;:::-;17029:74;;17112:93;17201:3;17112:93;:::i;:::-;17230:2;17225:3;17221:12;17214:19;;16873:366;;;:::o;17245:::-;17387:3;17408:67;17472:2;17467:3;17408:67;:::i;:::-;17401:74;;17484:93;17573:3;17484:93;:::i;:::-;17602:2;17597:3;17593:12;17586:19;;17245:366;;;:::o;17617:::-;17759:3;17780:67;17844:2;17839:3;17780:67;:::i;:::-;17773:74;;17856:93;17945:3;17856:93;:::i;:::-;17974:2;17969:3;17965:12;17958:19;;17617:366;;;:::o;17989:::-;18131:3;18152:67;18216:2;18211:3;18152:67;:::i;:::-;18145:74;;18228:93;18317:3;18228:93;:::i;:::-;18346:2;18341:3;18337:12;18330:19;;17989:366;;;:::o;18361:118::-;18448:24;18466:5;18448:24;:::i;:::-;18443:3;18436:37;18361:118;;:::o;18485:112::-;18568:22;18584:5;18568:22;:::i;:::-;18563:3;18556:35;18485:112;;:::o;18603:435::-;18783:3;18805:95;18896:3;18887:6;18805:95;:::i;:::-;18798:102;;18917:95;19008:3;18999:6;18917:95;:::i;:::-;18910:102;;19029:3;19022:10;;18603:435;;;;;:::o;19044:595::-;19272:3;19294:95;19385:3;19376:6;19294:95;:::i;:::-;19287:102;;19406:95;19497:3;19488:6;19406:95;:::i;:::-;19399:102;;19518:95;19609:3;19600:6;19518:95;:::i;:::-;19511:102;;19630:3;19623:10;;19044:595;;;;;;:::o;19645:222::-;19738:4;19776:2;19765:9;19761:18;19753:26;;19789:71;19857:1;19846:9;19842:17;19833:6;19789:71;:::i;:::-;19645:222;;;;:::o;19873:640::-;20068:4;20106:3;20095:9;20091:19;20083:27;;20120:71;20188:1;20177:9;20173:17;20164:6;20120:71;:::i;:::-;20201:72;20269:2;20258:9;20254:18;20245:6;20201:72;:::i;:::-;20283;20351:2;20340:9;20336:18;20327:6;20283:72;:::i;:::-;20402:9;20396:4;20392:20;20387:2;20376:9;20372:18;20365:48;20430:76;20501:4;20492:6;20430:76;:::i;:::-;20422:84;;19873:640;;;;;;;:::o;20519:210::-;20606:4;20644:2;20633:9;20629:18;20621:26;;20657:65;20719:1;20708:9;20704:17;20695:6;20657:65;:::i;:::-;20519:210;;;;:::o;20735:545::-;20908:4;20946:3;20935:9;20931:19;20923:27;;20960:71;21028:1;21017:9;21013:17;21004:6;20960:71;:::i;:::-;21041:68;21105:2;21094:9;21090:18;21081:6;21041:68;:::i;:::-;21119:72;21187:2;21176:9;21172:18;21163:6;21119:72;:::i;:::-;21201;21269:2;21258:9;21254:18;21245:6;21201:72;:::i;:::-;20735:545;;;;;;;:::o;21286:313::-;21399:4;21437:2;21426:9;21422:18;21414:26;;21486:9;21480:4;21476:20;21472:1;21461:9;21457:17;21450:47;21514:78;21587:4;21578:6;21514:78;:::i;:::-;21506:86;;21286:313;;;;:::o;21605:419::-;21771:4;21809:2;21798:9;21794:18;21786:26;;21858:9;21852:4;21848:20;21844:1;21833:9;21829:17;21822:47;21886:131;22012:4;21886:131;:::i;:::-;21878:139;;21605:419;;;:::o;22030:::-;22196:4;22234:2;22223:9;22219:18;22211:26;;22283:9;22277:4;22273:20;22269:1;22258:9;22254:17;22247:47;22311:131;22437:4;22311:131;:::i;:::-;22303:139;;22030:419;;;:::o;22455:::-;22621:4;22659:2;22648:9;22644:18;22636:26;;22708:9;22702:4;22698:20;22694:1;22683:9;22679:17;22672:47;22736:131;22862:4;22736:131;:::i;:::-;22728:139;;22455:419;;;:::o;22880:::-;23046:4;23084:2;23073:9;23069:18;23061:26;;23133:9;23127:4;23123:20;23119:1;23108:9;23104:17;23097:47;23161:131;23287:4;23161:131;:::i;:::-;23153:139;;22880:419;;;:::o;23305:::-;23471:4;23509:2;23498:9;23494:18;23486:26;;23558:9;23552:4;23548:20;23544:1;23533:9;23529:17;23522:47;23586:131;23712:4;23586:131;:::i;:::-;23578:139;;23305:419;;;:::o;23730:::-;23896:4;23934:2;23923:9;23919:18;23911:26;;23983:9;23977:4;23973:20;23969:1;23958:9;23954:17;23947:47;24011:131;24137:4;24011:131;:::i;:::-;24003:139;;23730:419;;;:::o;24155:::-;24321:4;24359:2;24348:9;24344:18;24336:26;;24408:9;24402:4;24398:20;24394:1;24383:9;24379:17;24372:47;24436:131;24562:4;24436:131;:::i;:::-;24428:139;;24155:419;;;:::o;24580:::-;24746:4;24784:2;24773:9;24769:18;24761:26;;24833:9;24827:4;24823:20;24819:1;24808:9;24804:17;24797:47;24861:131;24987:4;24861:131;:::i;:::-;24853:139;;24580:419;;;:::o;25005:::-;25171:4;25209:2;25198:9;25194:18;25186:26;;25258:9;25252:4;25248:20;25244:1;25233:9;25229:17;25222:47;25286:131;25412:4;25286:131;:::i;:::-;25278:139;;25005:419;;;:::o;25430:::-;25596:4;25634:2;25623:9;25619:18;25611:26;;25683:9;25677:4;25673:20;25669:1;25658:9;25654:17;25647:47;25711:131;25837:4;25711:131;:::i;:::-;25703:139;;25430:419;;;:::o;25855:::-;26021:4;26059:2;26048:9;26044:18;26036:26;;26108:9;26102:4;26098:20;26094:1;26083:9;26079:17;26072:47;26136:131;26262:4;26136:131;:::i;:::-;26128:139;;25855:419;;;:::o;26280:::-;26446:4;26484:2;26473:9;26469:18;26461:26;;26533:9;26527:4;26523:20;26519:1;26508:9;26504:17;26497:47;26561:131;26687:4;26561:131;:::i;:::-;26553:139;;26280:419;;;:::o;26705:::-;26871:4;26909:2;26898:9;26894:18;26886:26;;26958:9;26952:4;26948:20;26944:1;26933:9;26929:17;26922:47;26986:131;27112:4;26986:131;:::i;:::-;26978:139;;26705:419;;;:::o;27130:::-;27296:4;27334:2;27323:9;27319:18;27311:26;;27383:9;27377:4;27373:20;27369:1;27358:9;27354:17;27347:47;27411:131;27537:4;27411:131;:::i;:::-;27403:139;;27130:419;;;:::o;27555:::-;27721:4;27759:2;27748:9;27744:18;27736:26;;27808:9;27802:4;27798:20;27794:1;27783:9;27779:17;27772:47;27836:131;27962:4;27836:131;:::i;:::-;27828:139;;27555:419;;;:::o;27980:::-;28146:4;28184:2;28173:9;28169:18;28161:26;;28233:9;28227:4;28223:20;28219:1;28208:9;28204:17;28197:47;28261:131;28387:4;28261:131;:::i;:::-;28253:139;;27980:419;;;:::o;28405:::-;28571:4;28609:2;28598:9;28594:18;28586:26;;28658:9;28652:4;28648:20;28644:1;28633:9;28629:17;28622:47;28686:131;28812:4;28686:131;:::i;:::-;28678:139;;28405:419;;;:::o;28830:222::-;28923:4;28961:2;28950:9;28946:18;28938:26;;28974:71;29042:1;29031:9;29027:17;29018:6;28974:71;:::i;:::-;28830:222;;;;:::o;29058:434::-;29203:4;29241:2;29230:9;29226:18;29218:26;;29254:67;29318:1;29307:9;29303:17;29294:6;29254:67;:::i;:::-;29331:72;29399:2;29388:9;29384:18;29375:6;29331:72;:::i;:::-;29413;29481:2;29470:9;29466:18;29457:6;29413:72;:::i;:::-;29058:434;;;;;;:::o;29498:129::-;29532:6;29559:20;;:::i;:::-;29549:30;;29588:33;29616:4;29608:6;29588:33;:::i;:::-;29498:129;;;:::o;29633:75::-;29666:6;29699:2;29693:9;29683:19;;29633:75;:::o;29714:307::-;29775:4;29865:18;29857:6;29854:30;29851:56;;;29887:18;;:::i;:::-;29851:56;29925:29;29947:6;29925:29;:::i;:::-;29917:37;;30009:4;30003;29999:15;29991:23;;29714:307;;;:::o;30027:308::-;30089:4;30179:18;30171:6;30168:30;30165:56;;;30201:18;;:::i;:::-;30165:56;30239:29;30261:6;30239:29;:::i;:::-;30231:37;;30323:4;30317;30313:15;30305:23;;30027:308;;;:::o;30341:98::-;30392:6;30426:5;30420:12;30410:22;;30341:98;;;:::o;30445:99::-;30497:6;30531:5;30525:12;30515:22;;30445:99;;;:::o;30550:168::-;30633:11;30667:6;30662:3;30655:19;30707:4;30702:3;30698:14;30683:29;;30550:168;;;;:::o;30724:169::-;30808:11;30842:6;30837:3;30830:19;30882:4;30877:3;30873:14;30858:29;;30724:169;;;;:::o;30899:148::-;31001:11;31038:3;31023:18;;30899:148;;;;:::o;31053:305::-;31093:3;31112:20;31130:1;31112:20;:::i;:::-;31107:25;;31146:20;31164:1;31146:20;:::i;:::-;31141:25;;31300:1;31232:66;31228:74;31225:1;31222:81;31219:107;;;31306:18;;:::i;:::-;31219:107;31350:1;31347;31343:9;31336:16;;31053:305;;;;:::o;31364:185::-;31404:1;31421:20;31439:1;31421:20;:::i;:::-;31416:25;;31455:20;31473:1;31455:20;:::i;:::-;31450:25;;31494:1;31484:35;;31499:18;;:::i;:::-;31484:35;31541:1;31538;31534:9;31529:14;;31364:185;;;;:::o;31555:348::-;31595:7;31618:20;31636:1;31618:20;:::i;:::-;31613:25;;31652:20;31670:1;31652:20;:::i;:::-;31647:25;;31840:1;31772:66;31768:74;31765:1;31762:81;31757:1;31750:9;31743:17;31739:105;31736:131;;;31847:18;;:::i;:::-;31736:131;31895:1;31892;31888:9;31877:20;;31555:348;;;;:::o;31909:191::-;31949:4;31969:20;31987:1;31969:20;:::i;:::-;31964:25;;32003:20;32021:1;32003:20;:::i;:::-;31998:25;;32042:1;32039;32036:8;32033:34;;;32047:18;;:::i;:::-;32033:34;32092:1;32089;32085:9;32077:17;;31909:191;;;;:::o;32106:96::-;32143:7;32172:24;32190:5;32172:24;:::i;:::-;32161:35;;32106:96;;;:::o;32208:90::-;32242:7;32285:5;32278:13;32271:21;32260:32;;32208:90;;;:::o;32304:77::-;32341:7;32370:5;32359:16;;32304:77;;;:::o;32387:149::-;32423:7;32463:66;32456:5;32452:78;32441:89;;32387:149;;;:::o;32542:126::-;32579:7;32619:42;32612:5;32608:54;32597:65;;32542:126;;;:::o;32674:77::-;32711:7;32740:5;32729:16;;32674:77;;;:::o;32757:86::-;32792:7;32832:4;32825:5;32821:16;32810:27;;32757:86;;;:::o;32849:154::-;32933:6;32928:3;32923;32910:30;32995:1;32986:6;32981:3;32977:16;32970:27;32849:154;;;:::o;33009:307::-;33077:1;33087:113;33101:6;33098:1;33095:13;33087:113;;;33186:1;33181:3;33177:11;33171:18;33167:1;33162:3;33158:11;33151:39;33123:2;33120:1;33116:10;33111:15;;33087:113;;;33218:6;33215:1;33212:13;33209:101;;;33298:1;33289:6;33284:3;33280:16;33273:27;33209:101;33058:258;33009:307;;;:::o;33322:320::-;33366:6;33403:1;33397:4;33393:12;33383:22;;33450:1;33444:4;33440:12;33471:18;33461:81;;33527:4;33519:6;33515:17;33505:27;;33461:81;33589:2;33581:6;33578:14;33558:18;33555:38;33552:84;;;33608:18;;:::i;:::-;33552:84;33373:269;33322:320;;;:::o;33648:281::-;33731:27;33753:4;33731:27;:::i;:::-;33723:6;33719:40;33861:6;33849:10;33846:22;33825:18;33813:10;33810:34;33807:62;33804:88;;;33872:18;;:::i;:::-;33804:88;33912:10;33908:2;33901:22;33691:238;33648:281;;:::o;33935:233::-;33974:3;33997:24;34015:5;33997:24;:::i;:::-;33988:33;;34043:66;34036:5;34033:77;34030:103;;;34113:18;;:::i;:::-;34030:103;34160:1;34153:5;34149:13;34142:20;;33935:233;;;:::o;34174:176::-;34206:1;34223:20;34241:1;34223:20;:::i;:::-;34218:25;;34257:20;34275:1;34257:20;:::i;:::-;34252:25;;34296:1;34286:35;;34301:18;;:::i;:::-;34286:35;34342:1;34339;34335:9;34330:14;;34174:176;;;;:::o;34356:180::-;34404:77;34401:1;34394:88;34501:4;34498:1;34491:15;34525:4;34522:1;34515:15;34542:180;34590:77;34587:1;34580:88;34687:4;34684:1;34677:15;34711:4;34708:1;34701:15;34728:180;34776:77;34773:1;34766:88;34873:4;34870:1;34863:15;34897:4;34894:1;34887:15;34914:180;34962:77;34959:1;34952:88;35059:4;35056:1;35049:15;35083:4;35080:1;35073:15;35100:180;35148:77;35145:1;35138:88;35245:4;35242:1;35235:15;35269:4;35266:1;35259:15;35286:117;35395:1;35392;35385:12;35409:117;35518:1;35515;35508:12;35532:117;35641:1;35638;35631:12;35655:117;35764:1;35761;35754:12;35778:102;35819:6;35870:2;35866:7;35861:2;35854:5;35850:14;35846:28;35836:38;;35778:102;;;:::o;35886:237::-;36026:34;36022:1;36014:6;36010:14;36003:58;36095:20;36090:2;36082:6;36078:15;36071:45;35886:237;:::o;36129:224::-;36269:34;36265:1;36257:6;36253:14;36246:58;36338:7;36333:2;36325:6;36321:15;36314:32;36129:224;:::o;36359:178::-;36499:30;36495:1;36487:6;36483:14;36476:54;36359:178;:::o;36543:223::-;36683:34;36679:1;36671:6;36667:14;36660:58;36752:6;36747:2;36739:6;36735:15;36728:31;36543:223;:::o;36772:175::-;36912:27;36908:1;36900:6;36896:14;36889:51;36772:175;:::o;36953:231::-;37093:34;37089:1;37081:6;37077:14;37070:58;37162:14;37157:2;37149:6;37145:15;37138:39;36953:231;:::o;37190:243::-;37330:34;37326:1;37318:6;37314:14;37307:58;37399:26;37394:2;37386:6;37382:15;37375:51;37190:243;:::o;37439:229::-;37579:34;37575:1;37567:6;37563:14;37556:58;37648:12;37643:2;37635:6;37631:15;37624:37;37439:229;:::o;37674:228::-;37814:34;37810:1;37802:6;37798:14;37791:58;37883:11;37878:2;37870:6;37866:15;37859:36;37674:228;:::o;37908:233::-;38048:34;38044:1;38036:6;38032:14;38025:58;38117:16;38112:2;38104:6;38100:15;38093:41;37908:233;:::o;38147:182::-;38287:34;38283:1;38275:6;38271:14;38264:58;38147:182;:::o;38335:236::-;38475:34;38471:1;38463:6;38459:14;38452:58;38544:19;38539:2;38531:6;38527:15;38520:44;38335:236;:::o;38577:231::-;38717:34;38713:1;38705:6;38701:14;38694:58;38786:14;38781:2;38773:6;38769:15;38762:39;38577:231;:::o;38814:234::-;38954:34;38950:1;38942:6;38938:14;38931:58;39023:17;39018:2;39010:6;39006:15;38999:42;38814:234;:::o;39054:220::-;39194:34;39190:1;39182:6;39178:14;39171:58;39263:3;39258:2;39250:6;39246:15;39239:28;39054:220;:::o;39280:160::-;39420:12;39416:1;39408:6;39404:14;39397:36;39280:160;:::o;39446:236::-;39586:34;39582:1;39574:6;39570:14;39563:58;39655:19;39650:2;39642:6;39638:15;39631:44;39446:236;:::o;39688:122::-;39761:24;39779:5;39761:24;:::i;:::-;39754:5;39751:35;39741:63;;39800:1;39797;39790:12;39741:63;39688:122;:::o;39816:116::-;39886:21;39901:5;39886:21;:::i;:::-;39879:5;39876:32;39866:60;;39922:1;39919;39912:12;39866:60;39816:116;:::o;39938:122::-;40011:24;40029:5;40011:24;:::i;:::-;40004:5;40001:35;39991:63;;40050:1;40047;40040:12;39991:63;39938:122;:::o;40066:120::-;40138:23;40155:5;40138:23;:::i;:::-;40131:5;40128:34;40118:62;;40176:1;40173;40166:12;40118:62;40066:120;:::o;40192:122::-;40265:24;40283:5;40265:24;:::i;:::-;40258:5;40255:35;40245:63;;40304:1;40301;40294:12;40245:63;40192:122;:::o

Swarm Source

ipfs://313461f846a7cd7cc16443970286a08c335003ce2a26cb9aeae721313ffd4661
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.