ETH Price: $2,867.86 (+8.05%)
 

Overview

Max Total Supply

9,800 GVB

Holders

1,766

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 GVB
0xc384b8c870122117e97cd5414eb342ad3e4e25e8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

#GirlVibes is a collection of 10,000 stylish & badass women just living their best vibe! Each #GirlVibe has a combination of beach themed outfits, cute styles and good vibes from a set of over 900 hand drawn items.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GirlVibes

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-01-13
*/

// SPDX-License-Identifier: MIT

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/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/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/token/ERC721/ERC721.sol


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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

// File: contracts/GirlVibes.sol


pragma solidity >=0.8.0;



contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

contract GirlVibes is ERC721, Ownable
{
    /** Let use use sath math functions on uint256 */
    using Strings for uint256;

    uint256 public price = 0.05 ether;  // Base price for each mint.
    uint256 public totalSupply = 0;
    uint256 public maxSupply = 10000;  // Maximum that can be minted
    uint256 public maxMintAmount = 10;  // How many can be minted in a single transaction.
    uint256 public giftSupply = 200;  // Rservered for give aways / team
    uint256 public giftTotal = 0;  // Track how many have been gifted already.

    // Metadata
    string public baseExtension = ".json";
    string public notRevealedURI;  // Path to hidden teaser metadata.
    string private baseURI;  // Private because it's a secret until revealed.

    // Allow List
    bool public allowListOnly = true; // Whether only allow list addresses can mint or not.
    bool public mintingActive = true;  // If minting is active.
    bool public revealed = false;  // Have we revealed the real metadata yet.

    mapping(address => bool) private allowList;  // Mapping of all allow list addressed true = On allow list.
    address proxyRegistryAddress;

    // Events
    event Minted(address sender, uint256 count);


    constructor(address _proxyRegistryAddress) 
        ERC721("#GirlVibes - Beach", "GVB")
    {
        proxyRegistryAddress = _proxyRegistryAddress;
        // Set the allow list 
        // Mint at least one for ourselves so it shows up on OpenSea
        teamMint(1);
    }

    /** Override isApprovedForAll to user's OpenSea proxy accounts to enable gas-less listing. */
    function isApprovedForAll(address owner, address operator) override public view returns (bool)
    {
        // OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    /** Returns the URI metadata for this token ID. */
    function tokenURI(uint256 tokenId)
		public
		view
		virtual
		override
		returns (string memory)
	{
		require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token');
		
        // If not revealed yet just return the not revealed URI
        if (revealed == false) 
        {
            return notRevealedURI;
        }
		
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension)) : "";
	}

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

    /** Check if the address is on the allow */
    function isAllowListed(address _addr) public view returns (bool)
    {
        return allowList[_addr];
    }

    /** Add / Remove addresses to the allow */
    function setAllowList(address[] memory _addressList, bool _onAllowList) public onlyOwner {
        for (uint256 i = 0; i < _addressList.length; i++) {
            require(_addressList[i] != address(0), 'Not allowed to add null address');
            // Set the address in the allow list
            allowList[_addressList[i]] = _onAllowList;
        }
    }

    // We can do this on the client save some gas on deploy.
    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerCount = balanceOf(_owner);
        uint256[] memory tokenIds = new uint256[](ownerCount);
        uint256 current = 1;
        uint256 ownedIndex = 0;

        while (ownedIndex < ownerCount && current <= maxSupply) {
            address ownerAt = ownerOf(current);
            if (ownerAt == _owner) {
                // This is ours
                tokenIds[ownedIndex] = current;
                ownedIndex++;
            }
            current++;
        }

       return tokenIds;
    }

    modifier canMint(uint256 _amount) {
        require(_amount > 0, 'Must mint at least one.');
        require(totalSupply + giftSupply + _amount <= maxSupply, 'Purchase would exceed available supply.');
        _;
    }

    /** Mints and transfers the number of NFT's to the sender. */
    function mint(uint256 _amount) public payable canMint(_amount) {
        require(mintingActive, 'Minting is not currently active');

        if (!allowListOnly) {
            require(_amount <= maxMintAmount, 'Cannot go over the purchase limit.');
        }
        require(price * _amount <= msg.value, 'Insufficient ETH for quantity');

        address sender = _msgSender();

        // Check if allow list only.
        if (allowListOnly == true) {
            require(isAllowListed(sender), 'You are not on the allow list');
        }

        // Finally mint to the sender.
        _mintTo(sender, _amount);

        emit Minted(sender, _amount);
    }

    /** Gift NFT supply to addresses. */
    function gift(address[] calldata _to) external onlyOwner
    {
        require(totalSupply + _to.length < maxSupply, 'Not enough left to gift');
        require(giftTotal + _to.length <= giftSupply, 'Reached max gifting allowance.');

        for (uint256 i = 0; i < _to.length; i++) {
            giftTotal += 1;
            // Give 1 to the address.
            _mintTo(_to[i], 1);
        }
    }

    /** Gift NFT supply to team. */
   function teamMint(uint256 _amount) public canMint(_amount) onlyOwner
    {
        // Mint for the team.
        _mintTo(owner(), _amount);
    }

    function _mintTo(address _to, uint256 _mintAmount) internal {
        for (uint256 i = 0; i < _mintAmount; i++) {
            // Increase supply by 1
            totalSupply += 1;
            // Mint to the address.
            _safeMint(_to, totalSupply);
        }
    }

    /** Update the price of the NFT as a failsafe. */
    function setPrice(uint256 _price) external onlyOwner
    {
        price = _price;
    }

    /** Update the base URI only if we have to */
    function setBaseURI(string memory _baseUri) external onlyOwner
    {
        baseURI = _baseUri;
    }

    /** Get the current base URI */
    function getBaseURI() external view onlyOwner returns (string memory)
    {
        return baseURI;
    }

    /** Update the not revealed URI only if we have to */
    function setNotRevealedURI(string memory _notRevealedUri) external onlyOwner
    {
        notRevealedURI = _notRevealedUri;
    }

    function setBaseURIExtension(string memory _ext) external onlyOwner
    {
        baseExtension = _ext;
    }

    /** 
    Reveal the NFT's this will make the real metadata URI active and people will
    see what they got. 
    */
    function reveal() external onlyOwner
    {
        revealed = true;
    }

    /** Toggle if minting is on or off. */
    function toggleMinting() external onlyOwner
    {
        mintingActive = !mintingActive;
    }

    /** Toggle if allow list only or not */
    function toggleAllowList() external onlyOwner
    {
        allowListOnly = !allowListOnly;
    }

    /** Withdraw the eth stored in the contract. */
    function withdraw() external onlyOwner
    {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    /** Sets the maximum amount of NFTs that can be minted in a single transation */
    function setMaxMintAmount(uint256 _amount) external onlyOwner
    {
        maxMintAmount = _amount;
    }

    /** Sets the max supply this should only be used in emergency */
    function setMaxSupply(uint256 _amount) external onlyOwner
    {
        maxSupply = _amount;
    }

    /** Sets the max gift supply emergency */
    function setMaxGiftSupply(uint256 _amount) external onlyOwner
    {
        giftSupply = _amount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"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":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"count","type":"uint256"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"allowListOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_to","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giftTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isAllowListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_addressList","type":"address[]"},{"internalType":"bool","name":"_onAllowList","type":"bool"}],"name":"setAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_ext","type":"string"}],"name":"setBaseURIExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxGiftSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedUri","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"teamMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleAllowList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405266b1a2bc2ec500006007556000600855612710600955600a805560c8600b556000600c556040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000759291906200097c565b506001601060006101000a81548160ff0219169083151502179055506001601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff021916908315150217905550348015620000d457600080fd5b5060405162006005380380620060058339818101604052810190620000fa919062000a5a565b6040518060400160405280601281526020017f234769726c5669626573202d20426561636800000000000000000000000000008152506040518060400160405280600381526020017f475642000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200017e9291906200097c565b508060019080519060200190620001979291906200097c565b505050620001ba620001ae6200021460201b60201c565b6200021c60201b60201c565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200020d6001620002e260201b60201c565b50620010c3565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b806000811162000329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003209062000ca3565b60405180910390fd5b60095481600b546008546200033f919062000d58565b6200034b919062000d58565b11156200038f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003869062000cc5565b60405180910390fd5b6200039f6200021460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003c56200044360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200041e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004159062000d09565b60405180910390fd5b6200043f620004326200044360201b60201c565b836200046d60201b60201c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60005b81811015620004bf576001600860008282546200048e919062000d58565b92505081905550620004a983600854620004c460201b60201c565b8080620004b69062000e8b565b91505062000470565b505050565b620004e6828260405180602001604052806000815250620004ea60201b60201c565b5050565b620004fc83836200055860201b60201c565b6200051160008484846200073e60201b60201c565b62000553576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054a9062000c5f565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620005cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c29062000ce7565b60405180910390fd5b620005dc81620008f860201b60201c565b156200061f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006169062000c81565b60405180910390fd5b62000633600083836200096460201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000685919062000d58565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200076c8473ffffffffffffffffffffffffffffffffffffffff166200096960201b6200253e1760201c565b15620008eb578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026200079e6200021460201b60201c565b8786866040518563ffffffff1660e01b8152600401620007c2949392919062000c0b565b602060405180830381600087803b158015620007dd57600080fd5b505af19250505080156200081157506040513d601f19601f820116820180604052508101906200080e919062000a8c565b60015b6200089a573d806000811462000844576040519150601f19603f3d011682016040523d82523d6000602084013e62000849565b606091505b5060008151141562000892576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008899062000c5f565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620008f0565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b8280546200098a9062000e55565b90600052602060002090601f016020900481019282620009ae5760008555620009fa565b82601f10620009c957805160ff1916838001178555620009fa565b82800160010185558215620009fa579182015b82811115620009f9578251825591602001919060010190620009dc565b5b50905062000a09919062000a0d565b5090565b5b8082111562000a2857600081600090555060010162000a0e565b5090565b60008151905062000a3d816200108f565b92915050565b60008151905062000a5481620010a9565b92915050565b60006020828403121562000a735762000a7262000f37565b5b600062000a838482850162000a2c565b91505092915050565b60006020828403121562000aa55762000aa462000f37565b5b600062000ab58482850162000a43565b91505092915050565b62000ac98162000db5565b82525050565b600062000adc8262000d2b565b62000ae8818562000d36565b935062000afa81856020860162000e1f565b62000b058162000f3c565b840191505092915050565b600062000b1f60328362000d47565b915062000b2c8262000f4d565b604082019050919050565b600062000b46601c8362000d47565b915062000b538262000f9c565b602082019050919050565b600062000b6d60178362000d47565b915062000b7a8262000fc5565b602082019050919050565b600062000b9460278362000d47565b915062000ba18262000fee565b604082019050919050565b600062000bbb60208362000d47565b915062000bc8826200103d565b602082019050919050565b600062000be260208362000d47565b915062000bef8262001066565b602082019050919050565b62000c058162000e15565b82525050565b600060808201905062000c22600083018762000abe565b62000c31602083018662000abe565b62000c40604083018562000bfa565b818103606083015262000c54818462000acf565b905095945050505050565b6000602082019050818103600083015262000c7a8162000b10565b9050919050565b6000602082019050818103600083015262000c9c8162000b37565b9050919050565b6000602082019050818103600083015262000cbe8162000b5e565b9050919050565b6000602082019050818103600083015262000ce08162000b85565b9050919050565b6000602082019050818103600083015262000d028162000bac565b9050919050565b6000602082019050818103600083015262000d248162000bd3565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000d658262000e15565b915062000d728362000e15565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000daa5762000da962000ed9565b5b828201905092915050565b600062000dc28262000df5565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000e3f57808201518184015260208101905062000e22565b8381111562000e4f576000848401525b50505050565b6000600282049050600182168062000e6e57607f821691505b6020821081141562000e855762000e8462000f08565b5b50919050565b600062000e988262000e15565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000ece5762000ecd62000ed9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4d757374206d696e74206174206c65617374206f6e652e000000000000000000600082015250565b7f507572636861736520776f756c642065786365656420617661696c61626c652060008201527f737570706c792e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200109a8162000db5565b8114620010a657600080fd5b50565b620010b48162000dc9565b8114620010c057600080fd5b50565b614f3280620010d36000396000f3fe6080604052600436106102725760003560e01c80636352211e1161014f578063988934af116100c1578063c66828621161007a578063c6682862146108e1578063c87b56dd1461090c578063d5abeb0114610949578063e985e9c514610974578063f2c4ce1e146109b1578063f2fde38b146109da57610272565b8063988934af1461081a578063a035b1fe14610831578063a0712d681461085c578063a22cb46514610878578063a475b5dd146108a1578063b88d4fde146108b857610272565b8063715018a611610113578063715018a61461074257806372250380146107595780637d55094d146107845780638da5cb5b1461079b57806391b7f5ed146107c657806395d89b41146107ef57610272565b80636352211e146106375780636f8b44b01461067457806370a082311461069d57806370dd8d2e146106da578063714c53981461071757610272565b806323b872dd116101e85780633e5f6077116101ac5780633e5f60771461052957806342842e0e14610554578063438b63001461057d578063467de36c146105ba57806351830227146105e357806355f804b31461060e57610272565b806323b872dd1461046c5780632fbba1151461049557806331367411146104be57806331f9c919146104e75780633ccfd60b1461051257610272565b8063095ea7b31161023a578063095ea7b31461036e578063163e1e611461039757806318160ddd146103c05780631839ddb9146103eb5780632254b01514610416578063239c70ae1461044157610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063087b5c361461031c578063088a4ed014610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906138c5565b610a03565b6040516102ab9190613fe4565b60405180910390f35b3480156102c057600080fd5b506102c9610ae5565b6040516102d69190613fff565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613995565b610b77565b6040516103139190613f32565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613995565b610bfc565b005b34801561035157600080fd5b5061036c60048036038101906103679190613995565b610c82565b005b34801561037a57600080fd5b50610395600480360381019061039091906137dc565b610d08565b005b3480156103a357600080fd5b506103be60048036038101906103b9919061381c565b610e20565b005b3480156103cc57600080fd5b506103d5610fb7565b6040516103e29190614341565b60405180910390f35b3480156103f757600080fd5b50610400610fbd565b60405161040d9190614341565b60405180910390f35b34801561042257600080fd5b5061042b610fc3565b6040516104389190614341565b60405180910390f35b34801561044d57600080fd5b50610456610fc9565b6040516104639190614341565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906136c6565b610fcf565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613995565b61102f565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613869565b611163565b005b3480156104f357600080fd5b506104fc6112fe565b6040516105099190613fe4565b60405180910390f35b34801561051e57600080fd5b50610527611311565b005b34801561053557600080fd5b5061053e6113dc565b60405161054b9190613fe4565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906136c6565b6113ef565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613659565b61140f565b6040516105b19190613fc2565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc919061394c565b61151a565b005b3480156105ef57600080fd5b506105f86115b0565b6040516106059190613fe4565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061394c565b6115c3565b005b34801561064357600080fd5b5061065e60048036038101906106599190613995565b611659565b60405161066b9190613f32565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190613995565b61170b565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613659565b611791565b6040516106d19190614341565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190613659565b611849565b60405161070e9190613fe4565b60405180910390f35b34801561072357600080fd5b5061072c61189f565b6040516107399190613fff565b60405180910390f35b34801561074e57600080fd5b506107576119ad565b005b34801561076557600080fd5b5061076e611a35565b60405161077b9190613fff565b60405180910390f35b34801561079057600080fd5b50610799611ac3565b005b3480156107a757600080fd5b506107b0611b6b565b6040516107bd9190613f32565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613995565b611b95565b005b3480156107fb57600080fd5b50610804611c1b565b6040516108119190613fff565b60405180910390f35b34801561082657600080fd5b5061082f611cad565b005b34801561083d57600080fd5b50610846611d55565b6040516108539190614341565b60405180910390f35b61087660048036038101906108719190613995565b611d5b565b005b34801561088457600080fd5b5061089f600480360381019061089a919061379c565b611fb0565b005b3480156108ad57600080fd5b506108b6611fc6565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613719565b61205f565b005b3480156108ed57600080fd5b506108f66120c1565b6040516109039190613fff565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613995565b61214f565b6040516109409190613fff565b60405180910390f35b34801561095557600080fd5b5061095e6122a8565b60405161096b9190614341565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613686565b6122ae565b6040516109a89190613fe4565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d3919061394c565b6123b0565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190613659565b612446565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ace57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ade5750610add82612551565b5b9050919050565b606060008054610af49061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b209061467d565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b82826125bb565b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614241565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c04612627565b73ffffffffffffffffffffffffffffffffffffffff16610c22611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614281565b60405180910390fd5b80600b8190555050565b610c8a612627565b73ffffffffffffffffffffffffffffffffffffffff16610ca8611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614281565b60405180910390fd5b80600a8190555050565b6000610d1382611659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b906142e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da3612627565b73ffffffffffffffffffffffffffffffffffffffff161480610dd25750610dd181610dcc612627565b6122ae565b5b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e08906141a1565b60405180910390fd5b610e1b838361262f565b505050565b610e28612627565b73ffffffffffffffffffffffffffffffffffffffff16610e46611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614281565b60405180910390fd5b60095482829050600854610eb091906144a0565b10610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790614141565b60405180910390fd5b600b5482829050600c54610f0491906144a0565b1115610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906140c1565b60405180910390fd5b60005b82829050811015610fb2576001600c6000828254610f6691906144a0565b92505081905550610f9f838383818110610f8357610f826147e7565b5b9050602002016020810190610f989190613659565b60016126e8565b8080610faa906146e0565b915050610f48565b505050565b60085481565b600c5481565b600b5481565b600a5481565b610fe0610fda612627565b82612731565b61101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690614301565b60405180910390fd5b61102a83838361280f565b505050565b8060008111611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614181565b60405180910390fd5b60095481600b5460085461108791906144a0565b61109191906144a0565b11156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614201565b60405180910390fd5b6110da612627565b73ffffffffffffffffffffffffffffffffffffffff166110f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590614281565b60405180910390fd5b61115f611159611b6b565b836126e8565b5050565b61116b612627565b73ffffffffffffffffffffffffffffffffffffffff16611189611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614281565b60405180910390fd5b60005b82518110156112f957600073ffffffffffffffffffffffffffffffffffffffff16838281518110611216576112156147e7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614021565b60405180910390fd5b816011600085848151811061128d5761128c6147e7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f1906146e0565b9150506111e2565b505050565b601060019054906101000a900460ff1681565b611319612627565b73ffffffffffffffffffffffffffffffffffffffff16611337611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614281565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113d8573d6000803e3d6000fd5b5050565b601060009054906101000a900460ff1681565b61140a8383836040518060200160405280600081525061205f565b505050565b6060600061141c83611791565b905060008167ffffffffffffffff81111561143a57611439614816565b5b6040519080825280602002602001820160405280156114685781602001602082028036833780820191505090505b50905060006001905060005b838110801561148557506009548211155b1561150e57600061149583611659565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114fa57828483815181106114df576114de6147e7565b5b60200260200101818152505081806114f6906146e0565b9250505b8280611505906146e0565b93505050611474565b82945050505050919050565b611522612627565b73ffffffffffffffffffffffffffffffffffffffff16611540611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614281565b60405180910390fd5b80600d90805190602001906115ac929190613364565b5050565b601060029054906101000a900460ff1681565b6115cb612627565b73ffffffffffffffffffffffffffffffffffffffff166115e9611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690614281565b60405180910390fd5b80600f9080519060200190611655929190613364565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f9906141e1565b60405180910390fd5b80915050919050565b611713612627565b73ffffffffffffffffffffffffffffffffffffffff16611731611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90614281565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906141c1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606118a9612627565b73ffffffffffffffffffffffffffffffffffffffff166118c7611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614281565b60405180910390fd5b600f805461192a9061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546119569061467d565b80156119a35780601f10611978576101008083540402835291602001916119a3565b820191906000526020600020905b81548152906001019060200180831161198657829003601f168201915b5050505050905090565b6119b5612627565b73ffffffffffffffffffffffffffffffffffffffff166119d3611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614281565b60405180910390fd5b611a336000612a6b565b565b600e8054611a429061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6e9061467d565b8015611abb5780601f10611a9057610100808354040283529160200191611abb565b820191906000526020600020905b815481529060010190602001808311611a9e57829003601f168201915b505050505081565b611acb612627565b73ffffffffffffffffffffffffffffffffffffffff16611ae9611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614281565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9d612627565b73ffffffffffffffffffffffffffffffffffffffff16611bbb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614281565b60405180910390fd5b8060078190555050565b606060018054611c2a9061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c569061467d565b8015611ca35780601f10611c7857610100808354040283529160200191611ca3565b820191906000526020600020905b815481529060010190602001808311611c8657829003601f168201915b5050505050905090565b611cb5612627565b73ffffffffffffffffffffffffffffffffffffffff16611cd3611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090614281565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b60075481565b8060008111611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690614181565b60405180910390fd5b60095481600b54600854611db391906144a0565b611dbd91906144a0565b1115611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614201565b60405180910390fd5b601060019054906101000a900460ff16611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614041565b60405180910390fd5b601060009054906101000a900460ff16611ea757600a54821115611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90614321565b60405180910390fd5b5b3482600754611eb69190614527565b1115611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee906140e1565b60405180910390fd5b6000611f01612627565b905060011515601060009054906101000a900460ff1615151415611f6857611f2881611849565b611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90614261565b60405180910390fd5b5b611f7281846126e8565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8184604051611fa3929190613f99565b60405180910390a1505050565b611fc2611fbb612627565b8383612b31565b5050565b611fce612627565b73ffffffffffffffffffffffffffffffffffffffff16611fec611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203990614281565b60405180910390fd5b6001601060026101000a81548160ff021916908315150217905550565b61207061206a612627565b83612731565b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614301565b60405180910390fd5b6120bb84848484612c9e565b50505050565b600d80546120ce9061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546120fa9061467d565b80156121475780601f1061211c57610100808354040283529160200191612147565b820191906000526020600020905b81548152906001019060200180831161212a57829003601f168201915b505050505081565b606061215a826125bb565b612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906142c1565b60405180910390fd5b60001515601060029054906101000a900460ff161515141561224757600e80546121c29061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546121ee9061467d565b801561223b5780601f106122105761010080835404028352916020019161223b565b820191906000526020600020905b81548152906001019060200180831161221e57829003601f168201915b505050505090506122a3565b6000612251612cfa565b90506000815111612271576040518060200160405280600081525061229f565b8061227b84612d8c565b600d60405160200161228f93929190613f01565b6040516020818303038152906040525b9150505b919050565b60095481565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123269190613f32565b60206040518083038186803b15801561233e57600080fd5b505afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612376919061391f565b73ffffffffffffffffffffffffffffffffffffffff16141561239c5760019150506123aa565b6123a68484612eed565b9150505b92915050565b6123b8612627565b73ffffffffffffffffffffffffffffffffffffffff166123d6611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614281565b60405180910390fd5b80600e9080519060200190612442929190613364565b5050565b61244e612627565b73ffffffffffffffffffffffffffffffffffffffff1661246c611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990614281565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990614081565b60405180910390fd5b61253b81612a6b565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126a283611659565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8181101561272c5760016008600082825461270691906144a0565b9250508190555061271983600854612f81565b8080612724906146e0565b9150506126eb565b505050565b600061273c826125bb565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614161565b60405180910390fd5b600061278683611659565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127f557508373ffffffffffffffffffffffffffffffffffffffff166127dd84610b77565b73ffffffffffffffffffffffffffffffffffffffff16145b80612806575061280581856122ae565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661282f82611659565b73ffffffffffffffffffffffffffffffffffffffff1614612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906142a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec90614101565b60405180910390fd5b612900838383612f9f565b61290b60008261262f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461295b9190614581565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b291906144a0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790614121565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c919190613fe4565b60405180910390a3505050565b612ca984848461280f565b612cb584848484612fa4565b612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90614061565b60405180910390fd5b50505050565b6060600f8054612d099061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054612d359061467d565b8015612d825780601f10612d5757610100808354040283529160200191612d82565b820191906000526020600020905b815481529060010190602001808311612d6557829003601f168201915b5050505050905090565b60606000821415612dd4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ee8565b600082905060005b60008214612e06578080612def906146e0565b915050600a82612dff91906144f6565b9150612ddc565b60008167ffffffffffffffff811115612e2257612e21614816565b5b6040519080825280601f01601f191660200182016040528015612e545781602001600182028036833780820191505090505b5090505b60008514612ee157600182612e6d9190614581565b9150600a85612e7c9190614729565b6030612e8891906144a0565b60f81b818381518110612e9e57612e9d6147e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eda91906144f6565b9450612e58565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f9b82826040518060200160405280600081525061313b565b5050565b505050565b6000612fc58473ffffffffffffffffffffffffffffffffffffffff1661253e565b1561312e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fee612627565b8786866040518563ffffffff1660e01b81526004016130109493929190613f4d565b602060405180830381600087803b15801561302a57600080fd5b505af192505050801561305b57506040513d601f19601f8201168201806040525081019061305891906138f2565b60015b6130de573d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b506000815114156130d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cd90614061565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613133565b600190505b949350505050565b6131458383613196565b6131526000848484612fa4565b613191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318890614061565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd90614221565b60405180910390fd5b61320f816125bb565b1561324f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613246906140a1565b60405180910390fd5b61325b60008383612f9f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ab91906144a0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133709061467d565b90600052602060002090601f01602090048101928261339257600085556133d9565b82601f106133ab57805160ff19168380011785556133d9565b828001600101855582156133d9579182015b828111156133d85782518255916020019190600101906133bd565b5b5090506133e691906133ea565b5090565b5b808211156134035760008160009055506001016133eb565b5090565b600061341a61341584614381565b61435c565b9050808382526020820190508285602086028201111561343d5761343c61484f565b5b60005b8581101561346d578161345388826134fb565b845260208401935060208301925050600181019050613440565b5050509392505050565b600061348a613485846143ad565b61435c565b9050828152602081018484840111156134a6576134a5614854565b5b6134b184828561463b565b509392505050565b60006134cc6134c7846143de565b61435c565b9050828152602081018484840111156134e8576134e7614854565b5b6134f384828561463b565b509392505050565b60008135905061350a81614e89565b92915050565b60008083601f8401126135265761352561484a565b5b8235905067ffffffffffffffff81111561354357613542614845565b5b60208301915083602082028301111561355f5761355e61484f565b5b9250929050565b600082601f83011261357b5761357a61484a565b5b813561358b848260208601613407565b91505092915050565b6000813590506135a381614ea0565b92915050565b6000813590506135b881614eb7565b92915050565b6000815190506135cd81614eb7565b92915050565b600082601f8301126135e8576135e761484a565b5b81356135f8848260208601613477565b91505092915050565b60008151905061361081614ece565b92915050565b600082601f83011261362b5761362a61484a565b5b813561363b8482602086016134b9565b91505092915050565b60008135905061365381614ee5565b92915050565b60006020828403121561366f5761366e61485e565b5b600061367d848285016134fb565b91505092915050565b6000806040838503121561369d5761369c61485e565b5b60006136ab858286016134fb565b92505060206136bc858286016134fb565b9150509250929050565b6000806000606084860312156136df576136de61485e565b5b60006136ed868287016134fb565b93505060206136fe868287016134fb565b925050604061370f86828701613644565b9150509250925092565b600080600080608085870312156137335761373261485e565b5b6000613741878288016134fb565b9450506020613752878288016134fb565b935050604061376387828801613644565b925050606085013567ffffffffffffffff81111561378457613783614859565b5b613790878288016135d3565b91505092959194509250565b600080604083850312156137b3576137b261485e565b5b60006137c1858286016134fb565b92505060206137d285828601613594565b9150509250929050565b600080604083850312156137f3576137f261485e565b5b6000613801858286016134fb565b925050602061381285828601613644565b9150509250929050565b600080602083850312156138335761383261485e565b5b600083013567ffffffffffffffff81111561385157613850614859565b5b61385d85828601613510565b92509250509250929050565b600080604083850312156138805761387f61485e565b5b600083013567ffffffffffffffff81111561389e5761389d614859565b5b6138aa85828601613566565b92505060206138bb85828601613594565b9150509250929050565b6000602082840312156138db576138da61485e565b5b60006138e9848285016135a9565b91505092915050565b6000602082840312156139085761390761485e565b5b6000613916848285016135be565b91505092915050565b6000602082840312156139355761393461485e565b5b600061394384828501613601565b91505092915050565b6000602082840312156139625761396161485e565b5b600082013567ffffffffffffffff8111156139805761397f614859565b5b61398c84828501613616565b91505092915050565b6000602082840312156139ab576139aa61485e565b5b60006139b984828501613644565b91505092915050565b60006139ce8383613ee3565b60208301905092915050565b6139e3816145b5565b82525050565b60006139f482614434565b6139fe8185614462565b9350613a098361440f565b8060005b83811015613a3a578151613a2188826139c2565b9750613a2c83614455565b925050600181019050613a0d565b5085935050505092915050565b613a50816145c7565b82525050565b6000613a618261443f565b613a6b8185614473565b9350613a7b81856020860161464a565b613a8481614863565b840191505092915050565b6000613a9a8261444a565b613aa48185614484565b9350613ab481856020860161464a565b613abd81614863565b840191505092915050565b6000613ad38261444a565b613add8185614495565b9350613aed81856020860161464a565b80840191505092915050565b60008154613b068161467d565b613b108186614495565b94506001821660008114613b2b5760018114613b3c57613b6f565b60ff19831686528186019350613b6f565b613b458561441f565b60005b83811015613b6757815481890152600182019150602081019050613b48565b838801955050505b50505092915050565b6000613b85601f83614484565b9150613b9082614874565b602082019050919050565b6000613ba8601f83614484565b9150613bb38261489d565b602082019050919050565b6000613bcb603283614484565b9150613bd6826148c6565b604082019050919050565b6000613bee602683614484565b9150613bf982614915565b604082019050919050565b6000613c11601c83614484565b9150613c1c82614964565b602082019050919050565b6000613c34601e83614484565b9150613c3f8261498d565b602082019050919050565b6000613c57601d83614484565b9150613c62826149b6565b602082019050919050565b6000613c7a602483614484565b9150613c85826149df565b604082019050919050565b6000613c9d601983614484565b9150613ca882614a2e565b602082019050919050565b6000613cc0601783614484565b9150613ccb82614a57565b602082019050919050565b6000613ce3602c83614484565b9150613cee82614a80565b604082019050919050565b6000613d06601783614484565b9150613d1182614acf565b602082019050919050565b6000613d29603883614484565b9150613d3482614af8565b604082019050919050565b6000613d4c602a83614484565b9150613d5782614b47565b604082019050919050565b6000613d6f602983614484565b9150613d7a82614b96565b604082019050919050565b6000613d92602783614484565b9150613d9d82614be5565b604082019050919050565b6000613db5602083614484565b9150613dc082614c34565b602082019050919050565b6000613dd8602c83614484565b9150613de382614c5d565b604082019050919050565b6000613dfb601d83614484565b9150613e0682614cac565b602082019050919050565b6000613e1e602083614484565b9150613e2982614cd5565b602082019050919050565b6000613e41602983614484565b9150613e4c82614cfe565b604082019050919050565b6000613e64602f83614484565b9150613e6f82614d4d565b604082019050919050565b6000613e87602183614484565b9150613e9282614d9c565b604082019050919050565b6000613eaa603183614484565b9150613eb582614deb565b604082019050919050565b6000613ecd602283614484565b9150613ed882614e3a565b604082019050919050565b613eec81614631565b82525050565b613efb81614631565b82525050565b6000613f0d8286613ac8565b9150613f198285613ac8565b9150613f258284613af9565b9150819050949350505050565b6000602082019050613f4760008301846139da565b92915050565b6000608082019050613f6260008301876139da565b613f6f60208301866139da565b613f7c6040830185613ef2565b8181036060830152613f8e8184613a56565b905095945050505050565b6000604082019050613fae60008301856139da565b613fbb6020830184613ef2565b9392505050565b60006020820190508181036000830152613fdc81846139e9565b905092915050565b6000602082019050613ff96000830184613a47565b92915050565b600060208201905081810360008301526140198184613a8f565b905092915050565b6000602082019050818103600083015261403a81613b78565b9050919050565b6000602082019050818103600083015261405a81613b9b565b9050919050565b6000602082019050818103600083015261407a81613bbe565b9050919050565b6000602082019050818103600083015261409a81613be1565b9050919050565b600060208201905081810360008301526140ba81613c04565b9050919050565b600060208201905081810360008301526140da81613c27565b9050919050565b600060208201905081810360008301526140fa81613c4a565b9050919050565b6000602082019050818103600083015261411a81613c6d565b9050919050565b6000602082019050818103600083015261413a81613c90565b9050919050565b6000602082019050818103600083015261415a81613cb3565b9050919050565b6000602082019050818103600083015261417a81613cd6565b9050919050565b6000602082019050818103600083015261419a81613cf9565b9050919050565b600060208201905081810360008301526141ba81613d1c565b9050919050565b600060208201905081810360008301526141da81613d3f565b9050919050565b600060208201905081810360008301526141fa81613d62565b9050919050565b6000602082019050818103600083015261421a81613d85565b9050919050565b6000602082019050818103600083015261423a81613da8565b9050919050565b6000602082019050818103600083015261425a81613dcb565b9050919050565b6000602082019050818103600083015261427a81613dee565b9050919050565b6000602082019050818103600083015261429a81613e11565b9050919050565b600060208201905081810360008301526142ba81613e34565b9050919050565b600060208201905081810360008301526142da81613e57565b9050919050565b600060208201905081810360008301526142fa81613e7a565b9050919050565b6000602082019050818103600083015261431a81613e9d565b9050919050565b6000602082019050818103600083015261433a81613ec0565b9050919050565b60006020820190506143566000830184613ef2565b92915050565b6000614366614377565b905061437282826146af565b919050565b6000604051905090565b600067ffffffffffffffff82111561439c5761439b614816565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143c8576143c7614816565b5b6143d182614863565b9050602081019050919050565b600067ffffffffffffffff8211156143f9576143f8614816565b5b61440282614863565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ab82614631565b91506144b683614631565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144eb576144ea61475a565b5b828201905092915050565b600061450182614631565b915061450c83614631565b92508261451c5761451b614789565b5b828204905092915050565b600061453282614631565b915061453d83614631565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145765761457561475a565b5b828202905092915050565b600061458c82614631565b915061459783614631565b9250828210156145aa576145a961475a565b5b828203905092915050565b60006145c082614611565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061460a826145b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000600282049050600182168061469557607f821691505b602082108114156146a9576146a86147b8565b5b50919050565b6146b882614863565b810181811067ffffffffffffffff821117156146d7576146d6614816565b5b80604052505050565b60006146eb82614631565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561471e5761471d61475a565b5b600182019050919050565b600061473482614631565b915061473f83614631565b92508261474f5761474e614789565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420616c6c6f77656420746f20616464206e756c6c206164647265737300600082015250565b7f4d696e74696e67206973206e6f742063757272656e746c792061637469766500600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f52656163686564206d61782067696674696e6720616c6c6f77616e63652e0000600082015250565b7f496e73756666696369656e742045544820666f72207175616e74697479000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768206c65667420746f2067696674000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e652e000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c642065786365656420617661696c61626c652060008201527f737570706c792e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74206f6e2074686520616c6c6f77206c697374000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f7420676f206f76657220746865207075726368617365206c696d6960008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b614e92816145b5565b8114614e9d57600080fd5b50565b614ea9816145c7565b8114614eb457600080fd5b50565b614ec0816145d3565b8114614ecb57600080fd5b50565b614ed7816145ff565b8114614ee257600080fd5b50565b614eee81614631565b8114614ef957600080fd5b5056fea26469706673582212206bca1b9173d721b6cdeb8198419f3d26267b15339822d8a27a0a003dfe60bcee64736f6c63430008070033000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x6080604052600436106102725760003560e01c80636352211e1161014f578063988934af116100c1578063c66828621161007a578063c6682862146108e1578063c87b56dd1461090c578063d5abeb0114610949578063e985e9c514610974578063f2c4ce1e146109b1578063f2fde38b146109da57610272565b8063988934af1461081a578063a035b1fe14610831578063a0712d681461085c578063a22cb46514610878578063a475b5dd146108a1578063b88d4fde146108b857610272565b8063715018a611610113578063715018a61461074257806372250380146107595780637d55094d146107845780638da5cb5b1461079b57806391b7f5ed146107c657806395d89b41146107ef57610272565b80636352211e146106375780636f8b44b01461067457806370a082311461069d57806370dd8d2e146106da578063714c53981461071757610272565b806323b872dd116101e85780633e5f6077116101ac5780633e5f60771461052957806342842e0e14610554578063438b63001461057d578063467de36c146105ba57806351830227146105e357806355f804b31461060e57610272565b806323b872dd1461046c5780632fbba1151461049557806331367411146104be57806331f9c919146104e75780633ccfd60b1461051257610272565b8063095ea7b31161023a578063095ea7b31461036e578063163e1e611461039757806318160ddd146103c05780631839ddb9146103eb5780632254b01514610416578063239c70ae1461044157610272565b806301ffc9a71461027757806306fdde03146102b4578063081812fc146102df578063087b5c361461031c578063088a4ed014610345575b600080fd5b34801561028357600080fd5b5061029e600480360381019061029991906138c5565b610a03565b6040516102ab9190613fe4565b60405180910390f35b3480156102c057600080fd5b506102c9610ae5565b6040516102d69190613fff565b60405180910390f35b3480156102eb57600080fd5b5061030660048036038101906103019190613995565b610b77565b6040516103139190613f32565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613995565b610bfc565b005b34801561035157600080fd5b5061036c60048036038101906103679190613995565b610c82565b005b34801561037a57600080fd5b50610395600480360381019061039091906137dc565b610d08565b005b3480156103a357600080fd5b506103be60048036038101906103b9919061381c565b610e20565b005b3480156103cc57600080fd5b506103d5610fb7565b6040516103e29190614341565b60405180910390f35b3480156103f757600080fd5b50610400610fbd565b60405161040d9190614341565b60405180910390f35b34801561042257600080fd5b5061042b610fc3565b6040516104389190614341565b60405180910390f35b34801561044d57600080fd5b50610456610fc9565b6040516104639190614341565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e91906136c6565b610fcf565b005b3480156104a157600080fd5b506104bc60048036038101906104b79190613995565b61102f565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613869565b611163565b005b3480156104f357600080fd5b506104fc6112fe565b6040516105099190613fe4565b60405180910390f35b34801561051e57600080fd5b50610527611311565b005b34801561053557600080fd5b5061053e6113dc565b60405161054b9190613fe4565b60405180910390f35b34801561056057600080fd5b5061057b600480360381019061057691906136c6565b6113ef565b005b34801561058957600080fd5b506105a4600480360381019061059f9190613659565b61140f565b6040516105b19190613fc2565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc919061394c565b61151a565b005b3480156105ef57600080fd5b506105f86115b0565b6040516106059190613fe4565b60405180910390f35b34801561061a57600080fd5b506106356004803603810190610630919061394c565b6115c3565b005b34801561064357600080fd5b5061065e60048036038101906106599190613995565b611659565b60405161066b9190613f32565b60405180910390f35b34801561068057600080fd5b5061069b60048036038101906106969190613995565b61170b565b005b3480156106a957600080fd5b506106c460048036038101906106bf9190613659565b611791565b6040516106d19190614341565b60405180910390f35b3480156106e657600080fd5b5061070160048036038101906106fc9190613659565b611849565b60405161070e9190613fe4565b60405180910390f35b34801561072357600080fd5b5061072c61189f565b6040516107399190613fff565b60405180910390f35b34801561074e57600080fd5b506107576119ad565b005b34801561076557600080fd5b5061076e611a35565b60405161077b9190613fff565b60405180910390f35b34801561079057600080fd5b50610799611ac3565b005b3480156107a757600080fd5b506107b0611b6b565b6040516107bd9190613f32565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e89190613995565b611b95565b005b3480156107fb57600080fd5b50610804611c1b565b6040516108119190613fff565b60405180910390f35b34801561082657600080fd5b5061082f611cad565b005b34801561083d57600080fd5b50610846611d55565b6040516108539190614341565b60405180910390f35b61087660048036038101906108719190613995565b611d5b565b005b34801561088457600080fd5b5061089f600480360381019061089a919061379c565b611fb0565b005b3480156108ad57600080fd5b506108b6611fc6565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613719565b61205f565b005b3480156108ed57600080fd5b506108f66120c1565b6040516109039190613fff565b60405180910390f35b34801561091857600080fd5b50610933600480360381019061092e9190613995565b61214f565b6040516109409190613fff565b60405180910390f35b34801561095557600080fd5b5061095e6122a8565b60405161096b9190614341565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190613686565b6122ae565b6040516109a89190613fe4565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d3919061394c565b6123b0565b005b3480156109e657600080fd5b50610a0160048036038101906109fc9190613659565b612446565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ace57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610ade5750610add82612551565b5b9050919050565b606060008054610af49061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054610b209061467d565b8015610b6d5780601f10610b4257610100808354040283529160200191610b6d565b820191906000526020600020905b815481529060010190602001808311610b5057829003601f168201915b5050505050905090565b6000610b82826125bb565b610bc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb890614241565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610c04612627565b73ffffffffffffffffffffffffffffffffffffffff16610c22611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6f90614281565b60405180910390fd5b80600b8190555050565b610c8a612627565b73ffffffffffffffffffffffffffffffffffffffff16610ca8611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610cfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf590614281565b60405180910390fd5b80600a8190555050565b6000610d1382611659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7b906142e1565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da3612627565b73ffffffffffffffffffffffffffffffffffffffff161480610dd25750610dd181610dcc612627565b6122ae565b5b610e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e08906141a1565b60405180910390fd5b610e1b838361262f565b505050565b610e28612627565b73ffffffffffffffffffffffffffffffffffffffff16610e46611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9390614281565b60405180910390fd5b60095482829050600854610eb091906144a0565b10610ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee790614141565b60405180910390fd5b600b5482829050600c54610f0491906144a0565b1115610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c906140c1565b60405180910390fd5b60005b82829050811015610fb2576001600c6000828254610f6691906144a0565b92505081905550610f9f838383818110610f8357610f826147e7565b5b9050602002016020810190610f989190613659565b60016126e8565b8080610faa906146e0565b915050610f48565b505050565b60085481565b600c5481565b600b5481565b600a5481565b610fe0610fda612627565b82612731565b61101f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101690614301565b60405180910390fd5b61102a83838361280f565b505050565b8060008111611073576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106a90614181565b60405180910390fd5b60095481600b5460085461108791906144a0565b61109191906144a0565b11156110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614201565b60405180910390fd5b6110da612627565b73ffffffffffffffffffffffffffffffffffffffff166110f8611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590614281565b60405180910390fd5b61115f611159611b6b565b836126e8565b5050565b61116b612627565b73ffffffffffffffffffffffffffffffffffffffff16611189611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146111df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d690614281565b60405180910390fd5b60005b82518110156112f957600073ffffffffffffffffffffffffffffffffffffffff16838281518110611216576112156147e7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff161415611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614021565b60405180910390fd5b816011600085848151811061128d5761128c6147e7565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f1906146e0565b9150506111e2565b505050565b601060019054906101000a900460ff1681565b611319612627565b73ffffffffffffffffffffffffffffffffffffffff16611337611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138490614281565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156113d8573d6000803e3d6000fd5b5050565b601060009054906101000a900460ff1681565b61140a8383836040518060200160405280600081525061205f565b505050565b6060600061141c83611791565b905060008167ffffffffffffffff81111561143a57611439614816565b5b6040519080825280602002602001820160405280156114685781602001602082028036833780820191505090505b50905060006001905060005b838110801561148557506009548211155b1561150e57600061149583611659565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114fa57828483815181106114df576114de6147e7565b5b60200260200101818152505081806114f6906146e0565b9250505b8280611505906146e0565b93505050611474565b82945050505050919050565b611522612627565b73ffffffffffffffffffffffffffffffffffffffff16611540611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d90614281565b60405180910390fd5b80600d90805190602001906115ac929190613364565b5050565b601060029054906101000a900460ff1681565b6115cb612627565b73ffffffffffffffffffffffffffffffffffffffff166115e9611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461163f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163690614281565b60405180910390fd5b80600f9080519060200190611655929190613364565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f9906141e1565b60405180910390fd5b80915050919050565b611713612627565b73ffffffffffffffffffffffffffffffffffffffff16611731611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90614281565b60405180910390fd5b8060098190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f9906141c1565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606118a9612627565b73ffffffffffffffffffffffffffffffffffffffff166118c7611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191490614281565b60405180910390fd5b600f805461192a9061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546119569061467d565b80156119a35780601f10611978576101008083540402835291602001916119a3565b820191906000526020600020905b81548152906001019060200180831161198657829003601f168201915b5050505050905090565b6119b5612627565b73ffffffffffffffffffffffffffffffffffffffff166119d3611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2090614281565b60405180910390fd5b611a336000612a6b565b565b600e8054611a429061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6e9061467d565b8015611abb5780601f10611a9057610100808354040283529160200191611abb565b820191906000526020600020905b815481529060010190602001808311611a9e57829003601f168201915b505050505081565b611acb612627565b73ffffffffffffffffffffffffffffffffffffffff16611ae9611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3690614281565b60405180910390fd5b601060019054906101000a900460ff1615601060016101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b9d612627565b73ffffffffffffffffffffffffffffffffffffffff16611bbb611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890614281565b60405180910390fd5b8060078190555050565b606060018054611c2a9061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054611c569061467d565b8015611ca35780601f10611c7857610100808354040283529160200191611ca3565b820191906000526020600020905b815481529060010190602001808311611c8657829003601f168201915b5050505050905090565b611cb5612627565b73ffffffffffffffffffffffffffffffffffffffff16611cd3611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614611d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2090614281565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b60075481565b8060008111611d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9690614181565b60405180910390fd5b60095481600b54600854611db391906144a0565b611dbd91906144a0565b1115611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590614201565b60405180910390fd5b601060019054906101000a900460ff16611e4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4490614041565b60405180910390fd5b601060009054906101000a900460ff16611ea757600a54821115611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90614321565b60405180910390fd5b5b3482600754611eb69190614527565b1115611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee906140e1565b60405180910390fd5b6000611f01612627565b905060011515601060009054906101000a900460ff1615151415611f6857611f2881611849565b611f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5e90614261565b60405180910390fd5b5b611f7281846126e8565b7f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe8184604051611fa3929190613f99565b60405180910390a1505050565b611fc2611fbb612627565b8383612b31565b5050565b611fce612627565b73ffffffffffffffffffffffffffffffffffffffff16611fec611b6b565b73ffffffffffffffffffffffffffffffffffffffff1614612042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203990614281565b60405180910390fd5b6001601060026101000a81548160ff021916908315150217905550565b61207061206a612627565b83612731565b6120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a690614301565b60405180910390fd5b6120bb84848484612c9e565b50505050565b600d80546120ce9061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546120fa9061467d565b80156121475780601f1061211c57610100808354040283529160200191612147565b820191906000526020600020905b81548152906001019060200180831161212a57829003601f168201915b505050505081565b606061215a826125bb565b612199576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612190906142c1565b60405180910390fd5b60001515601060029054906101000a900460ff161515141561224757600e80546121c29061467d565b80601f01602080910402602001604051908101604052809291908181526020018280546121ee9061467d565b801561223b5780601f106122105761010080835404028352916020019161223b565b820191906000526020600020905b81548152906001019060200180831161221e57829003601f168201915b505050505090506122a3565b6000612251612cfa565b90506000815111612271576040518060200160405280600081525061229f565b8061227b84612d8c565b600d60405160200161228f93929190613f01565b6040516020818303038152906040525b9150505b919050565b60095481565b600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b81526004016123269190613f32565b60206040518083038186803b15801561233e57600080fd5b505afa158015612352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612376919061391f565b73ffffffffffffffffffffffffffffffffffffffff16141561239c5760019150506123aa565b6123a68484612eed565b9150505b92915050565b6123b8612627565b73ffffffffffffffffffffffffffffffffffffffff166123d6611b6b565b73ffffffffffffffffffffffffffffffffffffffff161461242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614281565b60405180910390fd5b80600e9080519060200190612442929190613364565b5050565b61244e612627565b73ffffffffffffffffffffffffffffffffffffffff1661246c611b6b565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990614281565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252990614081565b60405180910390fd5b61253b81612a6b565b50565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126a283611659565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60005b8181101561272c5760016008600082825461270691906144a0565b9250508190555061271983600854612f81565b8080612724906146e0565b9150506126eb565b505050565b600061273c826125bb565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277290614161565b60405180910390fd5b600061278683611659565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806127f557508373ffffffffffffffffffffffffffffffffffffffff166127dd84610b77565b73ffffffffffffffffffffffffffffffffffffffff16145b80612806575061280581856122ae565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661282f82611659565b73ffffffffffffffffffffffffffffffffffffffff1614612885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287c906142a1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ec90614101565b60405180910390fd5b612900838383612f9f565b61290b60008261262f565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461295b9190614581565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129b291906144a0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9790614121565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612c919190613fe4565b60405180910390a3505050565b612ca984848461280f565b612cb584848484612fa4565b612cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ceb90614061565b60405180910390fd5b50505050565b6060600f8054612d099061467d565b80601f0160208091040260200160405190810160405280929190818152602001828054612d359061467d565b8015612d825780601f10612d5757610100808354040283529160200191612d82565b820191906000526020600020905b815481529060010190602001808311612d6557829003601f168201915b5050505050905090565b60606000821415612dd4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612ee8565b600082905060005b60008214612e06578080612def906146e0565b915050600a82612dff91906144f6565b9150612ddc565b60008167ffffffffffffffff811115612e2257612e21614816565b5b6040519080825280601f01601f191660200182016040528015612e545781602001600182028036833780820191505090505b5090505b60008514612ee157600182612e6d9190614581565b9150600a85612e7c9190614729565b6030612e8891906144a0565b60f81b818381518110612e9e57612e9d6147e7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612eda91906144f6565b9450612e58565b8093505050505b919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612f9b82826040518060200160405280600081525061313b565b5050565b505050565b6000612fc58473ffffffffffffffffffffffffffffffffffffffff1661253e565b1561312e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612fee612627565b8786866040518563ffffffff1660e01b81526004016130109493929190613f4d565b602060405180830381600087803b15801561302a57600080fd5b505af192505050801561305b57506040513d601f19601f8201168201806040525081019061305891906138f2565b60015b6130de573d806000811461308b576040519150601f19603f3d011682016040523d82523d6000602084013e613090565b606091505b506000815114156130d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cd90614061565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613133565b600190505b949350505050565b6131458383613196565b6131526000848484612fa4565b613191576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318890614061565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131fd90614221565b60405180910390fd5b61320f816125bb565b1561324f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613246906140a1565b60405180910390fd5b61325b60008383612f9f565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132ab91906144a0565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546133709061467d565b90600052602060002090601f01602090048101928261339257600085556133d9565b82601f106133ab57805160ff19168380011785556133d9565b828001600101855582156133d9579182015b828111156133d85782518255916020019190600101906133bd565b5b5090506133e691906133ea565b5090565b5b808211156134035760008160009055506001016133eb565b5090565b600061341a61341584614381565b61435c565b9050808382526020820190508285602086028201111561343d5761343c61484f565b5b60005b8581101561346d578161345388826134fb565b845260208401935060208301925050600181019050613440565b5050509392505050565b600061348a613485846143ad565b61435c565b9050828152602081018484840111156134a6576134a5614854565b5b6134b184828561463b565b509392505050565b60006134cc6134c7846143de565b61435c565b9050828152602081018484840111156134e8576134e7614854565b5b6134f384828561463b565b509392505050565b60008135905061350a81614e89565b92915050565b60008083601f8401126135265761352561484a565b5b8235905067ffffffffffffffff81111561354357613542614845565b5b60208301915083602082028301111561355f5761355e61484f565b5b9250929050565b600082601f83011261357b5761357a61484a565b5b813561358b848260208601613407565b91505092915050565b6000813590506135a381614ea0565b92915050565b6000813590506135b881614eb7565b92915050565b6000815190506135cd81614eb7565b92915050565b600082601f8301126135e8576135e761484a565b5b81356135f8848260208601613477565b91505092915050565b60008151905061361081614ece565b92915050565b600082601f83011261362b5761362a61484a565b5b813561363b8482602086016134b9565b91505092915050565b60008135905061365381614ee5565b92915050565b60006020828403121561366f5761366e61485e565b5b600061367d848285016134fb565b91505092915050565b6000806040838503121561369d5761369c61485e565b5b60006136ab858286016134fb565b92505060206136bc858286016134fb565b9150509250929050565b6000806000606084860312156136df576136de61485e565b5b60006136ed868287016134fb565b93505060206136fe868287016134fb565b925050604061370f86828701613644565b9150509250925092565b600080600080608085870312156137335761373261485e565b5b6000613741878288016134fb565b9450506020613752878288016134fb565b935050604061376387828801613644565b925050606085013567ffffffffffffffff81111561378457613783614859565b5b613790878288016135d3565b91505092959194509250565b600080604083850312156137b3576137b261485e565b5b60006137c1858286016134fb565b92505060206137d285828601613594565b9150509250929050565b600080604083850312156137f3576137f261485e565b5b6000613801858286016134fb565b925050602061381285828601613644565b9150509250929050565b600080602083850312156138335761383261485e565b5b600083013567ffffffffffffffff81111561385157613850614859565b5b61385d85828601613510565b92509250509250929050565b600080604083850312156138805761387f61485e565b5b600083013567ffffffffffffffff81111561389e5761389d614859565b5b6138aa85828601613566565b92505060206138bb85828601613594565b9150509250929050565b6000602082840312156138db576138da61485e565b5b60006138e9848285016135a9565b91505092915050565b6000602082840312156139085761390761485e565b5b6000613916848285016135be565b91505092915050565b6000602082840312156139355761393461485e565b5b600061394384828501613601565b91505092915050565b6000602082840312156139625761396161485e565b5b600082013567ffffffffffffffff8111156139805761397f614859565b5b61398c84828501613616565b91505092915050565b6000602082840312156139ab576139aa61485e565b5b60006139b984828501613644565b91505092915050565b60006139ce8383613ee3565b60208301905092915050565b6139e3816145b5565b82525050565b60006139f482614434565b6139fe8185614462565b9350613a098361440f565b8060005b83811015613a3a578151613a2188826139c2565b9750613a2c83614455565b925050600181019050613a0d565b5085935050505092915050565b613a50816145c7565b82525050565b6000613a618261443f565b613a6b8185614473565b9350613a7b81856020860161464a565b613a8481614863565b840191505092915050565b6000613a9a8261444a565b613aa48185614484565b9350613ab481856020860161464a565b613abd81614863565b840191505092915050565b6000613ad38261444a565b613add8185614495565b9350613aed81856020860161464a565b80840191505092915050565b60008154613b068161467d565b613b108186614495565b94506001821660008114613b2b5760018114613b3c57613b6f565b60ff19831686528186019350613b6f565b613b458561441f565b60005b83811015613b6757815481890152600182019150602081019050613b48565b838801955050505b50505092915050565b6000613b85601f83614484565b9150613b9082614874565b602082019050919050565b6000613ba8601f83614484565b9150613bb38261489d565b602082019050919050565b6000613bcb603283614484565b9150613bd6826148c6565b604082019050919050565b6000613bee602683614484565b9150613bf982614915565b604082019050919050565b6000613c11601c83614484565b9150613c1c82614964565b602082019050919050565b6000613c34601e83614484565b9150613c3f8261498d565b602082019050919050565b6000613c57601d83614484565b9150613c62826149b6565b602082019050919050565b6000613c7a602483614484565b9150613c85826149df565b604082019050919050565b6000613c9d601983614484565b9150613ca882614a2e565b602082019050919050565b6000613cc0601783614484565b9150613ccb82614a57565b602082019050919050565b6000613ce3602c83614484565b9150613cee82614a80565b604082019050919050565b6000613d06601783614484565b9150613d1182614acf565b602082019050919050565b6000613d29603883614484565b9150613d3482614af8565b604082019050919050565b6000613d4c602a83614484565b9150613d5782614b47565b604082019050919050565b6000613d6f602983614484565b9150613d7a82614b96565b604082019050919050565b6000613d92602783614484565b9150613d9d82614be5565b604082019050919050565b6000613db5602083614484565b9150613dc082614c34565b602082019050919050565b6000613dd8602c83614484565b9150613de382614c5d565b604082019050919050565b6000613dfb601d83614484565b9150613e0682614cac565b602082019050919050565b6000613e1e602083614484565b9150613e2982614cd5565b602082019050919050565b6000613e41602983614484565b9150613e4c82614cfe565b604082019050919050565b6000613e64602f83614484565b9150613e6f82614d4d565b604082019050919050565b6000613e87602183614484565b9150613e9282614d9c565b604082019050919050565b6000613eaa603183614484565b9150613eb582614deb565b604082019050919050565b6000613ecd602283614484565b9150613ed882614e3a565b604082019050919050565b613eec81614631565b82525050565b613efb81614631565b82525050565b6000613f0d8286613ac8565b9150613f198285613ac8565b9150613f258284613af9565b9150819050949350505050565b6000602082019050613f4760008301846139da565b92915050565b6000608082019050613f6260008301876139da565b613f6f60208301866139da565b613f7c6040830185613ef2565b8181036060830152613f8e8184613a56565b905095945050505050565b6000604082019050613fae60008301856139da565b613fbb6020830184613ef2565b9392505050565b60006020820190508181036000830152613fdc81846139e9565b905092915050565b6000602082019050613ff96000830184613a47565b92915050565b600060208201905081810360008301526140198184613a8f565b905092915050565b6000602082019050818103600083015261403a81613b78565b9050919050565b6000602082019050818103600083015261405a81613b9b565b9050919050565b6000602082019050818103600083015261407a81613bbe565b9050919050565b6000602082019050818103600083015261409a81613be1565b9050919050565b600060208201905081810360008301526140ba81613c04565b9050919050565b600060208201905081810360008301526140da81613c27565b9050919050565b600060208201905081810360008301526140fa81613c4a565b9050919050565b6000602082019050818103600083015261411a81613c6d565b9050919050565b6000602082019050818103600083015261413a81613c90565b9050919050565b6000602082019050818103600083015261415a81613cb3565b9050919050565b6000602082019050818103600083015261417a81613cd6565b9050919050565b6000602082019050818103600083015261419a81613cf9565b9050919050565b600060208201905081810360008301526141ba81613d1c565b9050919050565b600060208201905081810360008301526141da81613d3f565b9050919050565b600060208201905081810360008301526141fa81613d62565b9050919050565b6000602082019050818103600083015261421a81613d85565b9050919050565b6000602082019050818103600083015261423a81613da8565b9050919050565b6000602082019050818103600083015261425a81613dcb565b9050919050565b6000602082019050818103600083015261427a81613dee565b9050919050565b6000602082019050818103600083015261429a81613e11565b9050919050565b600060208201905081810360008301526142ba81613e34565b9050919050565b600060208201905081810360008301526142da81613e57565b9050919050565b600060208201905081810360008301526142fa81613e7a565b9050919050565b6000602082019050818103600083015261431a81613e9d565b9050919050565b6000602082019050818103600083015261433a81613ec0565b9050919050565b60006020820190506143566000830184613ef2565b92915050565b6000614366614377565b905061437282826146af565b919050565b6000604051905090565b600067ffffffffffffffff82111561439c5761439b614816565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156143c8576143c7614816565b5b6143d182614863565b9050602081019050919050565b600067ffffffffffffffff8211156143f9576143f8614816565b5b61440282614863565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006144ab82614631565b91506144b683614631565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144eb576144ea61475a565b5b828201905092915050565b600061450182614631565b915061450c83614631565b92508261451c5761451b614789565b5b828204905092915050565b600061453282614631565b915061453d83614631565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156145765761457561475a565b5b828202905092915050565b600061458c82614631565b915061459783614631565b9250828210156145aa576145a961475a565b5b828203905092915050565b60006145c082614611565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061460a826145b5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000600282049050600182168061469557607f821691505b602082108114156146a9576146a86147b8565b5b50919050565b6146b882614863565b810181811067ffffffffffffffff821117156146d7576146d6614816565b5b80604052505050565b60006146eb82614631565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561471e5761471d61475a565b5b600182019050919050565b600061473482614631565b915061473f83614631565b92508261474f5761474e614789565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e6f7420616c6c6f77656420746f20616464206e756c6c206164647265737300600082015250565b7f4d696e74696e67206973206e6f742063757272656e746c792061637469766500600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f52656163686564206d61782067696674696e6720616c6c6f77616e63652e0000600082015250565b7f496e73756666696369656e742045544820666f72207175616e74697479000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4e6f7420656e6f756768206c65667420746f2067696674000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d757374206d696e74206174206c65617374206f6e652e000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f507572636861736520776f756c642065786365656420617661696c61626c652060008201527f737570706c792e00000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f596f7520617265206e6f74206f6e2074686520616c6c6f77206c697374000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f43616e6e6f7420676f206f76657220746865207075726368617365206c696d6960008201527f742e000000000000000000000000000000000000000000000000000000000000602082015250565b614e92816145b5565b8114614e9d57600080fd5b50565b614ea9816145c7565b8114614eb457600080fd5b50565b614ec0816145d3565b8114614ecb57600080fd5b50565b614ed7816145ff565b8114614ee257600080fd5b50565b614eee81614631565b8114614ef957600080fd5b5056fea26469706673582212206bca1b9173d721b6cdeb8198419f3d26267b15339822d8a27a0a003dfe60bcee64736f6c63430008070033

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

36304:8007:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21135:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22080:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23639:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44202:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43859:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23162:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41362:409;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36509:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36782:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36708:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36616:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24389:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41815:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39289:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37189:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43615:150;;;;;;;;;;;;;:::i;:::-;;37096:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24799:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39722:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42930:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37254:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42464:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21774:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44046:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21504:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39121:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42614:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35288:103;;;;;;;;;;;;;:::i;:::-;;36925:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43303:98;;;;;;;;;;;;;:::i;:::-;;34637:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42314:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22249:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43454:100;;;;;;;;;;;;;:::i;:::-;;36439:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40635:677;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23932:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43175:76;;;;;;;;;;;;;:::i;:::-;;25055:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36881:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38403:540;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36546:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37940:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42789:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35546:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21135:305;21237:4;21289:25;21274:40;;;:11;:40;;;;:105;;;;21346:33;21331:48;;;:11;:48;;;;21274:105;:158;;;;21396:36;21420:11;21396:23;:36::i;:::-;21274:158;21254:178;;21135:305;;;:::o;22080:100::-;22134:13;22167:5;22160:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22080:100;:::o;23639:221::-;23715:7;23743:16;23751:7;23743;:16::i;:::-;23735:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23828:15;:24;23844:7;23828:24;;;;;;;;;;;;;;;;;;;;;23821:31;;23639:221;;;:::o;44202:106::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44293:7:::1;44280:10;:20;;;;44202:106:::0;:::o;43859:109::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43953:7:::1;43937:13;:23;;;;43859:109:::0;:::o;23162:411::-;23243:13;23259:23;23274:7;23259:14;:23::i;:::-;23243:39;;23307:5;23301:11;;:2;:11;;;;23293:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;23401:5;23385:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;23410:37;23427:5;23434:12;:10;:12::i;:::-;23410:16;:37::i;:::-;23385:62;23363:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;23544:21;23553:2;23557:7;23544:8;:21::i;:::-;23232:341;23162:411;;:::o;41362:409::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41470:9:::1;;41457:3;;:10;;41443:11;;:24;;;;:::i;:::-;:36;41435:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;41552:10;;41538:3;;:10;;41526:9;;:22;;;;:::i;:::-;:36;;41518:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;41615:9;41610:154;41634:3;;:10;;41630:1;:14;41610:154;;;41679:1;41666:9;;:14;;;;;;;:::i;:::-;;;;;;;;41734:18;41742:3;;41746:1;41742:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41750:1;41734:7;:18::i;:::-;41646:3;;;;;:::i;:::-;;;;41610:154;;;;41362:409:::0;;:::o;36509:30::-;;;;:::o;36782:28::-;;;;:::o;36708:31::-;;;;:::o;36616:33::-;;;;:::o;24389:339::-;24584:41;24603:12;:10;:12::i;:::-;24617:7;24584:18;:41::i;:::-;24576:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24692:28;24702:4;24708:2;24712:7;24692:9;:28::i;:::-;24389:339;;;:::o;41815:149::-;41865:7;40401:1;40391:7;:11;40383:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40487:9;;40476:7;40463:10;;40449:11;;:24;;;;:::i;:::-;:34;;;;:::i;:::-;:47;;40441:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;34868:12:::1;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41931:25:::2;41939:7;:5;:7::i;:::-;41948;41931;:25::i;:::-;41815:149:::0;;:::o;39289:363::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39394:9:::1;39389:256;39413:12;:19;39409:1;:23;39389:256;;;39489:1;39462:29;;:12;39475:1;39462:15;;;;;;;;:::i;:::-;;;;;;;;:29;;;;39454:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;39621:12;39592:9;:26;39602:12;39615:1;39602:15;;;;;;;;:::i;:::-;;;;;;;;39592:26;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;39434:3;;;;;:::i;:::-;;;;39389:256;;;;39289:363:::0;;:::o;37189:32::-;;;;;;;;;;;;;:::o;43615:150::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43670:15:::1;43688:21;43670:39;;43728:10;43720:28;;:37;43749:7;43720:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43659:106;43615:150::o:0;37096:32::-;;;;;;;;;;;;;:::o;24799:185::-;24937:39;24954:4;24960:2;24964:7;24937:39;;;;;;;;;;;;:16;:39::i;:::-;24799:185;;;:::o;39722:608::-;39782:16;39811:18;39832:17;39842:6;39832:9;:17::i;:::-;39811:38;;39860:25;39902:10;39888:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39860:53;;39924:15;39942:1;39924:19;;39954:18;39989:307;40009:10;39996;:23;:47;;;;;40034:9;;40023:7;:20;;39996:47;39989:307;;;40060:15;40078:16;40086:7;40078;:16::i;:::-;40060:34;;40124:6;40113:17;;:7;:17;;;40109:152;;;40207:7;40184:8;40193:10;40184:20;;;;;;;;:::i;:::-;;;;;;;:30;;;;;40233:12;;;;;:::i;:::-;;;;40109:152;40275:9;;;;;:::i;:::-;;;;40045:251;39989:307;;;40314:8;40307:15;;;;;;39722:608;;;:::o;42930:112::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43030:4:::1;43014:13;:20;;;;;;;;;;;;:::i;:::-;;42930:112:::0;:::o;37254:28::-;;;;;;;;;;;;;:::o;42464:105::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42553:8:::1;42543:7;:18;;;;;;;;;;;;:::i;:::-;;42464:105:::0;:::o;21774:239::-;21846:7;21866:13;21882:7;:16;21890:7;21882:16;;;;;;;;;;;;;;;;;;;;;21866:32;;21934:1;21917:19;;:5;:19;;;;21909:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22000:5;21993:12;;;21774:239;;;:::o;44046:101::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44132:7:::1;44120:9;:19;;;;44046:101:::0;:::o;21504:208::-;21576:7;21621:1;21604:19;;:5;:19;;;;21596:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21688:9;:16;21698:5;21688:16;;;;;;;;;;;;;;;;21681:23;;21504:208;;;:::o;39121:112::-;39180:4;39209:9;:16;39219:5;39209:16;;;;;;;;;;;;;;;;;;;;;;;;;39202:23;;39121:112;;;:::o;42614:108::-;42669:13;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42707:7:::1;42700:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42614:108:::0;:::o;35288:103::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35353:30:::1;35380:1;35353:18;:30::i;:::-;35288:103::o:0;36925:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43303:98::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43380:13:::1;;;;;;;;;;;43379:14;43363:13;;:30;;;;;;;;;;;;;;;;;;43303:98::o:0;34637:87::-;34683:7;34710:6;;;;;;;;;;;34703:13;;34637:87;:::o;42314:91::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42391:6:::1;42383:5;:14;;;;42314:91:::0;:::o;22249:104::-;22305:13;22338:7;22331:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22249:104;:::o;43454:100::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43533:13:::1;;;;;;;;;;;43532:14;43516:13;;:30;;;;;;;;;;;;;;;;;;43454:100::o:0;36439:33::-;;;;:::o;40635:677::-;40689:7;40401:1;40391:7;:11;40383:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;40487:9;;40476:7;40463:10;;40449:11;;:24;;;;:::i;:::-;:34;;;;:::i;:::-;:47;;40441:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;40717:13:::1;;;;;;;;;;;40709:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40784:13;;;;;;;;;;;40779:118;;40833:13;;40822:7;:24;;40814:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40779:118;40934:9;40923:7;40915:5;;:15;;;;:::i;:::-;:28;;40907:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;40990:14;41007:12;:10;:12::i;:::-;40990:29;;41091:4;41074:21;;:13;;;;;;;;;;;:21;;;41070:117;;;41120:21;41134:6;41120:13;:21::i;:::-;41112:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41070:117;41239:24;41247:6;41255:7;41239;:24::i;:::-;41281:23;41288:6;41296:7;41281:23;;;;;;;:::i;:::-;;;;;;;;40698:614;40635:677:::0;;:::o;23932:155::-;24027:52;24046:12;:10;:12::i;:::-;24060:8;24070;24027:18;:52::i;:::-;23932:155;;:::o;43175:76::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43239:4:::1;43228:8;;:15;;;;;;;;;;;;;;;;;;43175:76::o:0;25055:328::-;25230:41;25249:12;:10;:12::i;:::-;25263:7;25230:18;:41::i;:::-;25222:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25336:39;25350:4;25356:2;25360:7;25369:5;25336:13;:39::i;:::-;25055:328;;;;:::o;36881:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38403:540::-;38491:13;38521:16;38529:7;38521;:16::i;:::-;38513:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38685:5;38673:17;;:8;;;;;;;;;;;:17;;;38669:81;;;38724:14;38717:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38669:81;38764:28;38795:10;:8;:10::i;:::-;38764:41;;38854:1;38829:14;38823:28;:32;:115;;;;;;;;;;;;;;;;;38882:14;38898:18;:7;:16;:18::i;:::-;38918:13;38865:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38823:115;38816:122;;;38403:540;;;;:::o;36546:32::-;;;;:::o;37940:399::-;38029:4;38104:27;38148:20;;;;;;;;;;;38104:65;;38225:8;38184:49;;38192:13;:21;;;38214:5;38192:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38184:49;;;38180:93;;;38257:4;38250:11;;;;;38180:93;38292:39;38315:5;38322:8;38292:22;:39::i;:::-;38285:46;;;37940:399;;;;;:::o;42789:133::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42899:15:::1;42882:14;:32;;;;;;;;;;;;:::i;:::-;;42789:133:::0;:::o;35546:201::-;34868:12;:10;:12::i;:::-;34857:23;;:7;:5;:7::i;:::-;:23;;;34849:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35655:1:::1;35635:22;;:8;:22;;;;35627:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35711:28;35730:8;35711:18;:28::i;:::-;35546:201:::0;:::o;2867:387::-;2927:4;3135:12;3202:7;3190:20;3182:28;;3245:1;3238:4;:8;3231:15;;;2867:387;;;:::o;13011:157::-;13096:4;13135:25;13120:40;;;:11;:40;;;;13113:47;;13011:157;;;:::o;26893:127::-;26958:4;27010:1;26982:30;;:7;:16;26990:7;26982:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26975:37;;26893:127;;;:::o;19529:98::-;19582:7;19609:10;19602:17;;19529:98;:::o;30875:174::-;30977:2;30950:15;:24;30966:7;30950:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31033:7;31029:2;30995:46;;31004:23;31019:7;31004:14;:23::i;:::-;30995:46;;;;;;;;;;;;30875:174;;:::o;41972:279::-;42048:9;42043:201;42067:11;42063:1;:15;42043:201;;;42152:1;42137:11;;:16;;;;;;;:::i;:::-;;;;;;;;42205:27;42215:3;42220:11;;42205:9;:27::i;:::-;42080:3;;;;;:::i;:::-;;;;42043:201;;;;41972:279;;:::o;27187:348::-;27280:4;27305:16;27313:7;27305;:16::i;:::-;27297:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27381:13;27397:23;27412:7;27397:14;:23::i;:::-;27381:39;;27450:5;27439:16;;:7;:16;;;:51;;;;27483:7;27459:31;;:20;27471:7;27459:11;:20::i;:::-;:31;;;27439:51;:87;;;;27494:32;27511:5;27518:7;27494:16;:32::i;:::-;27439:87;27431:96;;;27187:348;;;;:::o;30179:578::-;30338:4;30311:31;;:23;30326:7;30311:14;:23::i;:::-;:31;;;30303:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30421:1;30407:16;;:2;:16;;;;30399:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30477:39;30498:4;30504:2;30508:7;30477:20;:39::i;:::-;30581:29;30598:1;30602:7;30581:8;:29::i;:::-;30642:1;30623:9;:15;30633:4;30623:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;30671:1;30654:9;:13;30664:2;30654:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30702:2;30683:7;:16;30691:7;30683:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30741:7;30737:2;30722:27;;30731:4;30722:27;;;;;;;;;;;;30179:578;;;:::o;35907:191::-;35981:16;36000:6;;;;;;;;;;;35981:25;;36026:8;36017:6;;:17;;;;;;;;;;;;;;;;;;36081:8;36050:40;;36071:8;36050:40;;;;;;;;;;;;35970:128;35907:191;:::o;31191:315::-;31346:8;31337:17;;:5;:17;;;;31329:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31433:8;31395:18;:25;31414:5;31395:25;;;;;;;;;;;;;;;:35;31421:8;31395:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31479:8;31457:41;;31472:5;31457:41;;;31489:8;31457:41;;;;;;:::i;:::-;;;;;;;;31191:315;;;:::o;26265:::-;26422:28;26432:4;26438:2;26442:7;26422:9;:28::i;:::-;26469:48;26492:4;26498:2;26502:7;26511:5;26469:22;:48::i;:::-;26461:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26265:315;;;;:::o;38951:113::-;39011:13;39049:7;39042:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38951:113;:::o;288:723::-;344:13;574:1;565:5;:10;561:53;;;592:10;;;;;;;;;;;;;;;;;;;;;561:53;624:12;639:5;624:20;;655:14;680:78;695:1;687:4;:9;680:78;;713:8;;;;;:::i;:::-;;;;744:2;736:10;;;;;:::i;:::-;;;680:78;;;768:19;800:6;790:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;768:39;;818:154;834:1;825:5;:10;818:154;;862:1;852:11;;;;;:::i;:::-;;;929:2;921:5;:10;;;;:::i;:::-;908:2;:24;;;;:::i;:::-;895:39;;878:6;885;878:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;958:2;949:11;;;;;:::i;:::-;;;818:154;;;996:6;982:21;;;;;288:723;;;;:::o;24158:164::-;24255:4;24279:18;:25;24298:5;24279:25;;;;;;;;;;;;;;;:35;24305:8;24279:35;;;;;;;;;;;;;;;;;;;;;;;;;24272:42;;24158:164;;;;:::o;27877:110::-;27953:26;27963:2;27967:7;27953:26;;;;;;;;;;;;:9;:26::i;:::-;27877:110;;:::o;33442:126::-;;;;:::o;32071:799::-;32226:4;32247:15;:2;:13;;;:15::i;:::-;32243:620;;;32299:2;32283:36;;;32320:12;:10;:12::i;:::-;32334:4;32340:7;32349:5;32283:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32279:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32542:1;32525:6;:13;:18;32521:272;;;32568:60;;;;;;;;;;:::i;:::-;;;;;;;;32521:272;32743:6;32737:13;32728:6;32724:2;32720:15;32713:38;32279:529;32416:41;;;32406:51;;;:6;:51;;;;32399:58;;;;;32243:620;32847:4;32840:11;;32071:799;;;;;;;:::o;28214:321::-;28344:18;28350:2;28354:7;28344:5;:18::i;:::-;28395:54;28426:1;28430:2;28434:7;28443:5;28395:22;:54::i;:::-;28373:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28214:321;;;:::o;28871:382::-;28965:1;28951:16;;:2;:16;;;;28943:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29024:16;29032:7;29024;:16::i;:::-;29023:17;29015:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29086:45;29115:1;29119:2;29123:7;29086:20;:45::i;:::-;29161:1;29144:9;:13;29154:2;29144:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29192:2;29173:7;:16;29181:7;29173:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29237:7;29233:2;29212:33;;29229:1;29212:33;;;;;;;;;;;;28871:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:137::-;2899:5;2937:6;2924:20;2915:29;;2953:32;2979:5;2953:32;:::i;:::-;2854:137;;;;:::o;2997:141::-;3053:5;3084:6;3078:13;3069:22;;3100:32;3126:5;3100:32;:::i;:::-;2997:141;;;;:::o;3157:338::-;3212:5;3261:3;3254:4;3246:6;3242:17;3238:27;3228:122;;3269:79;;:::i;:::-;3228:122;3386:6;3373:20;3411:78;3485:3;3477:6;3470:4;3462:6;3458:17;3411:78;:::i;:::-;3402:87;;3218:277;3157:338;;;;:::o;3501:201::-;3587:5;3618:6;3612:13;3603:22;;3634:62;3690:5;3634:62;:::i;:::-;3501:201;;;;:::o;3722:340::-;3778:5;3827:3;3820:4;3812:6;3808:17;3804:27;3794:122;;3835:79;;:::i;:::-;3794:122;3952:6;3939:20;3977:79;4052:3;4044:6;4037:4;4029:6;4025:17;3977:79;:::i;:::-;3968:88;;3784:278;3722:340;;;;:::o;4068:139::-;4114:5;4152:6;4139:20;4130:29;;4168:33;4195:5;4168:33;:::i;:::-;4068:139;;;;:::o;4213:329::-;4272:6;4321:2;4309:9;4300:7;4296:23;4292:32;4289:119;;;4327:79;;:::i;:::-;4289:119;4447:1;4472:53;4517:7;4508:6;4497:9;4493:22;4472:53;:::i;:::-;4462:63;;4418:117;4213:329;;;;:::o;4548:474::-;4616:6;4624;4673:2;4661:9;4652:7;4648:23;4644:32;4641:119;;;4679:79;;:::i;:::-;4641:119;4799:1;4824:53;4869:7;4860:6;4849:9;4845:22;4824:53;:::i;:::-;4814:63;;4770:117;4926:2;4952:53;4997:7;4988:6;4977:9;4973:22;4952:53;:::i;:::-;4942:63;;4897:118;4548:474;;;;;:::o;5028:619::-;5105:6;5113;5121;5170:2;5158:9;5149:7;5145:23;5141:32;5138:119;;;5176:79;;:::i;:::-;5138:119;5296:1;5321:53;5366:7;5357:6;5346:9;5342:22;5321:53;:::i;:::-;5311:63;;5267:117;5423:2;5449:53;5494:7;5485:6;5474:9;5470:22;5449:53;:::i;:::-;5439:63;;5394:118;5551:2;5577:53;5622:7;5613:6;5602:9;5598:22;5577:53;:::i;:::-;5567:63;;5522:118;5028:619;;;;;:::o;5653:943::-;5748:6;5756;5764;5772;5821:3;5809:9;5800:7;5796:23;5792:33;5789:120;;;5828:79;;:::i;:::-;5789:120;5948:1;5973:53;6018:7;6009:6;5998:9;5994:22;5973:53;:::i;:::-;5963:63;;5919:117;6075:2;6101:53;6146:7;6137:6;6126:9;6122:22;6101:53;:::i;:::-;6091:63;;6046:118;6203:2;6229:53;6274:7;6265:6;6254:9;6250:22;6229:53;:::i;:::-;6219:63;;6174:118;6359:2;6348:9;6344:18;6331:32;6390:18;6382:6;6379:30;6376:117;;;6412:79;;:::i;:::-;6376:117;6517:62;6571:7;6562:6;6551:9;6547:22;6517:62;:::i;:::-;6507:72;;6302:287;5653:943;;;;;;;:::o;6602:468::-;6667:6;6675;6724:2;6712:9;6703:7;6699:23;6695:32;6692:119;;;6730:79;;:::i;:::-;6692:119;6850:1;6875:53;6920:7;6911:6;6900:9;6896:22;6875:53;:::i;:::-;6865:63;;6821:117;6977:2;7003:50;7045:7;7036:6;7025:9;7021:22;7003:50;:::i;:::-;6993:60;;6948:115;6602:468;;;;;:::o;7076:474::-;7144:6;7152;7201:2;7189:9;7180:7;7176:23;7172:32;7169:119;;;7207:79;;:::i;:::-;7169:119;7327:1;7352:53;7397:7;7388:6;7377:9;7373:22;7352:53;:::i;:::-;7342:63;;7298:117;7454:2;7480:53;7525:7;7516:6;7505:9;7501:22;7480:53;:::i;:::-;7470:63;;7425:118;7076:474;;;;;:::o;7556:559::-;7642:6;7650;7699:2;7687:9;7678:7;7674:23;7670:32;7667:119;;;7705:79;;:::i;:::-;7667:119;7853:1;7842:9;7838:17;7825:31;7883:18;7875:6;7872:30;7869:117;;;7905:79;;:::i;:::-;7869:117;8018:80;8090:7;8081:6;8070:9;8066:22;8018:80;:::i;:::-;8000:98;;;;7796:312;7556:559;;;;;:::o;8121:678::-;8211:6;8219;8268:2;8256:9;8247:7;8243:23;8239:32;8236:119;;;8274:79;;:::i;:::-;8236:119;8422:1;8411:9;8407:17;8394:31;8452:18;8444:6;8441:30;8438:117;;;8474:79;;:::i;:::-;8438:117;8579:78;8649:7;8640:6;8629:9;8625:22;8579:78;:::i;:::-;8569:88;;8365:302;8706:2;8732:50;8774:7;8765:6;8754:9;8750:22;8732:50;:::i;:::-;8722:60;;8677:115;8121:678;;;;;:::o;8805:327::-;8863:6;8912:2;8900:9;8891:7;8887:23;8883:32;8880:119;;;8918:79;;:::i;:::-;8880:119;9038:1;9063:52;9107:7;9098:6;9087:9;9083:22;9063:52;:::i;:::-;9053:62;;9009:116;8805:327;;;;:::o;9138:349::-;9207:6;9256:2;9244:9;9235:7;9231:23;9227:32;9224:119;;;9262:79;;:::i;:::-;9224:119;9382:1;9407:63;9462:7;9453:6;9442:9;9438:22;9407:63;:::i;:::-;9397:73;;9353:127;9138:349;;;;:::o;9493:409::-;9592:6;9641:2;9629:9;9620:7;9616:23;9612:32;9609:119;;;9647:79;;:::i;:::-;9609:119;9767:1;9792:93;9877:7;9868:6;9857:9;9853:22;9792:93;:::i;:::-;9782:103;;9738:157;9493:409;;;;:::o;9908:509::-;9977:6;10026:2;10014:9;10005:7;10001:23;9997:32;9994:119;;;10032:79;;:::i;:::-;9994:119;10180:1;10169:9;10165:17;10152:31;10210:18;10202:6;10199:30;10196:117;;;10232:79;;:::i;:::-;10196:117;10337:63;10392:7;10383:6;10372:9;10368:22;10337:63;:::i;:::-;10327:73;;10123:287;9908:509;;;;:::o;10423:329::-;10482:6;10531:2;10519:9;10510:7;10506:23;10502:32;10499:119;;;10537:79;;:::i;:::-;10499:119;10657:1;10682:53;10727:7;10718:6;10707:9;10703:22;10682:53;:::i;:::-;10672:63;;10628:117;10423:329;;;;:::o;10758:179::-;10827:10;10848:46;10890:3;10882:6;10848:46;:::i;:::-;10926:4;10921:3;10917:14;10903:28;;10758:179;;;;:::o;10943:118::-;11030:24;11048:5;11030:24;:::i;:::-;11025:3;11018:37;10943:118;;:::o;11097:732::-;11216:3;11245:54;11293:5;11245:54;:::i;:::-;11315:86;11394:6;11389:3;11315:86;:::i;:::-;11308:93;;11425:56;11475:5;11425:56;:::i;:::-;11504:7;11535:1;11520:284;11545:6;11542:1;11539:13;11520:284;;;11621:6;11615:13;11648:63;11707:3;11692:13;11648:63;:::i;:::-;11641:70;;11734:60;11787:6;11734:60;:::i;:::-;11724:70;;11580:224;11567:1;11564;11560:9;11555:14;;11520:284;;;11524:14;11820:3;11813:10;;11221:608;;;11097:732;;;;:::o;11835:109::-;11916:21;11931:5;11916:21;:::i;:::-;11911:3;11904:34;11835:109;;:::o;11950:360::-;12036:3;12064:38;12096:5;12064:38;:::i;:::-;12118:70;12181:6;12176:3;12118:70;:::i;:::-;12111:77;;12197:52;12242:6;12237:3;12230:4;12223:5;12219:16;12197:52;:::i;:::-;12274:29;12296:6;12274:29;:::i;:::-;12269:3;12265:39;12258:46;;12040:270;11950:360;;;;:::o;12316:364::-;12404:3;12432:39;12465:5;12432:39;:::i;:::-;12487:71;12551:6;12546:3;12487:71;:::i;:::-;12480:78;;12567:52;12612:6;12607:3;12600:4;12593:5;12589:16;12567:52;:::i;:::-;12644:29;12666:6;12644:29;:::i;:::-;12639:3;12635:39;12628:46;;12408:272;12316:364;;;;:::o;12686:377::-;12792:3;12820:39;12853:5;12820:39;:::i;:::-;12875:89;12957:6;12952:3;12875:89;:::i;:::-;12868:96;;12973:52;13018:6;13013:3;13006:4;12999:5;12995:16;12973:52;:::i;:::-;13050:6;13045:3;13041:16;13034:23;;12796:267;12686:377;;;;:::o;13093:845::-;13196:3;13233:5;13227:12;13262:36;13288:9;13262:36;:::i;:::-;13314:89;13396:6;13391:3;13314:89;:::i;:::-;13307:96;;13434:1;13423:9;13419:17;13450:1;13445:137;;;;13596:1;13591:341;;;;13412:520;;13445:137;13529:4;13525:9;13514;13510:25;13505:3;13498:38;13565:6;13560:3;13556:16;13549:23;;13445:137;;13591:341;13658:38;13690:5;13658:38;:::i;:::-;13718:1;13732:154;13746:6;13743:1;13740:13;13732:154;;;13820:7;13814:14;13810:1;13805:3;13801:11;13794:35;13870:1;13861:7;13857:15;13846:26;;13768:4;13765:1;13761:12;13756:17;;13732:154;;;13915:6;13910:3;13906:16;13899:23;;13598:334;;13412:520;;13200:738;;13093:845;;;;:::o;13944:366::-;14086:3;14107:67;14171:2;14166:3;14107:67;:::i;:::-;14100:74;;14183:93;14272:3;14183:93;:::i;:::-;14301:2;14296:3;14292:12;14285:19;;13944:366;;;:::o;14316:::-;14458:3;14479:67;14543:2;14538:3;14479:67;:::i;:::-;14472:74;;14555:93;14644:3;14555:93;:::i;:::-;14673:2;14668:3;14664:12;14657:19;;14316:366;;;:::o;14688:::-;14830:3;14851:67;14915:2;14910:3;14851:67;:::i;:::-;14844:74;;14927:93;15016:3;14927:93;:::i;:::-;15045:2;15040:3;15036:12;15029:19;;14688:366;;;:::o;15060:::-;15202:3;15223:67;15287:2;15282:3;15223:67;:::i;:::-;15216:74;;15299:93;15388:3;15299:93;:::i;:::-;15417:2;15412:3;15408:12;15401:19;;15060:366;;;:::o;15432:::-;15574:3;15595:67;15659:2;15654:3;15595:67;:::i;:::-;15588:74;;15671:93;15760:3;15671:93;:::i;:::-;15789:2;15784:3;15780:12;15773:19;;15432:366;;;:::o;15804:::-;15946:3;15967:67;16031:2;16026:3;15967:67;:::i;:::-;15960:74;;16043:93;16132:3;16043:93;:::i;:::-;16161:2;16156:3;16152:12;16145:19;;15804:366;;;:::o;16176:::-;16318:3;16339:67;16403:2;16398:3;16339:67;:::i;:::-;16332:74;;16415:93;16504:3;16415:93;:::i;:::-;16533:2;16528:3;16524:12;16517:19;;16176:366;;;:::o;16548:::-;16690:3;16711:67;16775:2;16770:3;16711:67;:::i;:::-;16704:74;;16787:93;16876:3;16787:93;:::i;:::-;16905:2;16900:3;16896:12;16889:19;;16548:366;;;:::o;16920:::-;17062:3;17083:67;17147:2;17142:3;17083:67;:::i;:::-;17076:74;;17159:93;17248:3;17159:93;:::i;:::-;17277:2;17272:3;17268:12;17261:19;;16920:366;;;:::o;17292:::-;17434:3;17455:67;17519:2;17514:3;17455:67;:::i;:::-;17448:74;;17531:93;17620:3;17531:93;:::i;:::-;17649:2;17644:3;17640:12;17633:19;;17292:366;;;:::o;17664:::-;17806:3;17827:67;17891:2;17886:3;17827:67;:::i;:::-;17820:74;;17903:93;17992:3;17903:93;:::i;:::-;18021:2;18016:3;18012:12;18005:19;;17664:366;;;:::o;18036:::-;18178:3;18199:67;18263:2;18258:3;18199:67;:::i;:::-;18192:74;;18275:93;18364:3;18275:93;:::i;:::-;18393:2;18388:3;18384:12;18377:19;;18036:366;;;:::o;18408:::-;18550:3;18571:67;18635:2;18630:3;18571:67;:::i;:::-;18564:74;;18647:93;18736:3;18647:93;:::i;:::-;18765:2;18760:3;18756:12;18749:19;;18408:366;;;:::o;18780:::-;18922:3;18943:67;19007:2;19002:3;18943:67;:::i;:::-;18936:74;;19019:93;19108:3;19019:93;:::i;:::-;19137:2;19132:3;19128:12;19121:19;;18780:366;;;:::o;19152:::-;19294:3;19315:67;19379:2;19374:3;19315:67;:::i;:::-;19308:74;;19391:93;19480:3;19391:93;:::i;:::-;19509:2;19504:3;19500:12;19493:19;;19152:366;;;:::o;19524:::-;19666:3;19687:67;19751:2;19746:3;19687:67;:::i;:::-;19680:74;;19763:93;19852:3;19763:93;:::i;:::-;19881:2;19876:3;19872:12;19865:19;;19524:366;;;:::o;19896:::-;20038:3;20059:67;20123:2;20118:3;20059:67;:::i;:::-;20052:74;;20135:93;20224:3;20135:93;:::i;:::-;20253:2;20248:3;20244:12;20237:19;;19896:366;;;:::o;20268:::-;20410:3;20431:67;20495:2;20490:3;20431:67;:::i;:::-;20424:74;;20507:93;20596:3;20507:93;:::i;:::-;20625:2;20620:3;20616:12;20609:19;;20268:366;;;:::o;20640:::-;20782:3;20803:67;20867:2;20862:3;20803:67;:::i;:::-;20796:74;;20879:93;20968:3;20879:93;:::i;:::-;20997:2;20992:3;20988:12;20981:19;;20640:366;;;:::o;21012:::-;21154:3;21175:67;21239:2;21234:3;21175:67;:::i;:::-;21168:74;;21251:93;21340:3;21251:93;:::i;:::-;21369:2;21364:3;21360:12;21353:19;;21012:366;;;:::o;21384:::-;21526:3;21547:67;21611:2;21606:3;21547:67;:::i;:::-;21540:74;;21623:93;21712:3;21623:93;:::i;:::-;21741:2;21736:3;21732:12;21725:19;;21384:366;;;:::o;21756:::-;21898:3;21919:67;21983:2;21978:3;21919:67;:::i;:::-;21912:74;;21995:93;22084:3;21995:93;:::i;:::-;22113:2;22108:3;22104:12;22097:19;;21756:366;;;:::o;22128:::-;22270:3;22291:67;22355:2;22350:3;22291:67;:::i;:::-;22284:74;;22367:93;22456:3;22367:93;:::i;:::-;22485:2;22480:3;22476:12;22469:19;;22128:366;;;:::o;22500:::-;22642:3;22663:67;22727:2;22722:3;22663:67;:::i;:::-;22656:74;;22739:93;22828:3;22739:93;:::i;:::-;22857:2;22852:3;22848:12;22841:19;;22500:366;;;:::o;22872:::-;23014:3;23035:67;23099:2;23094:3;23035:67;:::i;:::-;23028:74;;23111:93;23200:3;23111:93;:::i;:::-;23229:2;23224:3;23220:12;23213:19;;22872:366;;;:::o;23244:108::-;23321:24;23339:5;23321:24;:::i;:::-;23316:3;23309:37;23244:108;;:::o;23358:118::-;23445:24;23463:5;23445:24;:::i;:::-;23440:3;23433:37;23358:118;;:::o;23482:589::-;23707:3;23729:95;23820:3;23811:6;23729:95;:::i;:::-;23722:102;;23841:95;23932:3;23923:6;23841:95;:::i;:::-;23834:102;;23953:92;24041:3;24032:6;23953:92;:::i;:::-;23946:99;;24062:3;24055:10;;23482:589;;;;;;:::o;24077:222::-;24170:4;24208:2;24197:9;24193:18;24185:26;;24221:71;24289:1;24278:9;24274:17;24265:6;24221:71;:::i;:::-;24077:222;;;;:::o;24305:640::-;24500:4;24538:3;24527:9;24523:19;24515:27;;24552:71;24620:1;24609:9;24605:17;24596:6;24552:71;:::i;:::-;24633:72;24701:2;24690:9;24686:18;24677:6;24633:72;:::i;:::-;24715;24783:2;24772:9;24768:18;24759:6;24715:72;:::i;:::-;24834:9;24828:4;24824:20;24819:2;24808:9;24804:18;24797:48;24862:76;24933:4;24924:6;24862:76;:::i;:::-;24854:84;;24305:640;;;;;;;:::o;24951:332::-;25072:4;25110:2;25099:9;25095:18;25087:26;;25123:71;25191:1;25180:9;25176:17;25167:6;25123:71;:::i;:::-;25204:72;25272:2;25261:9;25257:18;25248:6;25204:72;:::i;:::-;24951:332;;;;;:::o;25289:373::-;25432:4;25470:2;25459:9;25455:18;25447:26;;25519:9;25513:4;25509:20;25505:1;25494:9;25490:17;25483:47;25547:108;25650:4;25641:6;25547:108;:::i;:::-;25539:116;;25289:373;;;;:::o;25668:210::-;25755:4;25793:2;25782:9;25778:18;25770:26;;25806:65;25868:1;25857:9;25853:17;25844:6;25806:65;:::i;:::-;25668:210;;;;:::o;25884:313::-;25997:4;26035:2;26024:9;26020:18;26012:26;;26084:9;26078:4;26074:20;26070:1;26059:9;26055:17;26048:47;26112:78;26185:4;26176:6;26112:78;:::i;:::-;26104:86;;25884:313;;;;:::o;26203:419::-;26369:4;26407:2;26396:9;26392:18;26384:26;;26456:9;26450:4;26446:20;26442:1;26431:9;26427:17;26420:47;26484:131;26610:4;26484:131;:::i;:::-;26476:139;;26203:419;;;:::o;26628:::-;26794:4;26832:2;26821:9;26817:18;26809:26;;26881:9;26875:4;26871:20;26867:1;26856:9;26852:17;26845:47;26909:131;27035:4;26909:131;:::i;:::-;26901:139;;26628:419;;;:::o;27053:::-;27219:4;27257:2;27246:9;27242:18;27234:26;;27306:9;27300:4;27296:20;27292:1;27281:9;27277:17;27270:47;27334:131;27460:4;27334:131;:::i;:::-;27326:139;;27053:419;;;:::o;27478:::-;27644:4;27682:2;27671:9;27667:18;27659:26;;27731:9;27725:4;27721:20;27717:1;27706:9;27702:17;27695:47;27759:131;27885:4;27759:131;:::i;:::-;27751:139;;27478:419;;;:::o;27903:::-;28069:4;28107:2;28096:9;28092:18;28084:26;;28156:9;28150:4;28146:20;28142:1;28131:9;28127:17;28120:47;28184:131;28310:4;28184:131;:::i;:::-;28176:139;;27903:419;;;:::o;28328:::-;28494:4;28532:2;28521:9;28517:18;28509:26;;28581:9;28575:4;28571:20;28567:1;28556:9;28552:17;28545:47;28609:131;28735:4;28609:131;:::i;:::-;28601:139;;28328:419;;;:::o;28753:::-;28919:4;28957:2;28946:9;28942:18;28934:26;;29006:9;29000:4;28996:20;28992:1;28981:9;28977:17;28970:47;29034:131;29160:4;29034:131;:::i;:::-;29026:139;;28753:419;;;:::o;29178:::-;29344:4;29382:2;29371:9;29367:18;29359:26;;29431:9;29425:4;29421:20;29417:1;29406:9;29402:17;29395:47;29459:131;29585:4;29459:131;:::i;:::-;29451:139;;29178:419;;;:::o;29603:::-;29769:4;29807:2;29796:9;29792:18;29784:26;;29856:9;29850:4;29846:20;29842:1;29831:9;29827:17;29820:47;29884:131;30010:4;29884:131;:::i;:::-;29876:139;;29603:419;;;:::o;30028:::-;30194:4;30232:2;30221:9;30217:18;30209:26;;30281:9;30275:4;30271:20;30267:1;30256:9;30252:17;30245:47;30309:131;30435:4;30309:131;:::i;:::-;30301:139;;30028:419;;;:::o;30453:::-;30619:4;30657:2;30646:9;30642:18;30634:26;;30706:9;30700:4;30696:20;30692:1;30681:9;30677:17;30670:47;30734:131;30860:4;30734:131;:::i;:::-;30726:139;;30453:419;;;:::o;30878:::-;31044:4;31082:2;31071:9;31067:18;31059:26;;31131:9;31125:4;31121:20;31117:1;31106:9;31102:17;31095:47;31159:131;31285:4;31159:131;:::i;:::-;31151:139;;30878:419;;;:::o;31303:::-;31469:4;31507:2;31496:9;31492:18;31484:26;;31556:9;31550:4;31546:20;31542:1;31531:9;31527:17;31520:47;31584:131;31710:4;31584:131;:::i;:::-;31576:139;;31303:419;;;:::o;31728:::-;31894:4;31932:2;31921:9;31917:18;31909:26;;31981:9;31975:4;31971:20;31967:1;31956:9;31952:17;31945:47;32009:131;32135:4;32009:131;:::i;:::-;32001:139;;31728:419;;;:::o;32153:::-;32319:4;32357:2;32346:9;32342:18;32334:26;;32406:9;32400:4;32396:20;32392:1;32381:9;32377:17;32370:47;32434:131;32560:4;32434:131;:::i;:::-;32426:139;;32153:419;;;:::o;32578:::-;32744:4;32782:2;32771:9;32767:18;32759:26;;32831:9;32825:4;32821:20;32817:1;32806:9;32802:17;32795:47;32859:131;32985:4;32859:131;:::i;:::-;32851:139;;32578:419;;;:::o;33003:::-;33169:4;33207:2;33196:9;33192:18;33184:26;;33256:9;33250:4;33246:20;33242:1;33231:9;33227:17;33220:47;33284:131;33410:4;33284:131;:::i;:::-;33276:139;;33003:419;;;:::o;33428:::-;33594:4;33632:2;33621:9;33617:18;33609:26;;33681:9;33675:4;33671:20;33667:1;33656:9;33652:17;33645:47;33709:131;33835:4;33709:131;:::i;:::-;33701:139;;33428:419;;;:::o;33853:::-;34019:4;34057:2;34046:9;34042:18;34034:26;;34106:9;34100:4;34096:20;34092:1;34081:9;34077:17;34070:47;34134:131;34260:4;34134:131;:::i;:::-;34126:139;;33853:419;;;:::o;34278:::-;34444:4;34482:2;34471:9;34467:18;34459:26;;34531:9;34525:4;34521:20;34517:1;34506:9;34502:17;34495:47;34559:131;34685:4;34559:131;:::i;:::-;34551:139;;34278:419;;;:::o;34703:::-;34869:4;34907:2;34896:9;34892:18;34884:26;;34956:9;34950:4;34946:20;34942:1;34931:9;34927:17;34920:47;34984:131;35110:4;34984:131;:::i;:::-;34976:139;;34703:419;;;:::o;35128:::-;35294:4;35332:2;35321:9;35317:18;35309:26;;35381:9;35375:4;35371:20;35367:1;35356:9;35352:17;35345:47;35409:131;35535:4;35409:131;:::i;:::-;35401:139;;35128:419;;;:::o;35553:::-;35719:4;35757:2;35746:9;35742:18;35734:26;;35806:9;35800:4;35796:20;35792:1;35781:9;35777:17;35770:47;35834:131;35960:4;35834:131;:::i;:::-;35826:139;;35553:419;;;:::o;35978:::-;36144:4;36182:2;36171:9;36167:18;36159:26;;36231:9;36225:4;36221:20;36217:1;36206:9;36202:17;36195:47;36259:131;36385:4;36259:131;:::i;:::-;36251:139;;35978:419;;;:::o;36403:::-;36569:4;36607:2;36596:9;36592:18;36584:26;;36656:9;36650:4;36646:20;36642:1;36631:9;36627:17;36620:47;36684:131;36810:4;36684:131;:::i;:::-;36676:139;;36403:419;;;:::o;36828:222::-;36921:4;36959:2;36948:9;36944:18;36936:26;;36972:71;37040:1;37029:9;37025:17;37016:6;36972:71;:::i;:::-;36828:222;;;;:::o;37056:129::-;37090:6;37117:20;;:::i;:::-;37107:30;;37146:33;37174:4;37166:6;37146:33;:::i;:::-;37056:129;;;:::o;37191:75::-;37224:6;37257:2;37251:9;37241:19;;37191:75;:::o;37272:311::-;37349:4;37439:18;37431:6;37428:30;37425:56;;;37461:18;;:::i;:::-;37425:56;37511:4;37503:6;37499:17;37491:25;;37571:4;37565;37561:15;37553:23;;37272:311;;;:::o;37589:307::-;37650:4;37740:18;37732:6;37729:30;37726:56;;;37762:18;;:::i;:::-;37726:56;37800:29;37822:6;37800:29;:::i;:::-;37792:37;;37884:4;37878;37874:15;37866:23;;37589:307;;;:::o;37902:308::-;37964:4;38054:18;38046:6;38043:30;38040:56;;;38076:18;;:::i;:::-;38040:56;38114:29;38136:6;38114:29;:::i;:::-;38106:37;;38198:4;38192;38188:15;38180:23;;37902:308;;;:::o;38216:132::-;38283:4;38306:3;38298:11;;38336:4;38331:3;38327:14;38319:22;;38216:132;;;:::o;38354:141::-;38403:4;38426:3;38418:11;;38449:3;38446:1;38439:14;38483:4;38480:1;38470:18;38462:26;;38354:141;;;:::o;38501:114::-;38568:6;38602:5;38596:12;38586:22;;38501:114;;;:::o;38621:98::-;38672:6;38706:5;38700:12;38690:22;;38621:98;;;:::o;38725:99::-;38777:6;38811:5;38805:12;38795:22;;38725:99;;;:::o;38830:113::-;38900:4;38932;38927:3;38923:14;38915:22;;38830:113;;;:::o;38949:184::-;39048:11;39082:6;39077:3;39070:19;39122:4;39117:3;39113:14;39098:29;;38949:184;;;;:::o;39139:168::-;39222:11;39256:6;39251:3;39244:19;39296:4;39291:3;39287:14;39272:29;;39139:168;;;;:::o;39313:169::-;39397:11;39431:6;39426:3;39419:19;39471:4;39466:3;39462:14;39447:29;;39313:169;;;;:::o;39488:148::-;39590:11;39627:3;39612:18;;39488:148;;;;:::o;39642:305::-;39682:3;39701:20;39719:1;39701:20;:::i;:::-;39696:25;;39735:20;39753:1;39735:20;:::i;:::-;39730:25;;39889:1;39821:66;39817:74;39814:1;39811:81;39808:107;;;39895:18;;:::i;:::-;39808:107;39939:1;39936;39932:9;39925:16;;39642:305;;;;:::o;39953:185::-;39993:1;40010:20;40028:1;40010:20;:::i;:::-;40005:25;;40044:20;40062:1;40044:20;:::i;:::-;40039:25;;40083:1;40073:35;;40088:18;;:::i;:::-;40073:35;40130:1;40127;40123:9;40118:14;;39953:185;;;;:::o;40144:348::-;40184:7;40207:20;40225:1;40207:20;:::i;:::-;40202:25;;40241:20;40259:1;40241:20;:::i;:::-;40236:25;;40429:1;40361:66;40357:74;40354:1;40351:81;40346:1;40339:9;40332:17;40328:105;40325:131;;;40436:18;;:::i;:::-;40325:131;40484:1;40481;40477:9;40466:20;;40144:348;;;;:::o;40498:191::-;40538:4;40558:20;40576:1;40558:20;:::i;:::-;40553:25;;40592:20;40610:1;40592:20;:::i;:::-;40587:25;;40631:1;40628;40625:8;40622:34;;;40636:18;;:::i;:::-;40622:34;40681:1;40678;40674:9;40666:17;;40498:191;;;;:::o;40695:96::-;40732:7;40761:24;40779:5;40761:24;:::i;:::-;40750:35;;40695:96;;;:::o;40797:90::-;40831:7;40874:5;40867:13;40860:21;40849:32;;40797:90;;;:::o;40893:149::-;40929:7;40969:66;40962:5;40958:78;40947:89;;40893:149;;;:::o;41048:125::-;41114:7;41143:24;41161:5;41143:24;:::i;:::-;41132:35;;41048:125;;;:::o;41179:126::-;41216:7;41256:42;41249:5;41245:54;41234:65;;41179:126;;;:::o;41311:77::-;41348:7;41377:5;41366:16;;41311:77;;;:::o;41394:154::-;41478:6;41473:3;41468;41455:30;41540:1;41531:6;41526:3;41522:16;41515:27;41394:154;;;:::o;41554:307::-;41622:1;41632:113;41646:6;41643:1;41640:13;41632:113;;;41731:1;41726:3;41722:11;41716:18;41712:1;41707:3;41703:11;41696:39;41668:2;41665:1;41661:10;41656:15;;41632:113;;;41763:6;41760:1;41757:13;41754:101;;;41843:1;41834:6;41829:3;41825:16;41818:27;41754:101;41603:258;41554:307;;;:::o;41867:320::-;41911:6;41948:1;41942:4;41938:12;41928:22;;41995:1;41989:4;41985:12;42016:18;42006:81;;42072:4;42064:6;42060:17;42050:27;;42006:81;42134:2;42126:6;42123:14;42103:18;42100:38;42097:84;;;42153:18;;:::i;:::-;42097:84;41918:269;41867:320;;;:::o;42193:281::-;42276:27;42298:4;42276:27;:::i;:::-;42268:6;42264:40;42406:6;42394:10;42391:22;42370:18;42358:10;42355:34;42352:62;42349:88;;;42417:18;;:::i;:::-;42349:88;42457:10;42453:2;42446:22;42236:238;42193:281;;:::o;42480:233::-;42519:3;42542:24;42560:5;42542:24;:::i;:::-;42533:33;;42588:66;42581:5;42578:77;42575:103;;;42658:18;;:::i;:::-;42575:103;42705:1;42698:5;42694:13;42687:20;;42480:233;;;:::o;42719:176::-;42751:1;42768:20;42786:1;42768:20;:::i;:::-;42763:25;;42802:20;42820:1;42802:20;:::i;:::-;42797:25;;42841:1;42831:35;;42846:18;;:::i;:::-;42831:35;42887:1;42884;42880:9;42875:14;;42719:176;;;;:::o;42901:180::-;42949:77;42946:1;42939:88;43046:4;43043:1;43036:15;43070:4;43067:1;43060:15;43087:180;43135:77;43132:1;43125:88;43232:4;43229:1;43222:15;43256:4;43253:1;43246:15;43273:180;43321:77;43318:1;43311:88;43418:4;43415:1;43408:15;43442:4;43439:1;43432:15;43459:180;43507:77;43504:1;43497:88;43604:4;43601:1;43594:15;43628:4;43625:1;43618:15;43645:180;43693:77;43690:1;43683:88;43790:4;43787:1;43780:15;43814:4;43811:1;43804:15;43831:117;43940:1;43937;43930:12;43954:117;44063:1;44060;44053:12;44077:117;44186:1;44183;44176:12;44200:117;44309:1;44306;44299:12;44323:117;44432:1;44429;44422:12;44446:117;44555:1;44552;44545:12;44569:102;44610:6;44661:2;44657:7;44652:2;44645:5;44641:14;44637:28;44627:38;;44569:102;;;:::o;44677:181::-;44817:33;44813:1;44805:6;44801:14;44794:57;44677:181;:::o;44864:::-;45004:33;45000:1;44992:6;44988:14;44981:57;44864:181;:::o;45051:237::-;45191:34;45187:1;45179:6;45175:14;45168:58;45260:20;45255:2;45247:6;45243:15;45236:45;45051:237;:::o;45294:225::-;45434:34;45430:1;45422:6;45418:14;45411:58;45503:8;45498:2;45490:6;45486:15;45479:33;45294:225;:::o;45525:178::-;45665:30;45661:1;45653:6;45649:14;45642:54;45525:178;:::o;45709:180::-;45849:32;45845:1;45837:6;45833:14;45826:56;45709:180;:::o;45895:179::-;46035:31;46031:1;46023:6;46019:14;46012:55;45895:179;:::o;46080:223::-;46220:34;46216:1;46208:6;46204:14;46197:58;46289:6;46284:2;46276:6;46272:15;46265:31;46080:223;:::o;46309:175::-;46449:27;46445:1;46437:6;46433:14;46426:51;46309:175;:::o;46490:173::-;46630:25;46626:1;46618:6;46614:14;46607:49;46490:173;:::o;46669:231::-;46809:34;46805:1;46797:6;46793:14;46786:58;46878:14;46873:2;46865:6;46861:15;46854:39;46669:231;:::o;46906:173::-;47046:25;47042:1;47034:6;47030:14;47023:49;46906:173;:::o;47085:243::-;47225:34;47221:1;47213:6;47209:14;47202:58;47294:26;47289:2;47281:6;47277:15;47270:51;47085:243;:::o;47334:229::-;47474:34;47470:1;47462:6;47458:14;47451:58;47543:12;47538:2;47530:6;47526:15;47519:37;47334:229;:::o;47569:228::-;47709:34;47705:1;47697:6;47693:14;47686:58;47778:11;47773:2;47765:6;47761:15;47754:36;47569:228;:::o;47803:226::-;47943:34;47939:1;47931:6;47927:14;47920:58;48012:9;48007:2;47999:6;47995:15;47988:34;47803:226;:::o;48035:182::-;48175:34;48171:1;48163:6;48159:14;48152:58;48035:182;:::o;48223:231::-;48363:34;48359:1;48351:6;48347:14;48340:58;48432:14;48427:2;48419:6;48415:15;48408:39;48223:231;:::o;48460:179::-;48600:31;48596:1;48588:6;48584:14;48577:55;48460:179;:::o;48645:182::-;48785:34;48781:1;48773:6;48769:14;48762:58;48645:182;:::o;48833:228::-;48973:34;48969:1;48961:6;48957:14;48950:58;49042:11;49037:2;49029:6;49025:15;49018:36;48833:228;:::o;49067:234::-;49207:34;49203:1;49195:6;49191:14;49184:58;49276:17;49271:2;49263:6;49259:15;49252:42;49067:234;:::o;49307:220::-;49447:34;49443:1;49435:6;49431:14;49424:58;49516:3;49511:2;49503:6;49499:15;49492:28;49307:220;:::o;49533:236::-;49673:34;49669:1;49661:6;49657:14;49650:58;49742:19;49737:2;49729:6;49725:15;49718:44;49533:236;:::o;49775:221::-;49915:34;49911:1;49903:6;49899:14;49892:58;49984:4;49979:2;49971:6;49967:15;49960:29;49775:221;:::o;50002:122::-;50075:24;50093:5;50075:24;:::i;:::-;50068:5;50065:35;50055:63;;50114:1;50111;50104:12;50055:63;50002:122;:::o;50130:116::-;50200:21;50215:5;50200:21;:::i;:::-;50193:5;50190:32;50180:60;;50236:1;50233;50226:12;50180:60;50130:116;:::o;50252:120::-;50324:23;50341:5;50324:23;:::i;:::-;50317:5;50314:34;50304:62;;50362:1;50359;50352:12;50304:62;50252:120;:::o;50378:180::-;50480:53;50527:5;50480:53;:::i;:::-;50473:5;50470:64;50460:92;;50548:1;50545;50538:12;50460:92;50378:180;:::o;50564:122::-;50637:24;50655:5;50637:24;:::i;:::-;50630:5;50627:35;50617:63;;50676:1;50673;50666:12;50617:63;50564:122;:::o

Swarm Source

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