ETH Price: $3,414.34 (+3.92%)

Token

Half Breeds Hybrid Club (HBHC)
 

Overview

Max Total Supply

516 HBHC

Holders

472

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
mikesnft.eth
Balance
1 HBHC
0x6eef09b526d883f98762a7005fabd2c800dfca44
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HalfBreedsHybridClub

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-02-09
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/utils/Counters.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/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: @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/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: contracts/contract.sol





pragma solidity >=0.7.0 <0.9.0;




contract HalfBreedsHybridClub is ERC721, Ownable {
  using Strings for uint256;
  using Counters for Counters.Counter;

  Counters.Counter private supply;

  string public uriPrefix = "";
  
  uint256 public cost = 0.044 ether;
  uint256 public maxSupply = 5000;
  uint256 public maxMintAmountPerPublicAccount = 3;
  uint256 public maxFreeMintAmountPerAccount = 1;

  bool public paused = true;

  bool public onlyWhitelisted=true;
  address[] public whitelistedAddresses;


  constructor() ERC721("Half Breeds Hybrid Club", "HBHC") {
    
    _mintLoop(msg.sender, 15);
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(_mintAmount > 0, "Invalid mint amount!");
    require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _;
  }

  function totalSupply() public view returns (uint256) {
    return supply.current();
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) {
    require(!paused, "The contract is paused!");
    if(totalSupply()>500){
        require(msg.value >= cost * _mintAmount, "Insufficient funds!");
        require(balanceOf(msg.sender)+_mintAmount<=maxMintAmountPerPublicAccount,"Mint limit exceeded");
    }
    else{
        require(balanceOf(msg.sender)+_mintAmount<=maxFreeMintAmountPerAccount,"Mint limit exceeded");
    }

    _mintLoop(msg.sender, _mintAmount);
  }

  function mintForAddress(uint256 _mintAmount, address _receiver) public mintCompliance(_mintAmount) onlyOwner {
    _mintLoop(_receiver, _mintAmount);
  }

  function walletOfOwner(address _owner)
    public
    view
    returns (uint256[] memory)
  {
    uint256 ownerTokenCount = balanceOf(_owner);
    uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
    uint256 currentTokenId = 1;
    uint256 ownedTokenIndex = 0;

    while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) {
      address currentTokenOwner = ownerOf(currentTokenId);

      if (currentTokenOwner == _owner) {
        ownedTokenIds[ownedTokenIndex] = currentTokenId;

        ownedTokenIndex++;
      }

      currentTokenId++;
    }

    return ownedTokenIds;
  }

  function tokenURI(uint256 _tokenId)
    public
    view
    virtual
    override
    returns (string memory)
  {
    require(
      _exists(_tokenId),
      "ERC721Metadata: URI query for nonexistent token"
    );

    

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



  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }




  function setMaxMintPublicAccount(uint256 _maxMintAmountPerPublicAccount) public onlyOwner {
    maxMintAmountPerPublicAccount = _maxMintAmountPerPublicAccount;
  }
  function setMaxFreeMintAmountPerAccount(uint256 _maxFreeMintAmountPerAccount) public onlyOwner {
    maxFreeMintAmountPerAccount = _maxFreeMintAmountPerAccount;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

 

  function withdraw() public onlyOwner {
   
    // This will transfer the remaining contract balance to the owner.
    // Do not remove this otherwise you will not be able to withdraw the funds.
    // =============================================================================
    (bool os, ) = payable(owner()).call{value: address(this).balance}("");
    require(os);
    // =============================================================================
  }

  function _mintLoop(address _receiver, uint256 _mintAmount) internal {
    for (uint256 i = 0; i < _mintAmount; i++) {
      supply.increment();
      _safeMint(_receiver, supply.current());
    }
  }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeMintAmountPerAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerPublicAccount","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":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxFreeMintAmountPerAccount","type":"uint256"}],"name":"setMaxFreeMintAmountPerAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerPublicAccount","type":"uint256"}],"name":"setMaxMintPublicAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","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":"_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":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600890805190602001906200002b92919062000774565b50669c51c4521e0000600955611388600a556003600b556001600c556001600d60006101000a81548160ff0219169083151502179055506001600d60016101000a81548160ff0219169083151502179055503480156200008a57600080fd5b506040518060400160405280601781526020017f48616c66204272656564732048796272696420436c75620000000000000000008152506040518060400160405280600481526020017f484248430000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010f92919062000774565b5080600190805190602001906200012892919062000774565b5050506200014b6200013f6200016460201b60201c565b6200016c60201b60201c565b6200015e33600f6200023260201b60201c565b62000cdc565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101562000293576200025560076200029860201b620019fd1760201c565b6200027d83620002716007620002ae60201b62001a131760201c565b620002bc60201b60201c565b80806200028a9062000b5f565b91505062000235565b505050565b6001816000016000828254019250508190555050565b600081600001549050919050565b620002de828260405180602001604052806000815250620002e260201b60201c565b5050565b620002f483836200035060201b60201c565b6200030960008484846200053660201b60201c565b6200034b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003429062000999565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620003c3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003ba90620009dd565b60405180910390fd5b620003d481620006f060201b60201c565b1562000417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040e90620009bb565b60405180910390fd5b6200042b600083836200075c60201b60201c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200047d919062000a2c565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000620005648473ffffffffffffffffffffffffffffffffffffffff166200076160201b62001a211760201c565b15620006e3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620005966200016460201b60201c565b8786866040518563ffffffff1660e01b8152600401620005ba949392919062000945565b602060405180830381600087803b158015620005d557600080fd5b505af19250505080156200060957506040513d601f19601f820116820180604052508101906200060691906200083b565b60015b62000692573d80600081146200063c576040519150601f19603f3d011682016040523d82523d6000602084013e62000641565b606091505b506000815114156200068a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006819062000999565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620006e8565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b600080823b905060008111915050919050565b828054620007829062000b29565b90600052602060002090601f016020900481019282620007a65760008555620007f2565b82601f10620007c157805160ff1916838001178555620007f2565b82800160010185558215620007f2579182015b82811115620007f1578251825591602001919060010190620007d4565b5b50905062000801919062000805565b5090565b5b808211156200082057600081600090555060010162000806565b5090565b600081519050620008358162000cc2565b92915050565b60006020828403121562000854576200085362000c0b565b5b6000620008648482850162000824565b91505092915050565b620008788162000a89565b82525050565b60006200088b82620009ff565b62000897818562000a0a565b9350620008a981856020860162000af3565b620008b48162000c10565b840191505092915050565b6000620008ce60328362000a1b565b9150620008db8262000c21565b604082019050919050565b6000620008f5601c8362000a1b565b9150620009028262000c70565b602082019050919050565b60006200091c60208362000a1b565b9150620009298262000c99565b602082019050919050565b6200093f8162000ae9565b82525050565b60006080820190506200095c60008301876200086d565b6200096b60208301866200086d565b6200097a604083018562000934565b81810360608301526200098e81846200087e565b905095945050505050565b60006020820190508181036000830152620009b481620008bf565b9050919050565b60006020820190508181036000830152620009d681620008e6565b9050919050565b60006020820190508181036000830152620009f8816200090d565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600062000a398262000ae9565b915062000a468362000ae9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000a7e5762000a7d62000bad565b5b828201905092915050565b600062000a968262000ac9565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000b1357808201518184015260208101905062000af6565b8381111562000b23576000848401525b50505050565b6000600282049050600182168062000b4257607f821691505b6020821081141562000b595762000b5862000bdc565b5b50919050565b600062000b6c8262000ae9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000ba25762000ba162000bad565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b62000ccd8162000a9d565b811462000cd957600080fd5b50565b613f7e8062000cec6000396000f3fe6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb0114610710578063e985e9c51461073b578063ecc955d314610778578063efbd73f4146107a3578063f2fde38b146107cc576101f9565b8063a22cb46514610644578063b88d4fde1461066d578063ba4e5c4914610696578063c87b56dd146106d3576101f9565b80638da5cb5b116100dc5780638da5cb5b146105a757806395d89b41146105d25780639c70b512146105fd578063a0712d6814610628576101f9565b806370a0823114610501578063715018a61461053e5780637ec4a6591461055557806389dfc8b91461057e576101f9565b806323b872dd1161019057806344a0d68a1161015f57806344a0d68a1461041c5780635c975abb1461044557806362b99ad4146104705780636352211e1461049b57806369703cd4146104d8576101f9565b806323b872dd146103765780633ccfd60b1461039f57806342842e0e146103b6578063438b6300146103df576101f9565b80630b85d4ef116101cc5780630b85d4ef146102cc57806313faede6146102f757806316c38b3c1461032257806318160ddd1461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612b86565b6107f5565b60405161023291906131dd565b60405180910390f35b34801561024757600080fd5b506102506108d7565b60405161025d91906131f8565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612c29565b610969565b60405161029a9190613154565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612b19565b6109ee565b005b3480156102d857600080fd5b506102e1610b06565b6040516102ee91906134ba565b60405180910390f35b34801561030357600080fd5b5061030c610b0c565b60405161031991906134ba565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612b59565b610b12565b005b34801561035757600080fd5b50610360610bab565b60405161036d91906134ba565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612a03565b610bbc565b005b3480156103ab57600080fd5b506103b4610c1c565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190612a03565b610d18565b005b3480156103eb57600080fd5b5061040660048036038101906104019190612996565b610d38565b60405161041391906131bb565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612c29565b610e43565b005b34801561045157600080fd5b5061045a610ec9565b60405161046791906131dd565b60405180910390f35b34801561047c57600080fd5b50610485610edc565b60405161049291906131f8565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190612c29565b610f6a565b6040516104cf9190613154565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190612c29565b61101c565b005b34801561050d57600080fd5b5061052860048036038101906105239190612996565b6110a2565b60405161053591906134ba565b60405180910390f35b34801561054a57600080fd5b5061055361115a565b005b34801561056157600080fd5b5061057c60048036038101906105779190612be0565b6111e2565b005b34801561058a57600080fd5b506105a560048036038101906105a09190612c29565b611278565b005b3480156105b357600080fd5b506105bc6112fe565b6040516105c99190613154565b60405180910390f35b3480156105de57600080fd5b506105e7611328565b6040516105f491906131f8565b60405180910390f35b34801561060957600080fd5b506106126113ba565b60405161061f91906131dd565b60405180910390f35b610642600480360381019061063d9190612c29565b6113cd565b005b34801561065057600080fd5b5061066b60048036038101906106669190612ad9565b6115df565b005b34801561067957600080fd5b50610694600480360381019061068f9190612a56565b6115f5565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190612c29565b611657565b6040516106ca9190613154565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612c29565b611696565b60405161070791906131f8565b60405180910390f35b34801561071c57600080fd5b5061072561173d565b60405161073291906134ba565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d91906129c3565b611743565b60405161076f91906131dd565b60405180910390f35b34801561078457600080fd5b5061078d6117d7565b60405161079a91906134ba565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612c56565b6117dd565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612996565b611905565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d057506108cf82611a34565b5b9050919050565b6060600080546108e6906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610912906137ae565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611a9e565b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa9061337a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f982610f6a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a619061341a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a89611b0a565b73ffffffffffffffffffffffffffffffffffffffff161480610ab85750610ab781610ab2611b0a565b611743565b5b610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee906132fa565b60405180910390fd5b610b018383611b12565b505050565b600b5481565b60095481565b610b1a611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610b386112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b859061339a565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610bb76007611a13565b905090565b610bcd610bc7611b0a565b82611bcb565b610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061345a565b60405180910390fd5b610c17838383611ca9565b505050565b610c24611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610c426112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f9061339a565b60405180910390fd5b6000610ca26112fe565b73ffffffffffffffffffffffffffffffffffffffff1647604051610cc59061313f565b60006040518083038185875af1925050503d8060008114610d02576040519150601f19603f3d011682016040523d82523d6000602084013e610d07565b606091505b5050905080610d1557600080fd5b50565b610d33838383604051806020016040528060008152506115f5565b505050565b60606000610d45836110a2565b905060008167ffffffffffffffff811115610d6357610d62613947565b5b604051908082528060200260200182016040528015610d915781602001602082028036833780820191505090505b50905060006001905060005b8381108015610dae5750600a548211155b15610e37576000610dbe83610f6a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e235782848381518110610e0857610e07613918565b5b6020026020010181815250508180610e1f90613811565b9250505b8280610e2e90613811565b93505050610d9d565b82945050505050919050565b610e4b611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610e696112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb69061339a565b60405180910390fd5b8060098190555050565b600d60009054906101000a900460ff1681565b60088054610ee9906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610f15906137ae565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a9061333a565b60405180910390fd5b80915050919050565b611024611b0a565b73ffffffffffffffffffffffffffffffffffffffff166110426112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f9061339a565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a9061331a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611162611b0a565b73ffffffffffffffffffffffffffffffffffffffff166111806112fe565b73ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061339a565b60405180910390fd5b6111e06000611f05565b565b6111ea611b0a565b73ffffffffffffffffffffffffffffffffffffffff166112086112fe565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061339a565b60405180910390fd5b80600890805190602001906112749291906127aa565b5050565b611280611b0a565b73ffffffffffffffffffffffffffffffffffffffff1661129e6112fe565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb9061339a565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611337906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611363906137ae565b80156113b05780601f10611385576101008083540402835291602001916113b0565b820191906000526020600020905b81548152906001019060200180831161139357829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1681565b8060008111611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061327a565b60405180910390fd5b600a548161141f6007611a13565b61142991906135e3565b111561146a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114619061343a565b60405180910390fd5b600d60009054906101000a900460ff16156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906133ba565b60405180910390fd5b6101f46114c5610bab565b111561157857816009546114d9919061366a565b34101561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061349a565b60405180910390fd5b600b5482611528336110a2565b61153291906135e3565b1115611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061347a565b60405180910390fd5b6115d1565b600c5482611585336110a2565b61158f91906135e3565b11156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c79061347a565b60405180910390fd5b5b6115db3383611fcb565b5050565b6115f16115ea611b0a565b838361200b565b5050565b611606611600611b0a565b83611bcb565b611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061345a565b60405180910390fd5b61165184848484612178565b50505050565b600e818154811061166757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606116a182611a9e565b6116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906133fa565b60405180910390fd5b60006116ea6121d4565b9050600081511161170a5760405180602001604052806000815250611735565b8061171484612266565b604051602001611725929190613110565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b8160008111611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118189061327a565b60405180910390fd5b600a548161182f6007611a13565b61183991906135e3565b111561187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118719061343a565b60405180910390fd5b611882611b0a565b73ffffffffffffffffffffffffffffffffffffffff166118a06112fe565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed9061339a565b60405180910390fd5b6119008284611fcb565b505050565b61190d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1661192b6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061339a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061323a565b60405180910390fd5b6119fa81611f05565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8583610f6a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd682611a9e565b611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906132da565b60405180910390fd5b6000611c2083610f6a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c8f57508373ffffffffffffffffffffffffffffffffffffffff16611c7784610969565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca05750611c9f8185611743565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cc982610f6a565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d16906133da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d869061329a565b60405180910390fd5b611d9a8383836123c7565b611da5600082611b12565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df591906136c4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4c91906135e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561200657611fe060076119fd565b611ff383611fee6007611a13565b6123cc565b8080611ffe90613811565b915050611fce565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561207a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612071906132ba565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161216b91906131dd565b60405180910390a3505050565b612183848484611ca9565b61218f848484846123ea565b6121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c59061321a565b60405180910390fd5b50505050565b6060600880546121e3906137ae565b80601f016020809104026020016040519081016040528092919081815260200182805461220f906137ae565b801561225c5780601f106122315761010080835404028352916020019161225c565b820191906000526020600020905b81548152906001019060200180831161223f57829003601f168201915b5050505050905090565b606060008214156122ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c2565b600082905060005b600082146122e05780806122c990613811565b915050600a826122d99190613639565b91506122b6565b60008167ffffffffffffffff8111156122fc576122fb613947565b5b6040519080825280601f01601f19166020018201604052801561232e5781602001600182028036833780820191505090505b5090505b600085146123bb5760018261234791906136c4565b9150600a85612356919061385a565b603061236291906135e3565b60f81b81838151811061237857612377613918565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b49190613639565b9450612332565b8093505050505b919050565b505050565b6123e6828260405180602001604052806000815250612581565b5050565b600061240b8473ffffffffffffffffffffffffffffffffffffffff16611a21565b15612574578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612434611b0a565b8786866040518563ffffffff1660e01b8152600401612456949392919061316f565b602060405180830381600087803b15801561247057600080fd5b505af19250505080156124a157506040513d601f19601f8201168201806040525081019061249e9190612bb3565b60015b612524573d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b5060008151141561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061321a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612579565b600190505b949350505050565b61258b83836125dc565b61259860008484846123ea565b6125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce9061321a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126439061335a565b60405180910390fd5b61265581611a9e565b15612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c9061325a565b60405180910390fd5b6126a1600083836123c7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f191906135e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546127b6906137ae565b90600052602060002090601f0160209004810192826127d8576000855561281f565b82601f106127f157805160ff191683800117855561281f565b8280016001018555821561281f579182015b8281111561281e578251825591602001919060010190612803565b5b50905061282c9190612830565b5090565b5b80821115612849576000816000905550600101612831565b5090565b600061286061285b846134fa565b6134d5565b90508281526020810184848401111561287c5761287b61397b565b5b61288784828561376c565b509392505050565b60006128a261289d8461352b565b6134d5565b9050828152602081018484840111156128be576128bd61397b565b5b6128c984828561376c565b509392505050565b6000813590506128e081613eec565b92915050565b6000813590506128f581613f03565b92915050565b60008135905061290a81613f1a565b92915050565b60008151905061291f81613f1a565b92915050565b600082601f83011261293a57612939613976565b5b813561294a84826020860161284d565b91505092915050565b600082601f83011261296857612967613976565b5b813561297884826020860161288f565b91505092915050565b60008135905061299081613f31565b92915050565b6000602082840312156129ac576129ab613985565b5b60006129ba848285016128d1565b91505092915050565b600080604083850312156129da576129d9613985565b5b60006129e8858286016128d1565b92505060206129f9858286016128d1565b9150509250929050565b600080600060608486031215612a1c57612a1b613985565b5b6000612a2a868287016128d1565b9350506020612a3b868287016128d1565b9250506040612a4c86828701612981565b9150509250925092565b60008060008060808587031215612a7057612a6f613985565b5b6000612a7e878288016128d1565b9450506020612a8f878288016128d1565b9350506040612aa087828801612981565b925050606085013567ffffffffffffffff811115612ac157612ac0613980565b5b612acd87828801612925565b91505092959194509250565b60008060408385031215612af057612aef613985565b5b6000612afe858286016128d1565b9250506020612b0f858286016128e6565b9150509250929050565b60008060408385031215612b3057612b2f613985565b5b6000612b3e858286016128d1565b9250506020612b4f85828601612981565b9150509250929050565b600060208284031215612b6f57612b6e613985565b5b6000612b7d848285016128e6565b91505092915050565b600060208284031215612b9c57612b9b613985565b5b6000612baa848285016128fb565b91505092915050565b600060208284031215612bc957612bc8613985565b5b6000612bd784828501612910565b91505092915050565b600060208284031215612bf657612bf5613985565b5b600082013567ffffffffffffffff811115612c1457612c13613980565b5b612c2084828501612953565b91505092915050565b600060208284031215612c3f57612c3e613985565b5b6000612c4d84828501612981565b91505092915050565b60008060408385031215612c6d57612c6c613985565b5b6000612c7b85828601612981565b9250506020612c8c858286016128d1565b9150509250929050565b6000612ca283836130f2565b60208301905092915050565b612cb7816136f8565b82525050565b6000612cc88261356c565b612cd2818561359a565b9350612cdd8361355c565b8060005b83811015612d0e578151612cf58882612c96565b9750612d008361358d565b925050600181019050612ce1565b5085935050505092915050565b612d248161370a565b82525050565b6000612d3582613577565b612d3f81856135ab565b9350612d4f81856020860161377b565b612d588161398a565b840191505092915050565b6000612d6e82613582565b612d7881856135c7565b9350612d8881856020860161377b565b612d918161398a565b840191505092915050565b6000612da782613582565b612db181856135d8565b9350612dc181856020860161377b565b80840191505092915050565b6000612dda6032836135c7565b9150612de58261399b565b604082019050919050565b6000612dfd6026836135c7565b9150612e08826139ea565b604082019050919050565b6000612e20601c836135c7565b9150612e2b82613a39565b602082019050919050565b6000612e436014836135c7565b9150612e4e82613a62565b602082019050919050565b6000612e666024836135c7565b9150612e7182613a8b565b604082019050919050565b6000612e896019836135c7565b9150612e9482613ada565b602082019050919050565b6000612eac602c836135c7565b9150612eb782613b03565b604082019050919050565b6000612ecf6038836135c7565b9150612eda82613b52565b604082019050919050565b6000612ef2602a836135c7565b9150612efd82613ba1565b604082019050919050565b6000612f156029836135c7565b9150612f2082613bf0565b604082019050919050565b6000612f386020836135c7565b9150612f4382613c3f565b602082019050919050565b6000612f5b602c836135c7565b9150612f6682613c68565b604082019050919050565b6000612f7e6005836135d8565b9150612f8982613cb7565b600582019050919050565b6000612fa16020836135c7565b9150612fac82613ce0565b602082019050919050565b6000612fc46017836135c7565b9150612fcf82613d09565b602082019050919050565b6000612fe76029836135c7565b9150612ff282613d32565b604082019050919050565b600061300a602f836135c7565b915061301582613d81565b604082019050919050565b600061302d6021836135c7565b915061303882613dd0565b604082019050919050565b60006130506000836135bc565b915061305b82613e1f565b600082019050919050565b60006130736014836135c7565b915061307e82613e22565b602082019050919050565b60006130966031836135c7565b91506130a182613e4b565b604082019050919050565b60006130b96013836135c7565b91506130c482613e9a565b602082019050919050565b60006130dc6013836135c7565b91506130e782613ec3565b602082019050919050565b6130fb81613762565b82525050565b61310a81613762565b82525050565b600061311c8285612d9c565b91506131288284612d9c565b915061313382612f71565b91508190509392505050565b600061314a82613043565b9150819050919050565b60006020820190506131696000830184612cae565b92915050565b60006080820190506131846000830187612cae565b6131916020830186612cae565b61319e6040830185613101565b81810360608301526131b08184612d2a565b905095945050505050565b600060208201905081810360008301526131d58184612cbd565b905092915050565b60006020820190506131f26000830184612d1b565b92915050565b600060208201905081810360008301526132128184612d63565b905092915050565b6000602082019050818103600083015261323381612dcd565b9050919050565b6000602082019050818103600083015261325381612df0565b9050919050565b6000602082019050818103600083015261327381612e13565b9050919050565b6000602082019050818103600083015261329381612e36565b9050919050565b600060208201905081810360008301526132b381612e59565b9050919050565b600060208201905081810360008301526132d381612e7c565b9050919050565b600060208201905081810360008301526132f381612e9f565b9050919050565b6000602082019050818103600083015261331381612ec2565b9050919050565b6000602082019050818103600083015261333381612ee5565b9050919050565b6000602082019050818103600083015261335381612f08565b9050919050565b6000602082019050818103600083015261337381612f2b565b9050919050565b6000602082019050818103600083015261339381612f4e565b9050919050565b600060208201905081810360008301526133b381612f94565b9050919050565b600060208201905081810360008301526133d381612fb7565b9050919050565b600060208201905081810360008301526133f381612fda565b9050919050565b6000602082019050818103600083015261341381612ffd565b9050919050565b6000602082019050818103600083015261343381613020565b9050919050565b6000602082019050818103600083015261345381613066565b9050919050565b6000602082019050818103600083015261347381613089565b9050919050565b60006020820190508181036000830152613493816130ac565b9050919050565b600060208201905081810360008301526134b3816130cf565b9050919050565b60006020820190506134cf6000830184613101565b92915050565b60006134df6134f0565b90506134eb82826137e0565b919050565b6000604051905090565b600067ffffffffffffffff82111561351557613514613947565b5b61351e8261398a565b9050602081019050919050565b600067ffffffffffffffff82111561354657613545613947565b5b61354f8261398a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006135ee82613762565b91506135f983613762565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362e5761362d61388b565b5b828201905092915050565b600061364482613762565b915061364f83613762565b92508261365f5761365e6138ba565b5b828204905092915050565b600061367582613762565b915061368083613762565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136b9576136b861388b565b5b828202905092915050565b60006136cf82613762565b91506136da83613762565b9250828210156136ed576136ec61388b565b5b828203905092915050565b600061370382613742565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379957808201518184015260208101905061377e565b838111156137a8576000848401525b50505050565b600060028204905060018216806137c657607f821691505b602082108114156137da576137d96138e9565b5b50919050565b6137e98261398a565b810181811067ffffffffffffffff8211171561380857613807613947565b5b80604052505050565b600061381c82613762565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561384f5761384e61388b565b5b600182019050919050565b600061386582613762565b915061387083613762565b9250826138805761387f6138ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74206c696d697420657863656564656400000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613ef5816136f8565b8114613f0057600080fd5b50565b613f0c8161370a565b8114613f1757600080fd5b50565b613f2381613716565b8114613f2e57600080fd5b50565b613f3a81613762565b8114613f4557600080fd5b5056fea2646970667358221220af16517a3f7c3b14903db63338cbbd49da4445c8d6e344bac1f2d01db3e7d9b164736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101f95760003560e01c806370a082311161010d578063a22cb465116100a0578063d5abeb011161006f578063d5abeb0114610710578063e985e9c51461073b578063ecc955d314610778578063efbd73f4146107a3578063f2fde38b146107cc576101f9565b8063a22cb46514610644578063b88d4fde1461066d578063ba4e5c4914610696578063c87b56dd146106d3576101f9565b80638da5cb5b116100dc5780638da5cb5b146105a757806395d89b41146105d25780639c70b512146105fd578063a0712d6814610628576101f9565b806370a0823114610501578063715018a61461053e5780637ec4a6591461055557806389dfc8b91461057e576101f9565b806323b872dd1161019057806344a0d68a1161015f57806344a0d68a1461041c5780635c975abb1461044557806362b99ad4146104705780636352211e1461049b57806369703cd4146104d8576101f9565b806323b872dd146103765780633ccfd60b1461039f57806342842e0e146103b6578063438b6300146103df576101f9565b80630b85d4ef116101cc5780630b85d4ef146102cc57806313faede6146102f757806316c38b3c1461032257806318160ddd1461034b576101f9565b806301ffc9a7146101fe57806306fdde031461023b578063081812fc14610266578063095ea7b3146102a3575b600080fd5b34801561020a57600080fd5b5061022560048036038101906102209190612b86565b6107f5565b60405161023291906131dd565b60405180910390f35b34801561024757600080fd5b506102506108d7565b60405161025d91906131f8565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190612c29565b610969565b60405161029a9190613154565b60405180910390f35b3480156102af57600080fd5b506102ca60048036038101906102c59190612b19565b6109ee565b005b3480156102d857600080fd5b506102e1610b06565b6040516102ee91906134ba565b60405180910390f35b34801561030357600080fd5b5061030c610b0c565b60405161031991906134ba565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190612b59565b610b12565b005b34801561035757600080fd5b50610360610bab565b60405161036d91906134ba565b60405180910390f35b34801561038257600080fd5b5061039d60048036038101906103989190612a03565b610bbc565b005b3480156103ab57600080fd5b506103b4610c1c565b005b3480156103c257600080fd5b506103dd60048036038101906103d89190612a03565b610d18565b005b3480156103eb57600080fd5b5061040660048036038101906104019190612996565b610d38565b60405161041391906131bb565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e9190612c29565b610e43565b005b34801561045157600080fd5b5061045a610ec9565b60405161046791906131dd565b60405180910390f35b34801561047c57600080fd5b50610485610edc565b60405161049291906131f8565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190612c29565b610f6a565b6040516104cf9190613154565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa9190612c29565b61101c565b005b34801561050d57600080fd5b5061052860048036038101906105239190612996565b6110a2565b60405161053591906134ba565b60405180910390f35b34801561054a57600080fd5b5061055361115a565b005b34801561056157600080fd5b5061057c60048036038101906105779190612be0565b6111e2565b005b34801561058a57600080fd5b506105a560048036038101906105a09190612c29565b611278565b005b3480156105b357600080fd5b506105bc6112fe565b6040516105c99190613154565b60405180910390f35b3480156105de57600080fd5b506105e7611328565b6040516105f491906131f8565b60405180910390f35b34801561060957600080fd5b506106126113ba565b60405161061f91906131dd565b60405180910390f35b610642600480360381019061063d9190612c29565b6113cd565b005b34801561065057600080fd5b5061066b60048036038101906106669190612ad9565b6115df565b005b34801561067957600080fd5b50610694600480360381019061068f9190612a56565b6115f5565b005b3480156106a257600080fd5b506106bd60048036038101906106b89190612c29565b611657565b6040516106ca9190613154565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f59190612c29565b611696565b60405161070791906131f8565b60405180910390f35b34801561071c57600080fd5b5061072561173d565b60405161073291906134ba565b60405180910390f35b34801561074757600080fd5b50610762600480360381019061075d91906129c3565b611743565b60405161076f91906131dd565b60405180910390f35b34801561078457600080fd5b5061078d6117d7565b60405161079a91906134ba565b60405180910390f35b3480156107af57600080fd5b506107ca60048036038101906107c59190612c56565b6117dd565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190612996565b611905565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d057506108cf82611a34565b5b9050919050565b6060600080546108e6906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610912906137ae565b801561095f5780601f106109345761010080835404028352916020019161095f565b820191906000526020600020905b81548152906001019060200180831161094257829003601f168201915b5050505050905090565b600061097482611a9e565b6109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa9061337a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f982610f6a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a619061341a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a89611b0a565b73ffffffffffffffffffffffffffffffffffffffff161480610ab85750610ab781610ab2611b0a565b611743565b5b610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee906132fa565b60405180910390fd5b610b018383611b12565b505050565b600b5481565b60095481565b610b1a611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610b386112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b859061339a565b60405180910390fd5b80600d60006101000a81548160ff02191690831515021790555050565b6000610bb76007611a13565b905090565b610bcd610bc7611b0a565b82611bcb565b610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061345a565b60405180910390fd5b610c17838383611ca9565b505050565b610c24611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610c426112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610c98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8f9061339a565b60405180910390fd5b6000610ca26112fe565b73ffffffffffffffffffffffffffffffffffffffff1647604051610cc59061313f565b60006040518083038185875af1925050503d8060008114610d02576040519150601f19603f3d011682016040523d82523d6000602084013e610d07565b606091505b5050905080610d1557600080fd5b50565b610d33838383604051806020016040528060008152506115f5565b505050565b60606000610d45836110a2565b905060008167ffffffffffffffff811115610d6357610d62613947565b5b604051908082528060200260200182016040528015610d915781602001602082028036833780820191505090505b50905060006001905060005b8381108015610dae5750600a548211155b15610e37576000610dbe83610f6a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e235782848381518110610e0857610e07613918565b5b6020026020010181815250508180610e1f90613811565b9250505b8280610e2e90613811565b93505050610d9d565b82945050505050919050565b610e4b611b0a565b73ffffffffffffffffffffffffffffffffffffffff16610e696112fe565b73ffffffffffffffffffffffffffffffffffffffff1614610ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb69061339a565b60405180910390fd5b8060098190555050565b600d60009054906101000a900460ff1681565b60088054610ee9906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610f15906137ae565b8015610f625780601f10610f3757610100808354040283529160200191610f62565b820191906000526020600020905b815481529060010190602001808311610f4557829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a9061333a565b60405180910390fd5b80915050919050565b611024611b0a565b73ffffffffffffffffffffffffffffffffffffffff166110426112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f9061339a565b60405180910390fd5b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a9061331a565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611162611b0a565b73ffffffffffffffffffffffffffffffffffffffff166111806112fe565b73ffffffffffffffffffffffffffffffffffffffff16146111d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cd9061339a565b60405180910390fd5b6111e06000611f05565b565b6111ea611b0a565b73ffffffffffffffffffffffffffffffffffffffff166112086112fe565b73ffffffffffffffffffffffffffffffffffffffff161461125e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112559061339a565b60405180910390fd5b80600890805190602001906112749291906127aa565b5050565b611280611b0a565b73ffffffffffffffffffffffffffffffffffffffff1661129e6112fe565b73ffffffffffffffffffffffffffffffffffffffff16146112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb9061339a565b60405180910390fd5b80600c8190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054611337906137ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611363906137ae565b80156113b05780601f10611385576101008083540402835291602001916113b0565b820191906000526020600020905b81548152906001019060200180831161139357829003601f168201915b5050505050905090565b600d60019054906101000a900460ff1681565b8060008111611411576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114089061327a565b60405180910390fd5b600a548161141f6007611a13565b61142991906135e3565b111561146a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114619061343a565b60405180910390fd5b600d60009054906101000a900460ff16156114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b1906133ba565b60405180910390fd5b6101f46114c5610bab565b111561157857816009546114d9919061366a565b34101561151b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115129061349a565b60405180910390fd5b600b5482611528336110a2565b61153291906135e3565b1115611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a9061347a565b60405180910390fd5b6115d1565b600c5482611585336110a2565b61158f91906135e3565b11156115d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c79061347a565b60405180910390fd5b5b6115db3383611fcb565b5050565b6115f16115ea611b0a565b838361200b565b5050565b611606611600611b0a565b83611bcb565b611645576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163c9061345a565b60405180910390fd5b61165184848484612178565b50505050565b600e818154811061166757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606116a182611a9e565b6116e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d7906133fa565b60405180910390fd5b60006116ea6121d4565b9050600081511161170a5760405180602001604052806000815250611735565b8061171484612266565b604051602001611725929190613110565b6040516020818303038152906040525b915050919050565b600a5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600c5481565b8160008111611821576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118189061327a565b60405180910390fd5b600a548161182f6007611a13565b61183991906135e3565b111561187a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118719061343a565b60405180910390fd5b611882611b0a565b73ffffffffffffffffffffffffffffffffffffffff166118a06112fe565b73ffffffffffffffffffffffffffffffffffffffff16146118f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ed9061339a565b60405180910390fd5b6119008284611fcb565b505050565b61190d611b0a565b73ffffffffffffffffffffffffffffffffffffffff1661192b6112fe565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119789061339a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e89061323a565b60405180910390fd5b6119fa81611f05565b50565b6001816000016000828254019250508190555050565b600081600001549050919050565b600080823b905060008111915050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8583610f6a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd682611a9e565b611c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0c906132da565b60405180910390fd5b6000611c2083610f6a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c8f57508373ffffffffffffffffffffffffffffffffffffffff16611c7784610969565b73ffffffffffffffffffffffffffffffffffffffff16145b80611ca05750611c9f8185611743565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cc982610f6a565b73ffffffffffffffffffffffffffffffffffffffff1614611d1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d16906133da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d869061329a565b60405180910390fd5b611d9a8383836123c7565b611da5600082611b12565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df591906136c4565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e4c91906135e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b8181101561200657611fe060076119fd565b611ff383611fee6007611a13565b6123cc565b8080611ffe90613811565b915050611fce565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561207a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612071906132ba565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161216b91906131dd565b60405180910390a3505050565b612183848484611ca9565b61218f848484846123ea565b6121ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c59061321a565b60405180910390fd5b50505050565b6060600880546121e3906137ae565b80601f016020809104026020016040519081016040528092919081815260200182805461220f906137ae565b801561225c5780601f106122315761010080835404028352916020019161225c565b820191906000526020600020905b81548152906001019060200180831161223f57829003601f168201915b5050505050905090565b606060008214156122ae576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123c2565b600082905060005b600082146122e05780806122c990613811565b915050600a826122d99190613639565b91506122b6565b60008167ffffffffffffffff8111156122fc576122fb613947565b5b6040519080825280601f01601f19166020018201604052801561232e5781602001600182028036833780820191505090505b5090505b600085146123bb5760018261234791906136c4565b9150600a85612356919061385a565b603061236291906135e3565b60f81b81838151811061237857612377613918565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123b49190613639565b9450612332565b8093505050505b919050565b505050565b6123e6828260405180602001604052806000815250612581565b5050565b600061240b8473ffffffffffffffffffffffffffffffffffffffff16611a21565b15612574578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612434611b0a565b8786866040518563ffffffff1660e01b8152600401612456949392919061316f565b602060405180830381600087803b15801561247057600080fd5b505af19250505080156124a157506040513d601f19601f8201168201806040525081019061249e9190612bb3565b60015b612524573d80600081146124d1576040519150601f19603f3d011682016040523d82523d6000602084013e6124d6565b606091505b5060008151141561251c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125139061321a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612579565b600190505b949350505050565b61258b83836125dc565b61259860008484846123ea565b6125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce9061321a565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561264c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126439061335a565b60405180910390fd5b61265581611a9e565b15612695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268c9061325a565b60405180910390fd5b6126a1600083836123c7565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126f191906135e3565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8280546127b6906137ae565b90600052602060002090601f0160209004810192826127d8576000855561281f565b82601f106127f157805160ff191683800117855561281f565b8280016001018555821561281f579182015b8281111561281e578251825591602001919060010190612803565b5b50905061282c9190612830565b5090565b5b80821115612849576000816000905550600101612831565b5090565b600061286061285b846134fa565b6134d5565b90508281526020810184848401111561287c5761287b61397b565b5b61288784828561376c565b509392505050565b60006128a261289d8461352b565b6134d5565b9050828152602081018484840111156128be576128bd61397b565b5b6128c984828561376c565b509392505050565b6000813590506128e081613eec565b92915050565b6000813590506128f581613f03565b92915050565b60008135905061290a81613f1a565b92915050565b60008151905061291f81613f1a565b92915050565b600082601f83011261293a57612939613976565b5b813561294a84826020860161284d565b91505092915050565b600082601f83011261296857612967613976565b5b813561297884826020860161288f565b91505092915050565b60008135905061299081613f31565b92915050565b6000602082840312156129ac576129ab613985565b5b60006129ba848285016128d1565b91505092915050565b600080604083850312156129da576129d9613985565b5b60006129e8858286016128d1565b92505060206129f9858286016128d1565b9150509250929050565b600080600060608486031215612a1c57612a1b613985565b5b6000612a2a868287016128d1565b9350506020612a3b868287016128d1565b9250506040612a4c86828701612981565b9150509250925092565b60008060008060808587031215612a7057612a6f613985565b5b6000612a7e878288016128d1565b9450506020612a8f878288016128d1565b9350506040612aa087828801612981565b925050606085013567ffffffffffffffff811115612ac157612ac0613980565b5b612acd87828801612925565b91505092959194509250565b60008060408385031215612af057612aef613985565b5b6000612afe858286016128d1565b9250506020612b0f858286016128e6565b9150509250929050565b60008060408385031215612b3057612b2f613985565b5b6000612b3e858286016128d1565b9250506020612b4f85828601612981565b9150509250929050565b600060208284031215612b6f57612b6e613985565b5b6000612b7d848285016128e6565b91505092915050565b600060208284031215612b9c57612b9b613985565b5b6000612baa848285016128fb565b91505092915050565b600060208284031215612bc957612bc8613985565b5b6000612bd784828501612910565b91505092915050565b600060208284031215612bf657612bf5613985565b5b600082013567ffffffffffffffff811115612c1457612c13613980565b5b612c2084828501612953565b91505092915050565b600060208284031215612c3f57612c3e613985565b5b6000612c4d84828501612981565b91505092915050565b60008060408385031215612c6d57612c6c613985565b5b6000612c7b85828601612981565b9250506020612c8c858286016128d1565b9150509250929050565b6000612ca283836130f2565b60208301905092915050565b612cb7816136f8565b82525050565b6000612cc88261356c565b612cd2818561359a565b9350612cdd8361355c565b8060005b83811015612d0e578151612cf58882612c96565b9750612d008361358d565b925050600181019050612ce1565b5085935050505092915050565b612d248161370a565b82525050565b6000612d3582613577565b612d3f81856135ab565b9350612d4f81856020860161377b565b612d588161398a565b840191505092915050565b6000612d6e82613582565b612d7881856135c7565b9350612d8881856020860161377b565b612d918161398a565b840191505092915050565b6000612da782613582565b612db181856135d8565b9350612dc181856020860161377b565b80840191505092915050565b6000612dda6032836135c7565b9150612de58261399b565b604082019050919050565b6000612dfd6026836135c7565b9150612e08826139ea565b604082019050919050565b6000612e20601c836135c7565b9150612e2b82613a39565b602082019050919050565b6000612e436014836135c7565b9150612e4e82613a62565b602082019050919050565b6000612e666024836135c7565b9150612e7182613a8b565b604082019050919050565b6000612e896019836135c7565b9150612e9482613ada565b602082019050919050565b6000612eac602c836135c7565b9150612eb782613b03565b604082019050919050565b6000612ecf6038836135c7565b9150612eda82613b52565b604082019050919050565b6000612ef2602a836135c7565b9150612efd82613ba1565b604082019050919050565b6000612f156029836135c7565b9150612f2082613bf0565b604082019050919050565b6000612f386020836135c7565b9150612f4382613c3f565b602082019050919050565b6000612f5b602c836135c7565b9150612f6682613c68565b604082019050919050565b6000612f7e6005836135d8565b9150612f8982613cb7565b600582019050919050565b6000612fa16020836135c7565b9150612fac82613ce0565b602082019050919050565b6000612fc46017836135c7565b9150612fcf82613d09565b602082019050919050565b6000612fe76029836135c7565b9150612ff282613d32565b604082019050919050565b600061300a602f836135c7565b915061301582613d81565b604082019050919050565b600061302d6021836135c7565b915061303882613dd0565b604082019050919050565b60006130506000836135bc565b915061305b82613e1f565b600082019050919050565b60006130736014836135c7565b915061307e82613e22565b602082019050919050565b60006130966031836135c7565b91506130a182613e4b565b604082019050919050565b60006130b96013836135c7565b91506130c482613e9a565b602082019050919050565b60006130dc6013836135c7565b91506130e782613ec3565b602082019050919050565b6130fb81613762565b82525050565b61310a81613762565b82525050565b600061311c8285612d9c565b91506131288284612d9c565b915061313382612f71565b91508190509392505050565b600061314a82613043565b9150819050919050565b60006020820190506131696000830184612cae565b92915050565b60006080820190506131846000830187612cae565b6131916020830186612cae565b61319e6040830185613101565b81810360608301526131b08184612d2a565b905095945050505050565b600060208201905081810360008301526131d58184612cbd565b905092915050565b60006020820190506131f26000830184612d1b565b92915050565b600060208201905081810360008301526132128184612d63565b905092915050565b6000602082019050818103600083015261323381612dcd565b9050919050565b6000602082019050818103600083015261325381612df0565b9050919050565b6000602082019050818103600083015261327381612e13565b9050919050565b6000602082019050818103600083015261329381612e36565b9050919050565b600060208201905081810360008301526132b381612e59565b9050919050565b600060208201905081810360008301526132d381612e7c565b9050919050565b600060208201905081810360008301526132f381612e9f565b9050919050565b6000602082019050818103600083015261331381612ec2565b9050919050565b6000602082019050818103600083015261333381612ee5565b9050919050565b6000602082019050818103600083015261335381612f08565b9050919050565b6000602082019050818103600083015261337381612f2b565b9050919050565b6000602082019050818103600083015261339381612f4e565b9050919050565b600060208201905081810360008301526133b381612f94565b9050919050565b600060208201905081810360008301526133d381612fb7565b9050919050565b600060208201905081810360008301526133f381612fda565b9050919050565b6000602082019050818103600083015261341381612ffd565b9050919050565b6000602082019050818103600083015261343381613020565b9050919050565b6000602082019050818103600083015261345381613066565b9050919050565b6000602082019050818103600083015261347381613089565b9050919050565b60006020820190508181036000830152613493816130ac565b9050919050565b600060208201905081810360008301526134b3816130cf565b9050919050565b60006020820190506134cf6000830184613101565b92915050565b60006134df6134f0565b90506134eb82826137e0565b919050565b6000604051905090565b600067ffffffffffffffff82111561351557613514613947565b5b61351e8261398a565b9050602081019050919050565b600067ffffffffffffffff82111561354657613545613947565b5b61354f8261398a565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006135ee82613762565b91506135f983613762565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561362e5761362d61388b565b5b828201905092915050565b600061364482613762565b915061364f83613762565b92508261365f5761365e6138ba565b5b828204905092915050565b600061367582613762565b915061368083613762565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156136b9576136b861388b565b5b828202905092915050565b60006136cf82613762565b91506136da83613762565b9250828210156136ed576136ec61388b565b5b828203905092915050565b600061370382613742565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561379957808201518184015260208101905061377e565b838111156137a8576000848401525b50505050565b600060028204905060018216806137c657607f821691505b602082108114156137da576137d96138e9565b5b50919050565b6137e98261398a565b810181811067ffffffffffffffff8211171561380857613807613947565b5b80604052505050565b600061381c82613762565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561384f5761384e61388b565b5b600182019050919050565b600061386582613762565b915061387083613762565b9250826138805761387f6138ba565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4d696e74206c696d697420657863656564656400000000000000000000000000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b613ef5816136f8565b8114613f0057600080fd5b50565b613f0c8161370a565b8114613f1757600080fd5b50565b613f2381613716565b8114613f2e57600080fd5b50565b613f3a81613762565b8114613f4557600080fd5b5056fea2646970667358221220af16517a3f7c3b14903db63338cbbd49da4445c8d6e344bac1f2d01db3e7d9b164736f6c63430008070033

Deployed Bytecode Sourcemap

37764:4071:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25240:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26185:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27744:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27267:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38039:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37965:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40957:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38569:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28494:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41045:467;;;;;;;;;;;;;:::i;:::-;;28904:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39345:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40424:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38145:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37928:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25879:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40510:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25609:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6228:103;;;;;;;;;;;;;:::i;:::-;;40851:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40679:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5577:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26354:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38177:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38664:514;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28037:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29160:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38214:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39986:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38003:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38092:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39184:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6486:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25240:305;25342:4;25394:25;25379:40;;;:11;:40;;;;:105;;;;25451:33;25436:48;;;:11;:48;;;;25379:105;:158;;;;25501:36;25525:11;25501:23;:36::i;:::-;25379:158;25359:178;;25240:305;;;:::o;26185:100::-;26239:13;26272:5;26265:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26185:100;:::o;27744:221::-;27820:7;27848:16;27856:7;27848;:16::i;:::-;27840:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27933:15;:24;27949:7;27933:24;;;;;;;;;;;;;;;;;;;;;27926:31;;27744:221;;;:::o;27267:411::-;27348:13;27364:23;27379:7;27364:14;:23::i;:::-;27348:39;;27412:5;27406:11;;:2;:11;;;;27398:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27506:5;27490:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27515:37;27532:5;27539:12;:10;:12::i;:::-;27515:16;:37::i;:::-;27490:62;27468:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27649:21;27658:2;27662:7;27649:8;:21::i;:::-;27337:341;27267:411;;:::o;38039:48::-;;;;:::o;37965:33::-;;;;:::o;40957:77::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41022:6:::1;41013;;:15;;;;;;;;;;;;;;;;;;40957:77:::0;:::o;38569:89::-;38613:7;38636:16;:6;:14;:16::i;:::-;38629:23;;38569:89;:::o;28494:339::-;28689:41;28708:12;:10;:12::i;:::-;28722:7;28689:18;:41::i;:::-;28681:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28797:28;28807:4;28813:2;28817:7;28797:9;:28::i;:::-;28494:339;;;:::o;41045:467::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41334:7:::1;41355;:5;:7::i;:::-;41347:21;;41376;41347:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41333:69;;;41417:2;41409:11;;;::::0;::::1;;41082:430;41045:467::o:0;28904:185::-;29042:39;29059:4;29065:2;29069:7;29042:39;;;;;;;;;;;;:16;:39::i;:::-;28904:185;;;:::o;39345:635::-;39420:16;39448:23;39474:17;39484:6;39474:9;:17::i;:::-;39448:43;;39498:30;39545:15;39531:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39498:63;;39568:22;39593:1;39568:26;;39601:23;39637:309;39662:15;39644;:33;:64;;;;;39699:9;;39681:14;:27;;39644:64;39637:309;;;39719:25;39747:23;39755:14;39747:7;:23::i;:::-;39719:51;;39806:6;39785:27;;:17;:27;;;39781:131;;;39858:14;39825:13;39839:15;39825:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;39885:17;;;;;:::i;:::-;;;;39781:131;39922:16;;;;;:::i;:::-;;;;39710:236;39637:309;;;39961:13;39954:20;;;;;;39345:635;;;:::o;40424:74::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40487:5:::1;40480:4;:12;;;;40424:74:::0;:::o;38145:25::-;;;;;;;;;;;;;:::o;37928:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25879:239::-;25951:7;25971:13;25987:7;:16;25995:7;25987:16;;;;;;;;;;;;;;;;;;;;;25971:32;;26039:1;26022:19;;:5;:19;;;;26014:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26105:5;26098:12;;;25879:239;;;:::o;40510:165::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40639:30:::1;40607:29;:62;;;;40510:165:::0;:::o;25609:208::-;25681:7;25726:1;25709:19;;:5;:19;;;;25701:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25793:9;:16;25803:5;25793:16;;;;;;;;;;;;;;;;25786:23;;25609:208;;;:::o;6228:103::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6293:30:::1;6320:1;6293:18;:30::i;:::-;6228:103::o:0;40851:100::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40935:10:::1;40923:9;:22;;;;;;;;;;;;:::i;:::-;;40851:100:::0;:::o;40679:166::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40811:28:::1;40781:27;:58;;;;40679:166:::0;:::o;5577:87::-;5623:7;5650:6;;;;;;;;;;;5643:13;;5577:87;:::o;26354:104::-;26410:13;26443:7;26436:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26354:104;:::o;38177:32::-;;;;;;;;;;;;;:::o;38664:514::-;38729:11;38440:1;38426:11;:15;38418:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;38515:9;;38500:11;38481:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;38473:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;38758:6:::1;;;;;;;;;;;38757:7;38749:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;38816:3;38802:13;:11;:13::i;:::-;:17;38799:331;;;38859:11;38852:4;;:18;;;;:::i;:::-;38839:9;:31;;38831:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;38948:29;;38935:11;38913:21;38923:10;38913:9;:21::i;:::-;:33;;;;:::i;:::-;:64;;38905:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;38799:331;;;39072:27;;39059:11;39037:21;39047:10;39037:9;:21::i;:::-;:33;;;;:::i;:::-;:62;;39029:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;38799:331;39138:34;39148:10;39160:11;39138:9;:34::i;:::-;38664:514:::0;;:::o;28037:155::-;28132:52;28151:12;:10;:12::i;:::-;28165:8;28175;28132:18;:52::i;:::-;28037:155;;:::o;29160:328::-;29335:41;29354:12;:10;:12::i;:::-;29368:7;29335:18;:41::i;:::-;29327:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29441:39;29455:4;29461:2;29465:7;29474:5;29441:13;:39::i;:::-;29160:328;;;;:::o;38214:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39986:428::-;40085:13;40126:17;40134:8;40126:7;:17::i;:::-;40110:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;40225:28;40256:10;:8;:10::i;:::-;40225:41;;40311:1;40286:14;40280:28;:32;:128;;;;;;;;;;;;;;;;;40348:14;40364:19;:8;:17;:19::i;:::-;40331:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;40280:128;40273:135;;;39986:428;;;:::o;38003:31::-;;;;:::o;28263:164::-;28360:4;28384:18;:25;28403:5;28384:25;;;;;;;;;;;;;;;:35;28410:8;28384:35;;;;;;;;;;;;;;;;;;;;;;;;;28377:42;;28263:164;;;;:::o;38092:46::-;;;;:::o;39184:155::-;39270:11;38440:1;38426:11;:15;38418:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;38515:9;;38500:11;38481:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;38473:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5808:12:::1;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39300:33:::2;39310:9;39321:11;39300:9;:33::i;:::-;39184:155:::0;;;:::o;6486:201::-;5808:12;:10;:12::i;:::-;5797:23;;:7;:5;:7::i;:::-;:23;;;5789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6595:1:::1;6575:22;;:8;:22;;;;6567:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6651:28;6670:8;6651:18;:28::i;:::-;6486:201:::0;:::o;1027:127::-;1134:1;1116:7;:14;;;:19;;;;;;;;;;;1027:127;:::o;905:114::-;970:7;997;:14;;;990:21;;905:114;;;:::o;7865:387::-;7925:4;8133:12;8200:7;8188:20;8180:28;;8243:1;8236:4;:8;8229:15;;;7865:387;;;:::o;18009:157::-;18094:4;18133:25;18118:40;;;:11;:40;;;;18111:47;;18009:157;;;:::o;30998:127::-;31063:4;31115:1;31087:30;;:7;:16;31095:7;31087:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31080:37;;30998:127;;;:::o;4301:98::-;4354:7;4381:10;4374:17;;4301:98;:::o;34980:174::-;35082:2;35055:15;:24;35071:7;35055:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35138:7;35134:2;35100:46;;35109:23;35124:7;35109:14;:23::i;:::-;35100:46;;;;;;;;;;;;34980:174;;:::o;31292:348::-;31385:4;31410:16;31418:7;31410;:16::i;:::-;31402:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31486:13;31502:23;31517:7;31502:14;:23::i;:::-;31486:39;;31555:5;31544:16;;:7;:16;;;:51;;;;31588:7;31564:31;;:20;31576:7;31564:11;:20::i;:::-;:31;;;31544:51;:87;;;;31599:32;31616:5;31623:7;31599:16;:32::i;:::-;31544:87;31536:96;;;31292:348;;;;:::o;34284:578::-;34443:4;34416:31;;:23;34431:7;34416:14;:23::i;:::-;:31;;;34408:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34526:1;34512:16;;:2;:16;;;;34504:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34582:39;34603:4;34609:2;34613:7;34582:20;:39::i;:::-;34686:29;34703:1;34707:7;34686:8;:29::i;:::-;34747:1;34728:9;:15;34738:4;34728:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34776:1;34759:9;:13;34769:2;34759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34807:2;34788:7;:16;34796:7;34788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34846:7;34842:2;34827:27;;34836:4;34827:27;;;;;;;;;;;;34284:578;;;:::o;6847:191::-;6921:16;6940:6;;;;;;;;;;;6921:25;;6966:8;6957:6;;:17;;;;;;;;;;;;;;;;;;7021:8;6990:40;;7011:8;6990:40;;;;;;;;;;;;6910:128;6847:191;:::o;41518:204::-;41598:9;41593:124;41617:11;41613:1;:15;41593:124;;;41644:18;:6;:16;:18::i;:::-;41671:38;41681:9;41692:16;:6;:14;:16::i;:::-;41671:9;:38::i;:::-;41630:3;;;;;:::i;:::-;;;;41593:124;;;;41518:204;;:::o;35296:315::-;35451:8;35442:17;;:5;:17;;;;35434:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35538:8;35500:18;:25;35519:5;35500:25;;;;;;;;;;;;;;;:35;35526:8;35500:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35584:8;35562:41;;35577:5;35562:41;;;35594:8;35562:41;;;;;;:::i;:::-;;;;;;;;35296:315;;;:::o;30370:::-;30527:28;30537:4;30543:2;30547:7;30527:9;:28::i;:::-;30574:48;30597:4;30603:2;30607:7;30616:5;30574:22;:48::i;:::-;30566:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30370:315;;;;:::o;41728:104::-;41788:13;41817:9;41810:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41728:104;:::o;1863:723::-;1919:13;2149:1;2140:5;:10;2136:53;;;2167:10;;;;;;;;;;;;;;;;;;;;;2136:53;2199:12;2214:5;2199:20;;2230:14;2255:78;2270:1;2262:4;:9;2255:78;;2288:8;;;;;:::i;:::-;;;;2319:2;2311:10;;;;;:::i;:::-;;;2255:78;;;2343:19;2375:6;2365:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2343:39;;2393:154;2409:1;2400:5;:10;2393:154;;2437:1;2427:11;;;;;:::i;:::-;;;2504:2;2496:5;:10;;;;:::i;:::-;2483:2;:24;;;;:::i;:::-;2470:39;;2453:6;2460;2453:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2533:2;2524:11;;;;;:::i;:::-;;;2393:154;;;2571:6;2557:21;;;;;1863:723;;;;:::o;37547:126::-;;;;:::o;31982:110::-;32058:26;32068:2;32072:7;32058:26;;;;;;;;;;;;:9;:26::i;:::-;31982:110;;:::o;36176:799::-;36331:4;36352:15;:2;:13;;;:15::i;:::-;36348:620;;;36404:2;36388:36;;;36425:12;:10;:12::i;:::-;36439:4;36445:7;36454:5;36388:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36384:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36647:1;36630:6;:13;:18;36626:272;;;36673:60;;;;;;;;;;:::i;:::-;;;;;;;;36626:272;36848:6;36842:13;36833:6;36829:2;36825:15;36818:38;36384:529;36521:41;;;36511:51;;;:6;:51;;;;36504:58;;;;;36348:620;36952:4;36945:11;;36176:799;;;;;;;:::o;32319:321::-;32449:18;32455:2;32459:7;32449:5;:18::i;:::-;32500:54;32531:1;32535:2;32539:7;32548:5;32500:22;:54::i;:::-;32478:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32319:321;;;:::o;32976:382::-;33070:1;33056:16;;:2;:16;;;;33048:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33129:16;33137:7;33129;:16::i;:::-;33128:17;33120:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33191:45;33220:1;33224:2;33228:7;33191:20;:45::i;:::-;33266:1;33249:9;:13;33259:2;33249:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33297:2;33278:7;:16;33286:7;33278:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33342:7;33338:2;33317:33;;33334:1;33317:33;;;;;;;;;;;;32976:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:179::-;8036:10;8057:46;8099:3;8091:6;8057:46;:::i;:::-;8135:4;8130:3;8126:14;8112:28;;7967:179;;;;:::o;8152:118::-;8239:24;8257:5;8239:24;:::i;:::-;8234:3;8227:37;8152:118;;:::o;8306:732::-;8425:3;8454:54;8502:5;8454:54;:::i;:::-;8524:86;8603:6;8598:3;8524:86;:::i;:::-;8517:93;;8634:56;8684:5;8634:56;:::i;:::-;8713:7;8744:1;8729:284;8754:6;8751:1;8748:13;8729:284;;;8830:6;8824:13;8857:63;8916:3;8901:13;8857:63;:::i;:::-;8850:70;;8943:60;8996:6;8943:60;:::i;:::-;8933:70;;8789:224;8776:1;8773;8769:9;8764:14;;8729:284;;;8733:14;9029:3;9022:10;;8430:608;;;8306:732;;;;:::o;9044:109::-;9125:21;9140:5;9125:21;:::i;:::-;9120:3;9113:34;9044:109;;:::o;9159:360::-;9245:3;9273:38;9305:5;9273:38;:::i;:::-;9327:70;9390:6;9385:3;9327:70;:::i;:::-;9320:77;;9406:52;9451:6;9446:3;9439:4;9432:5;9428:16;9406:52;:::i;:::-;9483:29;9505:6;9483:29;:::i;:::-;9478:3;9474:39;9467:46;;9249:270;9159:360;;;;:::o;9525:364::-;9613:3;9641:39;9674:5;9641:39;:::i;:::-;9696:71;9760:6;9755:3;9696:71;:::i;:::-;9689:78;;9776:52;9821:6;9816:3;9809:4;9802:5;9798:16;9776:52;:::i;:::-;9853:29;9875:6;9853:29;:::i;:::-;9848:3;9844:39;9837:46;;9617:272;9525:364;;;;:::o;9895:377::-;10001:3;10029:39;10062:5;10029:39;:::i;:::-;10084:89;10166:6;10161:3;10084:89;:::i;:::-;10077:96;;10182:52;10227:6;10222:3;10215:4;10208:5;10204:16;10182:52;:::i;:::-;10259:6;10254:3;10250:16;10243:23;;10005:267;9895:377;;;;:::o;10278:366::-;10420:3;10441:67;10505:2;10500:3;10441:67;:::i;:::-;10434:74;;10517:93;10606:3;10517:93;:::i;:::-;10635:2;10630:3;10626:12;10619:19;;10278:366;;;:::o;10650:::-;10792:3;10813:67;10877:2;10872:3;10813:67;:::i;:::-;10806:74;;10889:93;10978:3;10889:93;:::i;:::-;11007:2;11002:3;10998:12;10991:19;;10650:366;;;:::o;11022:::-;11164:3;11185:67;11249:2;11244:3;11185:67;:::i;:::-;11178:74;;11261:93;11350:3;11261:93;:::i;:::-;11379:2;11374:3;11370:12;11363:19;;11022:366;;;:::o;11394:::-;11536:3;11557:67;11621:2;11616:3;11557:67;:::i;:::-;11550:74;;11633:93;11722:3;11633:93;:::i;:::-;11751:2;11746:3;11742:12;11735:19;;11394:366;;;:::o;11766:::-;11908:3;11929:67;11993:2;11988:3;11929:67;:::i;:::-;11922:74;;12005:93;12094:3;12005:93;:::i;:::-;12123:2;12118:3;12114:12;12107:19;;11766:366;;;:::o;12138:::-;12280:3;12301:67;12365:2;12360:3;12301:67;:::i;:::-;12294:74;;12377:93;12466:3;12377:93;:::i;:::-;12495:2;12490:3;12486:12;12479:19;;12138:366;;;:::o;12510:::-;12652:3;12673:67;12737:2;12732:3;12673:67;:::i;:::-;12666:74;;12749:93;12838:3;12749:93;:::i;:::-;12867:2;12862:3;12858:12;12851:19;;12510:366;;;:::o;12882:::-;13024:3;13045:67;13109:2;13104:3;13045:67;:::i;:::-;13038:74;;13121:93;13210:3;13121:93;:::i;:::-;13239:2;13234:3;13230:12;13223:19;;12882:366;;;:::o;13254:::-;13396:3;13417:67;13481:2;13476:3;13417:67;:::i;:::-;13410:74;;13493:93;13582:3;13493:93;:::i;:::-;13611:2;13606:3;13602:12;13595:19;;13254:366;;;:::o;13626:::-;13768:3;13789:67;13853:2;13848:3;13789:67;:::i;:::-;13782:74;;13865:93;13954:3;13865:93;:::i;:::-;13983:2;13978:3;13974:12;13967:19;;13626:366;;;:::o;13998:::-;14140:3;14161:67;14225:2;14220:3;14161:67;:::i;:::-;14154:74;;14237:93;14326:3;14237:93;:::i;:::-;14355:2;14350:3;14346:12;14339:19;;13998:366;;;:::o;14370:::-;14512:3;14533:67;14597:2;14592:3;14533:67;:::i;:::-;14526:74;;14609:93;14698:3;14609:93;:::i;:::-;14727:2;14722:3;14718:12;14711:19;;14370:366;;;:::o;14742:400::-;14902:3;14923:84;15005:1;15000:3;14923:84;:::i;:::-;14916:91;;15016:93;15105:3;15016:93;:::i;:::-;15134:1;15129:3;15125:11;15118:18;;14742:400;;;:::o;15148:366::-;15290:3;15311:67;15375:2;15370:3;15311:67;:::i;:::-;15304:74;;15387:93;15476:3;15387:93;:::i;:::-;15505:2;15500:3;15496:12;15489:19;;15148:366;;;:::o;15520:::-;15662:3;15683:67;15747:2;15742:3;15683:67;:::i;:::-;15676:74;;15759:93;15848:3;15759:93;:::i;:::-;15877:2;15872:3;15868:12;15861:19;;15520:366;;;:::o;15892:::-;16034:3;16055:67;16119:2;16114:3;16055:67;:::i;:::-;16048:74;;16131:93;16220:3;16131:93;:::i;:::-;16249:2;16244:3;16240:12;16233:19;;15892:366;;;:::o;16264:::-;16406:3;16427:67;16491:2;16486:3;16427:67;:::i;:::-;16420:74;;16503:93;16592:3;16503:93;:::i;:::-;16621:2;16616:3;16612:12;16605:19;;16264:366;;;:::o;16636:::-;16778:3;16799:67;16863:2;16858:3;16799:67;:::i;:::-;16792:74;;16875:93;16964:3;16875:93;:::i;:::-;16993:2;16988:3;16984:12;16977:19;;16636:366;;;:::o;17008:398::-;17167:3;17188:83;17269:1;17264:3;17188:83;:::i;:::-;17181:90;;17280:93;17369:3;17280:93;:::i;:::-;17398:1;17393:3;17389:11;17382:18;;17008:398;;;:::o;17412:366::-;17554:3;17575:67;17639:2;17634:3;17575:67;:::i;:::-;17568:74;;17651:93;17740:3;17651:93;:::i;:::-;17769:2;17764:3;17760:12;17753:19;;17412:366;;;:::o;17784:::-;17926:3;17947:67;18011:2;18006:3;17947:67;:::i;:::-;17940:74;;18023:93;18112:3;18023:93;:::i;:::-;18141:2;18136:3;18132:12;18125:19;;17784:366;;;:::o;18156:::-;18298:3;18319:67;18383:2;18378:3;18319:67;:::i;:::-;18312:74;;18395:93;18484:3;18395:93;:::i;:::-;18513:2;18508:3;18504:12;18497:19;;18156:366;;;:::o;18528:::-;18670:3;18691:67;18755:2;18750:3;18691:67;:::i;:::-;18684:74;;18767:93;18856:3;18767:93;:::i;:::-;18885:2;18880:3;18876:12;18869:19;;18528:366;;;:::o;18900:108::-;18977:24;18995:5;18977:24;:::i;:::-;18972:3;18965:37;18900:108;;:::o;19014:118::-;19101:24;19119:5;19101:24;:::i;:::-;19096:3;19089:37;19014:118;;:::o;19138:701::-;19419:3;19441:95;19532:3;19523:6;19441:95;:::i;:::-;19434:102;;19553:95;19644:3;19635:6;19553:95;:::i;:::-;19546:102;;19665:148;19809:3;19665:148;:::i;:::-;19658:155;;19830:3;19823:10;;19138:701;;;;;:::o;19845:379::-;20029:3;20051:147;20194:3;20051:147;:::i;:::-;20044:154;;20215:3;20208:10;;19845:379;;;:::o;20230:222::-;20323:4;20361:2;20350:9;20346:18;20338:26;;20374:71;20442:1;20431:9;20427:17;20418:6;20374:71;:::i;:::-;20230:222;;;;:::o;20458:640::-;20653:4;20691:3;20680:9;20676:19;20668:27;;20705:71;20773:1;20762:9;20758:17;20749:6;20705:71;:::i;:::-;20786:72;20854:2;20843:9;20839:18;20830:6;20786:72;:::i;:::-;20868;20936:2;20925:9;20921:18;20912:6;20868:72;:::i;:::-;20987:9;20981:4;20977:20;20972:2;20961:9;20957:18;20950:48;21015:76;21086:4;21077:6;21015:76;:::i;:::-;21007:84;;20458:640;;;;;;;:::o;21104:373::-;21247:4;21285:2;21274:9;21270:18;21262:26;;21334:9;21328:4;21324:20;21320:1;21309:9;21305:17;21298:47;21362:108;21465:4;21456:6;21362:108;:::i;:::-;21354:116;;21104:373;;;;:::o;21483:210::-;21570:4;21608:2;21597:9;21593:18;21585:26;;21621:65;21683:1;21672:9;21668:17;21659:6;21621:65;:::i;:::-;21483:210;;;;:::o;21699:313::-;21812:4;21850:2;21839:9;21835:18;21827:26;;21899:9;21893:4;21889:20;21885:1;21874:9;21870:17;21863:47;21927:78;22000:4;21991:6;21927:78;:::i;:::-;21919:86;;21699:313;;;;:::o;22018:419::-;22184:4;22222:2;22211:9;22207:18;22199:26;;22271:9;22265:4;22261:20;22257:1;22246:9;22242:17;22235:47;22299:131;22425:4;22299:131;:::i;:::-;22291:139;;22018:419;;;:::o;22443:::-;22609:4;22647:2;22636:9;22632:18;22624:26;;22696:9;22690:4;22686:20;22682:1;22671:9;22667:17;22660:47;22724:131;22850:4;22724:131;:::i;:::-;22716:139;;22443:419;;;:::o;22868:::-;23034:4;23072:2;23061:9;23057:18;23049:26;;23121:9;23115:4;23111:20;23107:1;23096:9;23092:17;23085:47;23149:131;23275:4;23149:131;:::i;:::-;23141:139;;22868:419;;;:::o;23293:::-;23459:4;23497:2;23486:9;23482:18;23474:26;;23546:9;23540:4;23536:20;23532:1;23521:9;23517:17;23510:47;23574:131;23700:4;23574:131;:::i;:::-;23566:139;;23293:419;;;:::o;23718:::-;23884:4;23922:2;23911:9;23907:18;23899:26;;23971:9;23965:4;23961:20;23957:1;23946:9;23942:17;23935:47;23999:131;24125:4;23999:131;:::i;:::-;23991:139;;23718:419;;;:::o;24143:::-;24309:4;24347:2;24336:9;24332:18;24324:26;;24396:9;24390:4;24386:20;24382:1;24371:9;24367:17;24360:47;24424:131;24550:4;24424:131;:::i;:::-;24416:139;;24143:419;;;:::o;24568:::-;24734:4;24772:2;24761:9;24757:18;24749:26;;24821:9;24815:4;24811:20;24807:1;24796:9;24792:17;24785:47;24849:131;24975:4;24849:131;:::i;:::-;24841:139;;24568:419;;;:::o;24993:::-;25159:4;25197:2;25186:9;25182:18;25174:26;;25246:9;25240:4;25236:20;25232:1;25221:9;25217:17;25210:47;25274:131;25400:4;25274:131;:::i;:::-;25266:139;;24993:419;;;:::o;25418:::-;25584:4;25622:2;25611:9;25607:18;25599:26;;25671:9;25665:4;25661:20;25657:1;25646:9;25642:17;25635:47;25699:131;25825:4;25699:131;:::i;:::-;25691:139;;25418:419;;;:::o;25843:::-;26009:4;26047:2;26036:9;26032:18;26024:26;;26096:9;26090:4;26086:20;26082:1;26071:9;26067:17;26060:47;26124:131;26250:4;26124:131;:::i;:::-;26116:139;;25843:419;;;:::o;26268:::-;26434:4;26472:2;26461:9;26457:18;26449:26;;26521:9;26515:4;26511:20;26507:1;26496:9;26492:17;26485:47;26549:131;26675:4;26549:131;:::i;:::-;26541:139;;26268:419;;;:::o;26693:::-;26859:4;26897:2;26886:9;26882:18;26874:26;;26946:9;26940:4;26936:20;26932:1;26921:9;26917:17;26910:47;26974:131;27100:4;26974:131;:::i;:::-;26966:139;;26693:419;;;:::o;27118:::-;27284:4;27322:2;27311:9;27307:18;27299:26;;27371:9;27365:4;27361:20;27357:1;27346:9;27342:17;27335:47;27399:131;27525:4;27399:131;:::i;:::-;27391:139;;27118:419;;;:::o;27543:::-;27709:4;27747:2;27736:9;27732:18;27724:26;;27796:9;27790:4;27786:20;27782:1;27771:9;27767:17;27760:47;27824:131;27950:4;27824:131;:::i;:::-;27816:139;;27543:419;;;:::o;27968:::-;28134:4;28172:2;28161:9;28157:18;28149:26;;28221:9;28215:4;28211:20;28207:1;28196:9;28192:17;28185:47;28249:131;28375:4;28249:131;:::i;:::-;28241:139;;27968:419;;;:::o;28393:::-;28559:4;28597:2;28586:9;28582:18;28574:26;;28646:9;28640:4;28636:20;28632:1;28621:9;28617:17;28610:47;28674:131;28800:4;28674:131;:::i;:::-;28666:139;;28393:419;;;:::o;28818:::-;28984:4;29022:2;29011:9;29007:18;28999:26;;29071:9;29065:4;29061:20;29057:1;29046:9;29042:17;29035:47;29099:131;29225:4;29099:131;:::i;:::-;29091:139;;28818:419;;;:::o;29243:::-;29409:4;29447:2;29436:9;29432:18;29424:26;;29496:9;29490:4;29486:20;29482:1;29471:9;29467:17;29460:47;29524:131;29650:4;29524:131;:::i;:::-;29516:139;;29243:419;;;:::o;29668:::-;29834:4;29872:2;29861:9;29857:18;29849:26;;29921:9;29915:4;29911:20;29907:1;29896:9;29892:17;29885:47;29949:131;30075:4;29949:131;:::i;:::-;29941:139;;29668:419;;;:::o;30093:::-;30259:4;30297:2;30286:9;30282:18;30274:26;;30346:9;30340:4;30336:20;30332:1;30321:9;30317:17;30310:47;30374:131;30500:4;30374:131;:::i;:::-;30366:139;;30093:419;;;:::o;30518:::-;30684:4;30722:2;30711:9;30707:18;30699:26;;30771:9;30765:4;30761:20;30757:1;30746:9;30742:17;30735:47;30799:131;30925:4;30799:131;:::i;:::-;30791:139;;30518:419;;;:::o;30943:222::-;31036:4;31074:2;31063:9;31059:18;31051:26;;31087:71;31155:1;31144:9;31140:17;31131:6;31087:71;:::i;:::-;30943:222;;;;:::o;31171:129::-;31205:6;31232:20;;:::i;:::-;31222:30;;31261:33;31289:4;31281:6;31261:33;:::i;:::-;31171:129;;;:::o;31306:75::-;31339:6;31372:2;31366:9;31356:19;;31306:75;:::o;31387:307::-;31448:4;31538:18;31530:6;31527:30;31524:56;;;31560:18;;:::i;:::-;31524:56;31598:29;31620:6;31598:29;:::i;:::-;31590:37;;31682:4;31676;31672:15;31664:23;;31387:307;;;:::o;31700:308::-;31762:4;31852:18;31844:6;31841:30;31838:56;;;31874:18;;:::i;:::-;31838:56;31912:29;31934:6;31912:29;:::i;:::-;31904:37;;31996:4;31990;31986:15;31978:23;;31700:308;;;:::o;32014:132::-;32081:4;32104:3;32096:11;;32134:4;32129:3;32125:14;32117:22;;32014:132;;;:::o;32152:114::-;32219:6;32253:5;32247:12;32237:22;;32152:114;;;:::o;32272:98::-;32323:6;32357:5;32351:12;32341:22;;32272:98;;;:::o;32376:99::-;32428:6;32462:5;32456:12;32446:22;;32376:99;;;:::o;32481:113::-;32551:4;32583;32578:3;32574:14;32566:22;;32481:113;;;:::o;32600:184::-;32699:11;32733:6;32728:3;32721:19;32773:4;32768:3;32764:14;32749:29;;32600:184;;;;:::o;32790:168::-;32873:11;32907:6;32902:3;32895:19;32947:4;32942:3;32938:14;32923:29;;32790:168;;;;:::o;32964:147::-;33065:11;33102:3;33087:18;;32964:147;;;;:::o;33117:169::-;33201:11;33235:6;33230:3;33223:19;33275:4;33270:3;33266:14;33251:29;;33117:169;;;;:::o;33292:148::-;33394:11;33431:3;33416:18;;33292:148;;;;:::o;33446:305::-;33486:3;33505:20;33523:1;33505:20;:::i;:::-;33500:25;;33539:20;33557:1;33539:20;:::i;:::-;33534:25;;33693:1;33625:66;33621:74;33618:1;33615:81;33612:107;;;33699:18;;:::i;:::-;33612:107;33743:1;33740;33736:9;33729:16;;33446:305;;;;:::o;33757:185::-;33797:1;33814:20;33832:1;33814:20;:::i;:::-;33809:25;;33848:20;33866:1;33848:20;:::i;:::-;33843:25;;33887:1;33877:35;;33892:18;;:::i;:::-;33877:35;33934:1;33931;33927:9;33922:14;;33757:185;;;;:::o;33948:348::-;33988:7;34011:20;34029:1;34011:20;:::i;:::-;34006:25;;34045:20;34063:1;34045:20;:::i;:::-;34040:25;;34233:1;34165:66;34161:74;34158:1;34155:81;34150:1;34143:9;34136:17;34132:105;34129:131;;;34240:18;;:::i;:::-;34129:131;34288:1;34285;34281:9;34270:20;;33948:348;;;;:::o;34302:191::-;34342:4;34362:20;34380:1;34362:20;:::i;:::-;34357:25;;34396:20;34414:1;34396:20;:::i;:::-;34391:25;;34435:1;34432;34429:8;34426:34;;;34440:18;;:::i;:::-;34426:34;34485:1;34482;34478:9;34470:17;;34302:191;;;;:::o;34499:96::-;34536:7;34565:24;34583:5;34565:24;:::i;:::-;34554:35;;34499:96;;;:::o;34601:90::-;34635:7;34678:5;34671:13;34664:21;34653:32;;34601:90;;;:::o;34697:149::-;34733:7;34773:66;34766:5;34762:78;34751:89;;34697:149;;;:::o;34852:126::-;34889:7;34929:42;34922:5;34918:54;34907:65;;34852:126;;;:::o;34984:77::-;35021:7;35050:5;35039:16;;34984:77;;;:::o;35067:154::-;35151:6;35146:3;35141;35128:30;35213:1;35204:6;35199:3;35195:16;35188:27;35067:154;;;:::o;35227:307::-;35295:1;35305:113;35319:6;35316:1;35313:13;35305:113;;;35404:1;35399:3;35395:11;35389:18;35385:1;35380:3;35376:11;35369:39;35341:2;35338:1;35334:10;35329:15;;35305:113;;;35436:6;35433:1;35430:13;35427:101;;;35516:1;35507:6;35502:3;35498:16;35491:27;35427:101;35276:258;35227:307;;;:::o;35540:320::-;35584:6;35621:1;35615:4;35611:12;35601:22;;35668:1;35662:4;35658:12;35689:18;35679:81;;35745:4;35737:6;35733:17;35723:27;;35679:81;35807:2;35799:6;35796:14;35776:18;35773:38;35770:84;;;35826:18;;:::i;:::-;35770:84;35591:269;35540:320;;;:::o;35866:281::-;35949:27;35971:4;35949:27;:::i;:::-;35941:6;35937:40;36079:6;36067:10;36064:22;36043:18;36031:10;36028:34;36025:62;36022:88;;;36090:18;;:::i;:::-;36022:88;36130:10;36126:2;36119:22;35909:238;35866:281;;:::o;36153:233::-;36192:3;36215:24;36233:5;36215:24;:::i;:::-;36206:33;;36261:66;36254:5;36251:77;36248:103;;;36331:18;;:::i;:::-;36248:103;36378:1;36371:5;36367:13;36360:20;;36153:233;;;:::o;36392:176::-;36424:1;36441:20;36459:1;36441:20;:::i;:::-;36436:25;;36475:20;36493:1;36475:20;:::i;:::-;36470:25;;36514:1;36504:35;;36519:18;;:::i;:::-;36504:35;36560:1;36557;36553:9;36548:14;;36392:176;;;;:::o;36574:180::-;36622:77;36619:1;36612:88;36719:4;36716:1;36709:15;36743:4;36740:1;36733:15;36760:180;36808:77;36805:1;36798:88;36905:4;36902:1;36895:15;36929:4;36926:1;36919:15;36946:180;36994:77;36991:1;36984:88;37091:4;37088:1;37081:15;37115:4;37112:1;37105:15;37132:180;37180:77;37177:1;37170:88;37277:4;37274:1;37267:15;37301:4;37298:1;37291:15;37318:180;37366:77;37363:1;37356:88;37463:4;37460:1;37453:15;37487:4;37484:1;37477:15;37504:117;37613:1;37610;37603:12;37627:117;37736:1;37733;37726:12;37750:117;37859:1;37856;37849:12;37873:117;37982:1;37979;37972:12;37996:102;38037:6;38088:2;38084:7;38079:2;38072:5;38068:14;38064:28;38054:38;;37996:102;;;:::o;38104:237::-;38244:34;38240:1;38232:6;38228:14;38221:58;38313:20;38308:2;38300:6;38296:15;38289:45;38104:237;:::o;38347:225::-;38487:34;38483:1;38475:6;38471:14;38464:58;38556:8;38551:2;38543:6;38539:15;38532:33;38347:225;:::o;38578:178::-;38718:30;38714:1;38706:6;38702:14;38695:54;38578:178;:::o;38762:170::-;38902:22;38898:1;38890:6;38886:14;38879:46;38762:170;:::o;38938:223::-;39078:34;39074:1;39066:6;39062:14;39055:58;39147:6;39142:2;39134:6;39130:15;39123:31;38938:223;:::o;39167:175::-;39307:27;39303:1;39295:6;39291:14;39284:51;39167:175;:::o;39348:231::-;39488:34;39484:1;39476:6;39472:14;39465:58;39557:14;39552:2;39544:6;39540:15;39533:39;39348:231;:::o;39585:243::-;39725:34;39721:1;39713:6;39709:14;39702:58;39794:26;39789:2;39781:6;39777:15;39770:51;39585:243;:::o;39834:229::-;39974:34;39970:1;39962:6;39958:14;39951:58;40043:12;40038:2;40030:6;40026:15;40019:37;39834:229;:::o;40069:228::-;40209:34;40205:1;40197:6;40193:14;40186:58;40278:11;40273:2;40265:6;40261:15;40254:36;40069:228;:::o;40303:182::-;40443:34;40439:1;40431:6;40427:14;40420:58;40303:182;:::o;40491:231::-;40631:34;40627:1;40619:6;40615:14;40608:58;40700:14;40695:2;40687:6;40683:15;40676:39;40491:231;:::o;40728:155::-;40868:7;40864:1;40856:6;40852:14;40845:31;40728:155;:::o;40889:182::-;41029:34;41025:1;41017:6;41013:14;41006:58;40889:182;:::o;41077:173::-;41217:25;41213:1;41205:6;41201:14;41194:49;41077:173;:::o;41256:228::-;41396:34;41392:1;41384:6;41380:14;41373:58;41465:11;41460:2;41452:6;41448:15;41441:36;41256:228;:::o;41490:234::-;41630:34;41626:1;41618:6;41614:14;41607:58;41699:17;41694:2;41686:6;41682:15;41675:42;41490:234;:::o;41730:220::-;41870:34;41866:1;41858:6;41854:14;41847:58;41939:3;41934:2;41926:6;41922:15;41915:28;41730:220;:::o;41956:114::-;;:::o;42076:170::-;42216:22;42212:1;42204:6;42200:14;42193:46;42076:170;:::o;42252:236::-;42392:34;42388:1;42380:6;42376:14;42369:58;42461:19;42456:2;42448:6;42444:15;42437:44;42252:236;:::o;42494:169::-;42634:21;42630:1;42622:6;42618:14;42611:45;42494:169;:::o;42669:::-;42809:21;42805:1;42797:6;42793:14;42786:45;42669:169;:::o;42844:122::-;42917:24;42935:5;42917:24;:::i;:::-;42910:5;42907:35;42897:63;;42956:1;42953;42946:12;42897:63;42844:122;:::o;42972:116::-;43042:21;43057:5;43042:21;:::i;:::-;43035:5;43032:32;43022:60;;43078:1;43075;43068:12;43022:60;42972:116;:::o;43094:120::-;43166:23;43183:5;43166:23;:::i;:::-;43159:5;43156:34;43146:62;;43204:1;43201;43194:12;43146:62;43094:120;:::o;43220:122::-;43293:24;43311:5;43293:24;:::i;:::-;43286:5;43283:35;43273:63;;43332:1;43329;43322:12;43273:63;43220:122;:::o

Swarm Source

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