ETH Price: $3,327.69 (-1.78%)
Gas: 22 Gwei

Token

Charged Punks ($CPUNKS)
 

Overview

Max Total Supply

5,555 $CPUNKS

Holders

1,343

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
7 $CPUNKS
0x194feaadb5972dd0451baca1300921c730062e77
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Charged punks are the auto-stakeable NFTs in the NFT space. They are a collection of 9999 stakeable NFTs living in the Ethereum blockchain which generates $CHARGE ( ERC-20 token ) every 24 hours.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ChargedPunks

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 2021-12-02
*/

// Charged Punks NFT collection! 
// Website : https://chargedpunks.com
// Discord : https://discord.gg/chargedpunks
// SPDX-License-Identifier: MIT

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;
    }
}
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);
    }
}
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);
            }
        }
    }
}
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);
}
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);
}
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() {
        _setOwner(_msgSender());
    }

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
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;
    }
}
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;
}
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);
}
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 {
        require(operator != _msgSender(), "ERC721: approve to caller");

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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


pragma solidity ^0.8.0;

contract ChargedPunks is Ownable, ERC721 {
    
    uint public tokenPrice = 0.1 ether;
    uint constant maxSupply = 9999;
    
    uint public totalSupply = 0;

    bool public Presale_status = false;
    bool public public_sale_status = true;
    
    mapping(address => bool) private presaleList;
    string public baseURI;
    
    uint public maxPerTransaction = 3000;  //Max Limit for Sale
    uint public maxPerWalletPresale = 100; //Max Limit for Presale
  
         
    constructor() ERC721("Charged Punks", "$CPUNKS"){}

   function buy(uint _count) public payable{
        require(_count > 0, "mint at least one token");
        require(_count <= maxPerTransaction, "max per transaction");
        require(totalSupply + _count <= maxSupply, "Not enough tokens left");
        require(msg.value >= tokenPrice * _count, "incorrect ether amount");
        require(public_sale_status == true, "Sale is Paused.");
        for(uint i = 0; i < _count; i++)
            _safeMint(msg.sender, totalSupply + 1 + i);
        totalSupply += _count;
    }

   function buy_presale() public payable{
        require(checkPresale() == true, "You are not in Presale List.");
        require(totalSupply + 1<= maxSupply, "Not enough tokens left");
        require(msg.value >= tokenPrice, "incorrect ether amount");
        require(Presale_status == true, "Sale is Paused.");
        _safeMint(msg.sender, totalSupply + 1);
        totalSupply += 1;
    }

    function sendGifts(address[] memory _wallets) public onlyOwner{
        require(totalSupply + _wallets.length <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _wallets.length; i++)
            _safeMint(_wallets[i], totalSupply + 1 + i);
        totalSupply += _wallets.length;
    }
    
    function addPresaleList(address[] memory _wallets) public onlyOwner{
        for(uint i; i < _wallets.length; i++)
            presaleList[_wallets[i]] = true;
    }
    
    function is_presale_active() public view returns(uint){
        require(Presale_status == true,"Sale not Started Yet.");
        return 1;
     }
      function is_sale_active() public view returns(uint){
      require(public_sale_status == true,"Sale not Started Yet.");
        return 1;
     }
     function tokenPriceChangepublic() external onlyOwner{
		tokenPrice = 0.15 ether;
	}
         function tokenPriceChange() external onlyOwner{
		tokenPrice = 0.1 ether;
	}

      function teamWalletMint(uint _count) public onlyOwner{
        require(totalSupply + _count <= maxSupply, "not enough tokens left");
        for(uint i = 0; i < _count; i++){
            _safeMint(_msgSender(), totalSupply + 1 + i);}
        totalSupply += _count;
    }
     function checkPresale() public view returns(bool){
        return presaleList[msg.sender];
    }
    function setBaseUri(string memory _uri) external onlyOwner {
        baseURI = _uri;
    }
     function pre_Sale_status(bool temp) external onlyOwner {
        Presale_status = temp;
    }
    function publicSale_status(bool temp) external onlyOwner {
        public_sale_status = temp;
    }
    
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }
    function withdraw() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"Presale_status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"}],"name":"addPresaleList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buy_presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"checkPresale","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"is_presale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"is_sale_active","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWalletPresale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"pre_Sale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"temp","type":"bool"}],"name":"publicSale_status","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"public_sale_status","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":"_wallets","type":"address[]"}],"name":"sendGifts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uri","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"_count","type":"uint256"}],"name":"teamWalletMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPriceChange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPriceChangepublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a000060075560006008556000600960006101000a81548160ff0219169083151502179055506001600960016101000a81548160ff021916908315150217905550610bb8600c556064600d553480156200006357600080fd5b506040518060400160405280600d81526020017f436861726765642050756e6b73000000000000000000000000000000000000008152506040518060400160405280600781526020017f244350554e4b5300000000000000000000000000000000000000000000000000815250620000f0620000e46200012a60201b60201c565b6200013260201b60201c565b816001908051906020019062000108929190620001f6565b50806002908051906020019062000121929190620001f6565b5050506200030b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020490620002a6565b90600052602060002090601f01602090048101928262000228576000855562000274565b82601f106200024357805160ff191683800117855562000274565b8280016001018555821562000274579182015b828111156200027357825182559160200191906001019062000256565b5b50905062000283919062000287565b5090565b5b80821115620002a257600081600090555060010162000288565b5090565b60006002820490506001821680620002bf57607f821691505b60208210811415620002d657620002d5620002dc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614332806200031b6000396000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063a22cb465116100ab578063d96a094a1161006f578063d96a094a14610756578063e985e9c514610772578063ebb31510146107af578063ef5f1985146107d8578063f2fde38b146108015761021a565b8063a22cb46514610671578063b88d4fde1461069a578063ba6dd6f0146106c3578063c87b56dd146106ee578063cd7de4581461072b5761021a565b80638da5cb5b116100f25780638da5cb5b1461059c57806395d89b41146105c757806395ea5e67146105f2578063996953fc1461061d578063a0bcfc7f146106485761021a565b806370a08231146104f4578063715018a6146105315780637c8255db146105485780637ff9b596146105715761021a565b80632bdef1c3116101a65780634d64c1e7116101755780634d64c1e7146104355780635051dd851461044c578063539343d9146104635780636352211e1461048c5780636c0360eb146104c95761021a565b80632bdef1c3146103c05780633ccfd60b146103ca57806342842e0e146103e15780634b980d671461040a5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd146103185780631cef37e414610343578063230a9b8d1461036c57806323b872dd146103975761021a565b806301ffc9a71461021f578063026896631461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612f82565b61082a565b60405161025391906134f5565b60405180910390f35b34801561026857600080fd5b5061027161090c565b60405161027e91906134f5565b60405180910390f35b34801561029357600080fd5b5061029c610960565b6040516102a99190613510565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613025565b6109f2565b6040516102e6919061348e565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190612ecc565b610a77565b005b34801561032457600080fd5b5061032d610b8f565b60405161033a9190613832565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612f55565b610b95565b005b34801561037857600080fd5b50610381610c2e565b60405161038e9190613832565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612db6565b610c34565b005b6103c8610c94565b005b3480156103d657600080fd5b506103df610e04565b005b3480156103ed57600080fd5b5061040860048036038101906104039190612db6565b610ed0565b005b34801561041657600080fd5b5061041f610ef0565b60405161042c9190613832565b60405180910390f35b34801561044157600080fd5b5061044a610ef6565b005b34801561045857600080fd5b50610461610f83565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613025565b611010565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613025565b611143565b6040516104c0919061348e565b60405180910390f35b3480156104d557600080fd5b506104de6111f5565b6040516104eb9190613510565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d49565b611283565b6040516105289190613832565b60405180910390f35b34801561053d57600080fd5b5061054661133b565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612f0c565b6113c3565b005b34801561057d57600080fd5b5061058661150c565b6040516105939190613832565b60405180910390f35b3480156105a857600080fd5b506105b1611512565b6040516105be919061348e565b60405180910390f35b3480156105d357600080fd5b506105dc61153b565b6040516105e99190613510565b60405180910390f35b3480156105fe57600080fd5b506106076115cd565b60405161061491906134f5565b60405180910390f35b34801561062957600080fd5b506106326115e0565b60405161063f9190613832565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612fdc565b61163f565b005b34801561067d57600080fd5b5061069860048036038101906106939190612e8c565b6116d5565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190612e09565b611856565b005b3480156106cf57600080fd5b506106d86118b8565b6040516106e591906134f5565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613025565b6118cb565b6040516107229190613510565b60405180910390f35b34801561073757600080fd5b50610740611972565b60405161074d9190613832565b60405180910390f35b610770600480360381019061076b9190613025565b6119d1565b005b34801561077e57600080fd5b5061079960048036038101906107949190612d76565b611baf565b6040516107a691906134f5565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612f0c565b611c43565b005b3480156107e457600080fd5b506107ff60048036038101906107fa9190612f55565b611d54565b005b34801561080d57600080fd5b5061082860048036038101906108239190612d49565b611ded565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610905575061090482611ee5565b5b9050919050565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60606001805461096f90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90613b0e565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b5050505050905090565b60006109fd82611f4f565b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136d2565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8282611143565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613772565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b12611fbb565b73ffffffffffffffffffffffffffffffffffffffff161480610b415750610b4081610b3b611fbb565b611baf565b5b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613612565b60405180910390fd5b610b8a8383611fc3565b505050565b60085481565b610b9d611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610bbb611512565b73ffffffffffffffffffffffffffffffffffffffff1614610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906136f2565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b600d5481565b610c45610c3f611fbb565b8261207c565b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613792565b60405180910390fd5b610c8f83838361215a565b505050565b60011515610ca061090c565b151514610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906137d2565b60405180910390fd5b61270f6001600854610cf49190613943565b1115610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90613692565b60405180910390fd5b600754341015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906135f2565b60405180910390fd5b60011515600960009054906101000a900460ff16151514610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613812565b60405180910390fd5b610de8336001600854610de39190613943565b6123b6565b600160086000828254610dfb9190613943565b92505081905550565b610e0c611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610e2a611512565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e77906136f2565b60405180910390fd5b610e88611512565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ecd573d6000803e3d6000fd5b50565b610eeb83838360405180602001604052806000815250611856565b505050565b600c5481565b610efe611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610f1c611512565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906136f2565b60405180910390fd5b670214e8348c4f0000600781905550565b610f8b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610fa9611512565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff6906136f2565b60405180910390fd5b67016345785d8a0000600781905550565b611018611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611036611512565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611083906136f2565b60405180910390fd5b61270f8160085461109d9190613943565b11156110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d5906137f2565b60405180910390fd5b60005b81811015611126576111136110f4611fbb565b8260016008546111049190613943565b61110e9190613943565b6123b6565b808061111e90613b71565b9150506110e1565b5080600860008282546111399190613943565b9250508190555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613672565b60405180910390fd5b80915050919050565b600b805461120290613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461122e90613b0e565b801561127b5780601f106112505761010080835404028352916020019161127b565b820191906000526020600020905b81548152906001019060200180831161125e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613652565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611343611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611361611512565b73ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae906136f2565b60405180910390fd5b6113c160006123d4565b565b6113cb611fbb565b73ffffffffffffffffffffffffffffffffffffffff166113e9611512565b73ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906136f2565b60405180910390fd5b61270f81516008546114519190613943565b1115611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906137f2565b60405180910390fd5b60005b81518110156114ee576114db8282815181106114b4576114b3613c78565b5b60200260200101518260016008546114cc9190613943565b6114d69190613943565b6123b6565b80806114e690613b71565b915050611495565b508051600860008282546115029190613943565b9250508190555050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461154a90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461157690613b0e565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b5050505050905090565b600960019054906101000a900460ff1681565b600060011515600960009054906101000a900460ff16151514611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613712565b60405180910390fd5b6001905090565b611647611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611665611512565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906136f2565b60405180910390fd5b80600b90805190602001906116d1929190612abf565b5050565b6116dd611fbb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906135b2565b60405180910390fd5b8060066000611758611fbb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611805611fbb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161184a91906134f5565b60405180910390a35050565b611867611861611fbb565b8361207c565b6118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613792565b60405180910390fd5b6118b284848484612498565b50505050565b600960009054906101000a900460ff1681565b60606118d682611f4f565b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613752565b60405180910390fd5b600061191f6124f4565b9050600081511161193f576040518060200160405280600081525061196a565b8061194984612586565b60405160200161195a92919061346a565b6040516020818303038152906040525b915050919050565b600060011515600960019054906101000a900460ff161515146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190613712565b60405180910390fd5b6001905090565b60008111611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906137b2565b60405180910390fd5b600c54811115611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090613632565b60405180910390fd5b61270f81600854611a6a9190613943565b1115611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613692565b60405180910390fd5b80600754611ab991906139ca565b341015611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906135f2565b60405180910390fd5b60011515600960019054906101000a900460ff16151514611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613812565b60405180910390fd5b60005b81811015611b9257611b7f33826001600854611b709190613943565b611b7a9190613943565b6123b6565b8080611b8a90613b71565b915050611b54565b508060086000828254611ba59190613943565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c4b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611c69611512565b73ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906136f2565b60405180910390fd5b60005b8151811015611d50576001600a6000848481518110611ce457611ce3613c78565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4890613b71565b915050611cc2565b5050565b611d5c611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611d7a611512565b73ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc7906136f2565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b611df5611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611e13611512565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906136f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613552565b60405180910390fd5b611ee2816123d4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661203683611143565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208782611f4f565b6120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd906135d2565b60405180910390fd5b60006120d183611143565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214057508373ffffffffffffffffffffffffffffffffffffffff16612128846109f2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061215157506121508185611baf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661217a82611143565b73ffffffffffffffffffffffffffffffffffffffff16146121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790613732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613592565b60405180910390fd5b61224b8383836126e7565b612256600082611fc3565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a69190613a24565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122fd9190613943565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123d08282604051806020016040528060008152506126ec565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124a384848461215a565b6124af84848484612747565b6124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590613532565b60405180910390fd5b50505050565b6060600b805461250390613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461252f90613b0e565b801561257c5780601f106125515761010080835404028352916020019161257c565b820191906000526020600020905b81548152906001019060200180831161255f57829003601f168201915b5050505050905090565b606060008214156125ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126e2565b600082905060005b600082146126005780806125e990613b71565b915050600a826125f99190613999565b91506125d6565b60008167ffffffffffffffff81111561261c5761261b613ca7565b5b6040519080825280601f01601f19166020018201604052801561264e5781602001600182028036833780820191505090505b5090505b600085146126db576001826126679190613a24565b9150600a856126769190613bba565b60306126829190613943565b60f81b81838151811061269857612697613c78565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126d49190613999565b9450612652565b8093505050505b919050565b505050565b6126f683836128de565b6127036000848484612747565b612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273990613532565b60405180910390fd5b505050565b60006127688473ffffffffffffffffffffffffffffffffffffffff16612aac565b156128d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612791611fbb565b8786866040518563ffffffff1660e01b81526004016127b394939291906134a9565b602060405180830381600087803b1580156127cd57600080fd5b505af19250505080156127fe57506040513d601f19601f820116820180604052508101906127fb9190612faf565b60015b612881573d806000811461282e576040519150601f19603f3d011682016040523d82523d6000602084013e612833565b606091505b50600081511415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090613532565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612945906136b2565b60405180910390fd5b61295781611f4f565b15612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90613572565b60405180910390fd5b6129a3600083836126e7565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f39190613943565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612acb90613b0e565b90600052602060002090601f016020900481019282612aed5760008555612b34565b82601f10612b0657805160ff1916838001178555612b34565b82800160010185558215612b34579182015b82811115612b33578251825591602001919060010190612b18565b5b509050612b419190612b45565b5090565b5b80821115612b5e576000816000905550600101612b46565b5090565b6000612b75612b7084613872565b61384d565b90508083825260208201905082856020860282011115612b9857612b97613cdb565b5b60005b85811015612bc85781612bae8882612c56565b845260208401935060208301925050600181019050612b9b565b5050509392505050565b6000612be5612be08461389e565b61384d565b905082815260208101848484011115612c0157612c00613ce0565b5b612c0c848285613acc565b509392505050565b6000612c27612c22846138cf565b61384d565b905082815260208101848484011115612c4357612c42613ce0565b5b612c4e848285613acc565b509392505050565b600081359050612c65816142a0565b92915050565b600082601f830112612c8057612c7f613cd6565b5b8135612c90848260208601612b62565b91505092915050565b600081359050612ca8816142b7565b92915050565b600081359050612cbd816142ce565b92915050565b600081519050612cd2816142ce565b92915050565b600082601f830112612ced57612cec613cd6565b5b8135612cfd848260208601612bd2565b91505092915050565b600082601f830112612d1b57612d1a613cd6565b5b8135612d2b848260208601612c14565b91505092915050565b600081359050612d43816142e5565b92915050565b600060208284031215612d5f57612d5e613cea565b5b6000612d6d84828501612c56565b91505092915050565b60008060408385031215612d8d57612d8c613cea565b5b6000612d9b85828601612c56565b9250506020612dac85828601612c56565b9150509250929050565b600080600060608486031215612dcf57612dce613cea565b5b6000612ddd86828701612c56565b9350506020612dee86828701612c56565b9250506040612dff86828701612d34565b9150509250925092565b60008060008060808587031215612e2357612e22613cea565b5b6000612e3187828801612c56565b9450506020612e4287828801612c56565b9350506040612e5387828801612d34565b925050606085013567ffffffffffffffff811115612e7457612e73613ce5565b5b612e8087828801612cd8565b91505092959194509250565b60008060408385031215612ea357612ea2613cea565b5b6000612eb185828601612c56565b9250506020612ec285828601612c99565b9150509250929050565b60008060408385031215612ee357612ee2613cea565b5b6000612ef185828601612c56565b9250506020612f0285828601612d34565b9150509250929050565b600060208284031215612f2257612f21613cea565b5b600082013567ffffffffffffffff811115612f4057612f3f613ce5565b5b612f4c84828501612c6b565b91505092915050565b600060208284031215612f6b57612f6a613cea565b5b6000612f7984828501612c99565b91505092915050565b600060208284031215612f9857612f97613cea565b5b6000612fa684828501612cae565b91505092915050565b600060208284031215612fc557612fc4613cea565b5b6000612fd384828501612cc3565b91505092915050565b600060208284031215612ff257612ff1613cea565b5b600082013567ffffffffffffffff8111156130105761300f613ce5565b5b61301c84828501612d06565b91505092915050565b60006020828403121561303b5761303a613cea565b5b600061304984828501612d34565b91505092915050565b61305b81613a58565b82525050565b61306a81613a6a565b82525050565b600061307b82613900565b6130858185613916565b9350613095818560208601613adb565b61309e81613cef565b840191505092915050565b60006130b48261390b565b6130be8185613927565b93506130ce818560208601613adb565b6130d781613cef565b840191505092915050565b60006130ed8261390b565b6130f78185613938565b9350613107818560208601613adb565b80840191505092915050565b6000613120603283613927565b915061312b82613d00565b604082019050919050565b6000613143602683613927565b915061314e82613d4f565b604082019050919050565b6000613166601c83613927565b915061317182613d9e565b602082019050919050565b6000613189602483613927565b915061319482613dc7565b604082019050919050565b60006131ac601983613927565b91506131b782613e16565b602082019050919050565b60006131cf602c83613927565b91506131da82613e3f565b604082019050919050565b60006131f2601683613927565b91506131fd82613e8e565b602082019050919050565b6000613215603883613927565b915061322082613eb7565b604082019050919050565b6000613238601383613927565b915061324382613f06565b602082019050919050565b600061325b602a83613927565b915061326682613f2f565b604082019050919050565b600061327e602983613927565b915061328982613f7e565b604082019050919050565b60006132a1601683613927565b91506132ac82613fcd565b602082019050919050565b60006132c4602083613927565b91506132cf82613ff6565b602082019050919050565b60006132e7602c83613927565b91506132f28261401f565b604082019050919050565b600061330a602083613927565b91506133158261406e565b602082019050919050565b600061332d601583613927565b915061333882614097565b602082019050919050565b6000613350602983613927565b915061335b826140c0565b604082019050919050565b6000613373602f83613927565b915061337e8261410f565b604082019050919050565b6000613396602183613927565b91506133a18261415e565b604082019050919050565b60006133b9603183613927565b91506133c4826141ad565b604082019050919050565b60006133dc601783613927565b91506133e7826141fc565b602082019050919050565b60006133ff601c83613927565b915061340a82614225565b602082019050919050565b6000613422601683613927565b915061342d8261424e565b602082019050919050565b6000613445600f83613927565b915061345082614277565b602082019050919050565b61346481613ac2565b82525050565b600061347682856130e2565b915061348282846130e2565b91508190509392505050565b60006020820190506134a36000830184613052565b92915050565b60006080820190506134be6000830187613052565b6134cb6020830186613052565b6134d8604083018561345b565b81810360608301526134ea8184613070565b905095945050505050565b600060208201905061350a6000830184613061565b92915050565b6000602082019050818103600083015261352a81846130a9565b905092915050565b6000602082019050818103600083015261354b81613113565b9050919050565b6000602082019050818103600083015261356b81613136565b9050919050565b6000602082019050818103600083015261358b81613159565b9050919050565b600060208201905081810360008301526135ab8161317c565b9050919050565b600060208201905081810360008301526135cb8161319f565b9050919050565b600060208201905081810360008301526135eb816131c2565b9050919050565b6000602082019050818103600083015261360b816131e5565b9050919050565b6000602082019050818103600083015261362b81613208565b9050919050565b6000602082019050818103600083015261364b8161322b565b9050919050565b6000602082019050818103600083015261366b8161324e565b9050919050565b6000602082019050818103600083015261368b81613271565b9050919050565b600060208201905081810360008301526136ab81613294565b9050919050565b600060208201905081810360008301526136cb816132b7565b9050919050565b600060208201905081810360008301526136eb816132da565b9050919050565b6000602082019050818103600083015261370b816132fd565b9050919050565b6000602082019050818103600083015261372b81613320565b9050919050565b6000602082019050818103600083015261374b81613343565b9050919050565b6000602082019050818103600083015261376b81613366565b9050919050565b6000602082019050818103600083015261378b81613389565b9050919050565b600060208201905081810360008301526137ab816133ac565b9050919050565b600060208201905081810360008301526137cb816133cf565b9050919050565b600060208201905081810360008301526137eb816133f2565b9050919050565b6000602082019050818103600083015261380b81613415565b9050919050565b6000602082019050818103600083015261382b81613438565b9050919050565b6000602082019050613847600083018461345b565b92915050565b6000613857613868565b90506138638282613b40565b919050565b6000604051905090565b600067ffffffffffffffff82111561388d5761388c613ca7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138b9576138b8613ca7565b5b6138c282613cef565b9050602081019050919050565b600067ffffffffffffffff8211156138ea576138e9613ca7565b5b6138f382613cef565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061394e82613ac2565b915061395983613ac2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561398e5761398d613beb565b5b828201905092915050565b60006139a482613ac2565b91506139af83613ac2565b9250826139bf576139be613c1a565b5b828204905092915050565b60006139d582613ac2565b91506139e083613ac2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a1957613a18613beb565b5b828202905092915050565b6000613a2f82613ac2565b9150613a3a83613ac2565b925082821015613a4d57613a4c613beb565b5b828203905092915050565b6000613a6382613aa2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613af9578082015181840152602081019050613ade565b83811115613b08576000848401525b50505050565b60006002820490506001821680613b2657607f821691505b60208210811415613b3a57613b39613c49565b5b50919050565b613b4982613cef565b810181811067ffffffffffffffff82111715613b6857613b67613ca7565b5b80604052505050565b6000613b7c82613ac2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613baf57613bae613beb565b5b600182019050919050565b6000613bc582613ac2565b9150613bd083613ac2565b925082613be057613bdf613c1a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6d617820706572207472616e73616374696f6e00000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b6142a981613a58565b81146142b457600080fd5b50565b6142c081613a6a565b81146142cb57600080fd5b50565b6142d781613a76565b81146142e257600080fd5b50565b6142ee81613ac2565b81146142f957600080fd5b5056fea26469706673582212202a206c816ff3b0d7962567c8a7f4e047e286170cb92ebaac3ce5c7f23a8e5deb64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021a5760003560e01c806370a0823111610123578063a22cb465116100ab578063d96a094a1161006f578063d96a094a14610756578063e985e9c514610772578063ebb31510146107af578063ef5f1985146107d8578063f2fde38b146108015761021a565b8063a22cb46514610671578063b88d4fde1461069a578063ba6dd6f0146106c3578063c87b56dd146106ee578063cd7de4581461072b5761021a565b80638da5cb5b116100f25780638da5cb5b1461059c57806395d89b41146105c757806395ea5e67146105f2578063996953fc1461061d578063a0bcfc7f146106485761021a565b806370a08231146104f4578063715018a6146105315780637c8255db146105485780637ff9b596146105715761021a565b80632bdef1c3116101a65780634d64c1e7116101755780634d64c1e7146104355780635051dd851461044c578063539343d9146104635780636352211e1461048c5780636c0360eb146104c95761021a565b80632bdef1c3146103c05780633ccfd60b146103ca57806342842e0e146103e15780634b980d671461040a5761021a565b8063095ea7b3116101ed578063095ea7b3146102ef57806318160ddd146103185780631cef37e414610343578063230a9b8d1461036c57806323b872dd146103975761021a565b806301ffc9a71461021f578063026896631461025c57806306fdde0314610287578063081812fc146102b2575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612f82565b61082a565b60405161025391906134f5565b60405180910390f35b34801561026857600080fd5b5061027161090c565b60405161027e91906134f5565b60405180910390f35b34801561029357600080fd5b5061029c610960565b6040516102a99190613510565b60405180910390f35b3480156102be57600080fd5b506102d960048036038101906102d49190613025565b6109f2565b6040516102e6919061348e565b60405180910390f35b3480156102fb57600080fd5b5061031660048036038101906103119190612ecc565b610a77565b005b34801561032457600080fd5b5061032d610b8f565b60405161033a9190613832565b60405180910390f35b34801561034f57600080fd5b5061036a60048036038101906103659190612f55565b610b95565b005b34801561037857600080fd5b50610381610c2e565b60405161038e9190613832565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190612db6565b610c34565b005b6103c8610c94565b005b3480156103d657600080fd5b506103df610e04565b005b3480156103ed57600080fd5b5061040860048036038101906104039190612db6565b610ed0565b005b34801561041657600080fd5b5061041f610ef0565b60405161042c9190613832565b60405180910390f35b34801561044157600080fd5b5061044a610ef6565b005b34801561045857600080fd5b50610461610f83565b005b34801561046f57600080fd5b5061048a60048036038101906104859190613025565b611010565b005b34801561049857600080fd5b506104b360048036038101906104ae9190613025565b611143565b6040516104c0919061348e565b60405180910390f35b3480156104d557600080fd5b506104de6111f5565b6040516104eb9190613510565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190612d49565b611283565b6040516105289190613832565b60405180910390f35b34801561053d57600080fd5b5061054661133b565b005b34801561055457600080fd5b5061056f600480360381019061056a9190612f0c565b6113c3565b005b34801561057d57600080fd5b5061058661150c565b6040516105939190613832565b60405180910390f35b3480156105a857600080fd5b506105b1611512565b6040516105be919061348e565b60405180910390f35b3480156105d357600080fd5b506105dc61153b565b6040516105e99190613510565b60405180910390f35b3480156105fe57600080fd5b506106076115cd565b60405161061491906134f5565b60405180910390f35b34801561062957600080fd5b506106326115e0565b60405161063f9190613832565b60405180910390f35b34801561065457600080fd5b5061066f600480360381019061066a9190612fdc565b61163f565b005b34801561067d57600080fd5b5061069860048036038101906106939190612e8c565b6116d5565b005b3480156106a657600080fd5b506106c160048036038101906106bc9190612e09565b611856565b005b3480156106cf57600080fd5b506106d86118b8565b6040516106e591906134f5565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190613025565b6118cb565b6040516107229190613510565b60405180910390f35b34801561073757600080fd5b50610740611972565b60405161074d9190613832565b60405180910390f35b610770600480360381019061076b9190613025565b6119d1565b005b34801561077e57600080fd5b5061079960048036038101906107949190612d76565b611baf565b6040516107a691906134f5565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190612f0c565b611c43565b005b3480156107e457600080fd5b506107ff60048036038101906107fa9190612f55565b611d54565b005b34801561080d57600080fd5b5061082860048036038101906108239190612d49565b611ded565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108f557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610905575061090482611ee5565b5b9050919050565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905090565b60606001805461096f90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90613b0e565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b5050505050905090565b60006109fd82611f4f565b610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906136d2565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8282611143565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aea90613772565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b12611fbb565b73ffffffffffffffffffffffffffffffffffffffff161480610b415750610b4081610b3b611fbb565b611baf565b5b610b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7790613612565b60405180910390fd5b610b8a8383611fc3565b505050565b60085481565b610b9d611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610bbb611512565b73ffffffffffffffffffffffffffffffffffffffff1614610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906136f2565b60405180910390fd5b80600960016101000a81548160ff02191690831515021790555050565b600d5481565b610c45610c3f611fbb565b8261207c565b610c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7b90613792565b60405180910390fd5b610c8f83838361215a565b505050565b60011515610ca061090c565b151514610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906137d2565b60405180910390fd5b61270f6001600854610cf49190613943565b1115610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c90613692565b60405180910390fd5b600754341015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d71906135f2565b60405180910390fd5b60011515600960009054906101000a900460ff16151514610dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc790613812565b60405180910390fd5b610de8336001600854610de39190613943565b6123b6565b600160086000828254610dfb9190613943565b92505081905550565b610e0c611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610e2a611512565b73ffffffffffffffffffffffffffffffffffffffff1614610e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e77906136f2565b60405180910390fd5b610e88611512565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610ecd573d6000803e3d6000fd5b50565b610eeb83838360405180602001604052806000815250611856565b505050565b600c5481565b610efe611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610f1c611512565b73ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906136f2565b60405180910390fd5b670214e8348c4f0000600781905550565b610f8b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16610fa9611512565b73ffffffffffffffffffffffffffffffffffffffff1614610fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff6906136f2565b60405180910390fd5b67016345785d8a0000600781905550565b611018611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611036611512565b73ffffffffffffffffffffffffffffffffffffffff161461108c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611083906136f2565b60405180910390fd5b61270f8160085461109d9190613943565b11156110de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d5906137f2565b60405180910390fd5b60005b81811015611126576111136110f4611fbb565b8260016008546111049190613943565b61110e9190613943565b6123b6565b808061111e90613b71565b9150506110e1565b5080600860008282546111399190613943565b9250508190555050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613672565b60405180910390fd5b80915050919050565b600b805461120290613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461122e90613b0e565b801561127b5780601f106112505761010080835404028352916020019161127b565b820191906000526020600020905b81548152906001019060200180831161125e57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156112f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112eb90613652565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611343611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611361611512565b73ffffffffffffffffffffffffffffffffffffffff16146113b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ae906136f2565b60405180910390fd5b6113c160006123d4565b565b6113cb611fbb565b73ffffffffffffffffffffffffffffffffffffffff166113e9611512565b73ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611436906136f2565b60405180910390fd5b61270f81516008546114519190613943565b1115611492576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611489906137f2565b60405180910390fd5b60005b81518110156114ee576114db8282815181106114b4576114b3613c78565b5b60200260200101518260016008546114cc9190613943565b6114d69190613943565b6123b6565b80806114e690613b71565b915050611495565b508051600860008282546115029190613943565b9250508190555050565b60075481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461154a90613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461157690613b0e565b80156115c35780601f10611598576101008083540402835291602001916115c3565b820191906000526020600020905b8154815290600101906020018083116115a657829003601f168201915b5050505050905090565b600960019054906101000a900460ff1681565b600060011515600960009054906101000a900460ff16151514611638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162f90613712565b60405180910390fd5b6001905090565b611647611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611665611512565b73ffffffffffffffffffffffffffffffffffffffff16146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906136f2565b60405180910390fd5b80600b90805190602001906116d1929190612abf565b5050565b6116dd611fbb565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611742906135b2565b60405180910390fd5b8060066000611758611fbb565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611805611fbb565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161184a91906134f5565b60405180910390a35050565b611867611861611fbb565b8361207c565b6118a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189d90613792565b60405180910390fd5b6118b284848484612498565b50505050565b600960009054906101000a900460ff1681565b60606118d682611f4f565b611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190c90613752565b60405180910390fd5b600061191f6124f4565b9050600081511161193f576040518060200160405280600081525061196a565b8061194984612586565b60405160200161195a92919061346a565b6040516020818303038152906040525b915050919050565b600060011515600960019054906101000a900460ff161515146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190613712565b60405180910390fd5b6001905090565b60008111611a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0b906137b2565b60405180910390fd5b600c54811115611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090613632565b60405180910390fd5b61270f81600854611a6a9190613943565b1115611aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa290613692565b60405180910390fd5b80600754611ab991906139ca565b341015611afb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af2906135f2565b60405180910390fd5b60011515600960019054906101000a900460ff16151514611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613812565b60405180910390fd5b60005b81811015611b9257611b7f33826001600854611b709190613943565b611b7a9190613943565b6123b6565b8080611b8a90613b71565b915050611b54565b508060086000828254611ba59190613943565b9250508190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c4b611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611c69611512565b73ffffffffffffffffffffffffffffffffffffffff1614611cbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb6906136f2565b60405180910390fd5b60005b8151811015611d50576001600a6000848481518110611ce457611ce3613c78565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611d4890613b71565b915050611cc2565b5050565b611d5c611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611d7a611512565b73ffffffffffffffffffffffffffffffffffffffff1614611dd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc7906136f2565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b611df5611fbb565b73ffffffffffffffffffffffffffffffffffffffff16611e13611512565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906136f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613552565b60405180910390fd5b611ee2816123d4565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661203683611143565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061208782611f4f565b6120c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bd906135d2565b60405180910390fd5b60006120d183611143565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061214057508373ffffffffffffffffffffffffffffffffffffffff16612128846109f2565b73ffffffffffffffffffffffffffffffffffffffff16145b8061215157506121508185611baf565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661217a82611143565b73ffffffffffffffffffffffffffffffffffffffff16146121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790613732565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790613592565b60405180910390fd5b61224b8383836126e7565b612256600082611fc3565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a69190613a24565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122fd9190613943565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6123d08282604051806020016040528060008152506126ec565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6124a384848461215a565b6124af84848484612747565b6124ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e590613532565b60405180910390fd5b50505050565b6060600b805461250390613b0e565b80601f016020809104026020016040519081016040528092919081815260200182805461252f90613b0e565b801561257c5780601f106125515761010080835404028352916020019161257c565b820191906000526020600020905b81548152906001019060200180831161255f57829003601f168201915b5050505050905090565b606060008214156125ce576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506126e2565b600082905060005b600082146126005780806125e990613b71565b915050600a826125f99190613999565b91506125d6565b60008167ffffffffffffffff81111561261c5761261b613ca7565b5b6040519080825280601f01601f19166020018201604052801561264e5781602001600182028036833780820191505090505b5090505b600085146126db576001826126679190613a24565b9150600a856126769190613bba565b60306126829190613943565b60f81b81838151811061269857612697613c78565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856126d49190613999565b9450612652565b8093505050505b919050565b505050565b6126f683836128de565b6127036000848484612747565b612742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273990613532565b60405180910390fd5b505050565b60006127688473ffffffffffffffffffffffffffffffffffffffff16612aac565b156128d1578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612791611fbb565b8786866040518563ffffffff1660e01b81526004016127b394939291906134a9565b602060405180830381600087803b1580156127cd57600080fd5b505af19250505080156127fe57506040513d601f19601f820116820180604052508101906127fb9190612faf565b60015b612881573d806000811461282e576040519150601f19603f3d011682016040523d82523d6000602084013e612833565b606091505b50600081511415612879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287090613532565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506128d6565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561294e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612945906136b2565b60405180910390fd5b61295781611f4f565b15612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90613572565b60405180910390fd5b6129a3600083836126e7565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129f39190613943565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612acb90613b0e565b90600052602060002090601f016020900481019282612aed5760008555612b34565b82601f10612b0657805160ff1916838001178555612b34565b82800160010185558215612b34579182015b82811115612b33578251825591602001919060010190612b18565b5b509050612b419190612b45565b5090565b5b80821115612b5e576000816000905550600101612b46565b5090565b6000612b75612b7084613872565b61384d565b90508083825260208201905082856020860282011115612b9857612b97613cdb565b5b60005b85811015612bc85781612bae8882612c56565b845260208401935060208301925050600181019050612b9b565b5050509392505050565b6000612be5612be08461389e565b61384d565b905082815260208101848484011115612c0157612c00613ce0565b5b612c0c848285613acc565b509392505050565b6000612c27612c22846138cf565b61384d565b905082815260208101848484011115612c4357612c42613ce0565b5b612c4e848285613acc565b509392505050565b600081359050612c65816142a0565b92915050565b600082601f830112612c8057612c7f613cd6565b5b8135612c90848260208601612b62565b91505092915050565b600081359050612ca8816142b7565b92915050565b600081359050612cbd816142ce565b92915050565b600081519050612cd2816142ce565b92915050565b600082601f830112612ced57612cec613cd6565b5b8135612cfd848260208601612bd2565b91505092915050565b600082601f830112612d1b57612d1a613cd6565b5b8135612d2b848260208601612c14565b91505092915050565b600081359050612d43816142e5565b92915050565b600060208284031215612d5f57612d5e613cea565b5b6000612d6d84828501612c56565b91505092915050565b60008060408385031215612d8d57612d8c613cea565b5b6000612d9b85828601612c56565b9250506020612dac85828601612c56565b9150509250929050565b600080600060608486031215612dcf57612dce613cea565b5b6000612ddd86828701612c56565b9350506020612dee86828701612c56565b9250506040612dff86828701612d34565b9150509250925092565b60008060008060808587031215612e2357612e22613cea565b5b6000612e3187828801612c56565b9450506020612e4287828801612c56565b9350506040612e5387828801612d34565b925050606085013567ffffffffffffffff811115612e7457612e73613ce5565b5b612e8087828801612cd8565b91505092959194509250565b60008060408385031215612ea357612ea2613cea565b5b6000612eb185828601612c56565b9250506020612ec285828601612c99565b9150509250929050565b60008060408385031215612ee357612ee2613cea565b5b6000612ef185828601612c56565b9250506020612f0285828601612d34565b9150509250929050565b600060208284031215612f2257612f21613cea565b5b600082013567ffffffffffffffff811115612f4057612f3f613ce5565b5b612f4c84828501612c6b565b91505092915050565b600060208284031215612f6b57612f6a613cea565b5b6000612f7984828501612c99565b91505092915050565b600060208284031215612f9857612f97613cea565b5b6000612fa684828501612cae565b91505092915050565b600060208284031215612fc557612fc4613cea565b5b6000612fd384828501612cc3565b91505092915050565b600060208284031215612ff257612ff1613cea565b5b600082013567ffffffffffffffff8111156130105761300f613ce5565b5b61301c84828501612d06565b91505092915050565b60006020828403121561303b5761303a613cea565b5b600061304984828501612d34565b91505092915050565b61305b81613a58565b82525050565b61306a81613a6a565b82525050565b600061307b82613900565b6130858185613916565b9350613095818560208601613adb565b61309e81613cef565b840191505092915050565b60006130b48261390b565b6130be8185613927565b93506130ce818560208601613adb565b6130d781613cef565b840191505092915050565b60006130ed8261390b565b6130f78185613938565b9350613107818560208601613adb565b80840191505092915050565b6000613120603283613927565b915061312b82613d00565b604082019050919050565b6000613143602683613927565b915061314e82613d4f565b604082019050919050565b6000613166601c83613927565b915061317182613d9e565b602082019050919050565b6000613189602483613927565b915061319482613dc7565b604082019050919050565b60006131ac601983613927565b91506131b782613e16565b602082019050919050565b60006131cf602c83613927565b91506131da82613e3f565b604082019050919050565b60006131f2601683613927565b91506131fd82613e8e565b602082019050919050565b6000613215603883613927565b915061322082613eb7565b604082019050919050565b6000613238601383613927565b915061324382613f06565b602082019050919050565b600061325b602a83613927565b915061326682613f2f565b604082019050919050565b600061327e602983613927565b915061328982613f7e565b604082019050919050565b60006132a1601683613927565b91506132ac82613fcd565b602082019050919050565b60006132c4602083613927565b91506132cf82613ff6565b602082019050919050565b60006132e7602c83613927565b91506132f28261401f565b604082019050919050565b600061330a602083613927565b91506133158261406e565b602082019050919050565b600061332d601583613927565b915061333882614097565b602082019050919050565b6000613350602983613927565b915061335b826140c0565b604082019050919050565b6000613373602f83613927565b915061337e8261410f565b604082019050919050565b6000613396602183613927565b91506133a18261415e565b604082019050919050565b60006133b9603183613927565b91506133c4826141ad565b604082019050919050565b60006133dc601783613927565b91506133e7826141fc565b602082019050919050565b60006133ff601c83613927565b915061340a82614225565b602082019050919050565b6000613422601683613927565b915061342d8261424e565b602082019050919050565b6000613445600f83613927565b915061345082614277565b602082019050919050565b61346481613ac2565b82525050565b600061347682856130e2565b915061348282846130e2565b91508190509392505050565b60006020820190506134a36000830184613052565b92915050565b60006080820190506134be6000830187613052565b6134cb6020830186613052565b6134d8604083018561345b565b81810360608301526134ea8184613070565b905095945050505050565b600060208201905061350a6000830184613061565b92915050565b6000602082019050818103600083015261352a81846130a9565b905092915050565b6000602082019050818103600083015261354b81613113565b9050919050565b6000602082019050818103600083015261356b81613136565b9050919050565b6000602082019050818103600083015261358b81613159565b9050919050565b600060208201905081810360008301526135ab8161317c565b9050919050565b600060208201905081810360008301526135cb8161319f565b9050919050565b600060208201905081810360008301526135eb816131c2565b9050919050565b6000602082019050818103600083015261360b816131e5565b9050919050565b6000602082019050818103600083015261362b81613208565b9050919050565b6000602082019050818103600083015261364b8161322b565b9050919050565b6000602082019050818103600083015261366b8161324e565b9050919050565b6000602082019050818103600083015261368b81613271565b9050919050565b600060208201905081810360008301526136ab81613294565b9050919050565b600060208201905081810360008301526136cb816132b7565b9050919050565b600060208201905081810360008301526136eb816132da565b9050919050565b6000602082019050818103600083015261370b816132fd565b9050919050565b6000602082019050818103600083015261372b81613320565b9050919050565b6000602082019050818103600083015261374b81613343565b9050919050565b6000602082019050818103600083015261376b81613366565b9050919050565b6000602082019050818103600083015261378b81613389565b9050919050565b600060208201905081810360008301526137ab816133ac565b9050919050565b600060208201905081810360008301526137cb816133cf565b9050919050565b600060208201905081810360008301526137eb816133f2565b9050919050565b6000602082019050818103600083015261380b81613415565b9050919050565b6000602082019050818103600083015261382b81613438565b9050919050565b6000602082019050613847600083018461345b565b92915050565b6000613857613868565b90506138638282613b40565b919050565b6000604051905090565b600067ffffffffffffffff82111561388d5761388c613ca7565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156138b9576138b8613ca7565b5b6138c282613cef565b9050602081019050919050565b600067ffffffffffffffff8211156138ea576138e9613ca7565b5b6138f382613cef565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061394e82613ac2565b915061395983613ac2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561398e5761398d613beb565b5b828201905092915050565b60006139a482613ac2565b91506139af83613ac2565b9250826139bf576139be613c1a565b5b828204905092915050565b60006139d582613ac2565b91506139e083613ac2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a1957613a18613beb565b5b828202905092915050565b6000613a2f82613ac2565b9150613a3a83613ac2565b925082821015613a4d57613a4c613beb565b5b828203905092915050565b6000613a6382613aa2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613af9578082015181840152602081019050613ade565b83811115613b08576000848401525b50505050565b60006002820490506001821680613b2657607f821691505b60208210811415613b3a57613b39613c49565b5b50919050565b613b4982613cef565b810181811067ffffffffffffffff82111715613b6857613b67613ca7565b5b80604052505050565b6000613b7c82613ac2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613baf57613bae613beb565b5b600182019050919050565b6000613bc582613ac2565b9150613bd083613ac2565b925082613be057613bdf613c1a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f696e636f727265637420657468657220616d6f756e7400000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f6d617820706572207472616e73616374696f6e00000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206e6f742053746172746564205965742e0000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f6d696e74206174206c65617374206f6e6520746f6b656e000000000000000000600082015250565b7f596f7520617265206e6f7420696e2050726573616c65204c6973742e00000000600082015250565b7f6e6f7420656e6f75676820746f6b656e73206c65667400000000000000000000600082015250565b7f53616c65206973205061757365642e0000000000000000000000000000000000600082015250565b6142a981613a58565b81146142b457600080fd5b50565b6142c081613a6a565b81146142cb57600080fd5b50565b6142d781613a76565b81146142e257600080fd5b50565b6142ee81613ac2565b81146142f957600080fd5b5056fea26469706673582212202a206c816ff3b0d7962567c8a7f4e047e286170cb92ebaac3ce5c7f23a8e5deb64736f6c63430008070033

Deployed Bytecode Sourcemap

34538:3412:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22386:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37310:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23331:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24890:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24413:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34676:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37614:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34953:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25780:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35628:398;;;:::i;:::-;;37841:106;;;;;;;;;;;;;:::i;:::-;;26190:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34888:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36844:85;;;;;;;;;;;;;:::i;:::-;;36940:78;;;;;;;;;;;;;:::i;:::-;;37028:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23025:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34854:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22755:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14233:94;;;;;;;;;;;;;:::i;:::-;;36034:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34592:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13582:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23500:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34753:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36534:148;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37414:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25183:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26446:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34712:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23675:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36690:147;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35093:528;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25549:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36354:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37513:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14482:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22386:305;22488:4;22540:25;22525:40;;;:11;:40;;;;:105;;;;22597:33;22582:48;;;:11;:48;;;;22525:105;:158;;;;22647:36;22671:11;22647:23;:36::i;:::-;22525:158;22505:178;;22386:305;;;:::o;37310:98::-;37354:4;37377:11;:23;37389:10;37377:23;;;;;;;;;;;;;;;;;;;;;;;;;37370:30;;37310:98;:::o;23331:100::-;23385:13;23418:5;23411:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23331:100;:::o;24890:221::-;24966:7;24994:16;25002:7;24994;:16::i;:::-;24986:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25079:15;:24;25095:7;25079:24;;;;;;;;;;;;;;;;;;;;;25072:31;;24890:221;;;:::o;24413:411::-;24494:13;24510:23;24525:7;24510:14;:23::i;:::-;24494:39;;24558:5;24552:11;;:2;:11;;;;24544:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24652:5;24636:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24661:37;24678:5;24685:12;:10;:12::i;:::-;24661:16;:37::i;:::-;24636:62;24614:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24795:21;24804:2;24808:7;24795:8;:21::i;:::-;24483:341;24413:411;;:::o;34676:27::-;;;;:::o;37614:101::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37703:4:::1;37682:18;;:25;;;;;;;;;;;;;;;;;;37614:101:::0;:::o;34953:37::-;;;;:::o;25780:339::-;25975:41;25994:12;:10;:12::i;:::-;26008:7;25975:18;:41::i;:::-;25967:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26083:28;26093:4;26099:2;26103:7;26083:9;:28::i;:::-;25780:339;;;:::o;35628:398::-;35702:4;35684:22;;:14;:12;:14::i;:::-;:22;;;35676:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:4;35772:1;35758:11;;:15;;;;:::i;:::-;:27;;35750:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35844:10;;35831:9;:23;;35823:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35918:4;35900:22;;:14;;;;;;;;;;;:22;;;35892:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;35953:38;35963:10;35989:1;35975:11;;:15;;;;:::i;:::-;35953:9;:38::i;:::-;36017:1;36002:11;;:16;;;;;;;:::i;:::-;;;;;;;;35628:398::o;37841:106::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37899:7:::1;:5;:7::i;:::-;37891:25;;:48;37917:21;37891:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37841:106::o:0;26190:185::-;26328:39;26345:4;26351:2;26355:7;26328:39;;;;;;;;;;;;:16;:39::i;:::-;26190:185;;;:::o;34888:36::-;;;;:::o;36844:85::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36914:10:::1;36901;:23;;;;36844:85::o:0;36940:78::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37004:9:::1;36991:10;:22;;;;36940:78::o:0;37028:275::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:4:::1;37114:6;37100:11;;:20;;;;:::i;:::-;:33;;37092:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37175:6;37171:93;37191:6;37187:1;:10;37171:93;;;37218:44;37228:12;:10;:12::i;:::-;37260:1;37256;37242:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;37218:9;:44::i;:::-;37199:3;;;;;:::i;:::-;;;;37171:93;;;;37289:6;37274:11;;:21;;;;;;;:::i;:::-;;;;;;;;37028:275:::0;:::o;23025:239::-;23097:7;23117:13;23133:7;:16;23141:7;23133:16;;;;;;;;;;;;;;;;;;;;;23117:32;;23185:1;23168:19;;:5;:19;;;;23160:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23251:5;23244:12;;;23025:239;;;:::o;34854:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22755:208::-;22827:7;22872:1;22855:19;;:5;:19;;;;22847:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22939:9;:16;22949:5;22939:16;;;;;;;;;;;;;;;;22932:23;;22755:208;;;:::o;14233:94::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14298:21:::1;14316:1;14298:9;:21::i;:::-;14233:94::o:0;36034:308::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:4:::1;36129:8;:15;36115:11;;:29;;;;:::i;:::-;:42;;36107:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;36199:6;36195:98;36215:8;:15;36211:1;:19;36195:98;;;36250:43;36260:8;36269:1;36260:11;;;;;;;;:::i;:::-;;;;;;;;36291:1;36287;36273:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;36250:9;:43::i;:::-;36232:3;;;;;:::i;:::-;;;;36195:98;;;;36319:8;:15;36304:11;;:30;;;;;;;:::i;:::-;;;;;;;;36034:308:::0;:::o;34592:34::-;;;;:::o;13582:87::-;13628:7;13655:6;;;;;;;;;;;13648:13;;13582:87;:::o;23500:104::-;23556:13;23589:7;23582:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23500:104;:::o;34753:37::-;;;;;;;;;;;;;:::o;36534:148::-;36583:4;36625;36607:22;;:14;;;;;;;;;;;:22;;;36599:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36672:1;36665:8;;36534:148;:::o;37414:92::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37494:4:::1;37484:7;:14;;;;;;;;;;;;:::i;:::-;;37414:92:::0;:::o;25183:295::-;25298:12;:10;:12::i;:::-;25286:24;;:8;:24;;;;25278:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;25398:8;25353:18;:32;25372:12;:10;:12::i;:::-;25353:32;;;;;;;;;;;;;;;:42;25386:8;25353:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;25451:8;25422:48;;25437:12;:10;:12::i;:::-;25422:48;;;25461:8;25422:48;;;;;;:::i;:::-;;;;;;;;25183:295;;:::o;26446:328::-;26621:41;26640:12;:10;:12::i;:::-;26654:7;26621:18;:41::i;:::-;26613:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26727:39;26741:4;26747:2;26751:7;26760:5;26727:13;:39::i;:::-;26446:328;;;;:::o;34712:34::-;;;;;;;;;;;;;:::o;23675:334::-;23748:13;23782:16;23790:7;23782;:16::i;:::-;23774:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23863:21;23887:10;:8;:10::i;:::-;23863:34;;23939:1;23921:7;23915:21;:25;:86;;;;;;;;;;;;;;;;;23967:7;23976:18;:7;:16;:18::i;:::-;23950:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23915:86;23908:93;;;23675:334;;;:::o;36690:147::-;36736:4;36780;36758:26;;:18;;;;;;;;;;;:26;;;36750:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;36827:1;36820:8;;36690:147;:::o;35093:528::-;35161:1;35152:6;:10;35144:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35219:17;;35209:6;:27;;35201:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34659:4;35293:6;35279:11;;:20;;;;:::i;:::-;:33;;35271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35384:6;35371:10;;:19;;;;:::i;:::-;35358:9;:32;;35350:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35458:4;35436:26;;:18;;;;;;;;;;;:26;;;35428:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35497:6;35493:88;35513:6;35509:1;:10;35493:88;;;35539:42;35549:10;35579:1;35575;35561:11;;:15;;;;:::i;:::-;:19;;;;:::i;:::-;35539:9;:42::i;:::-;35521:3;;;;;:::i;:::-;;;;35493:88;;;;35607:6;35592:11;;:21;;;;;;;:::i;:::-;;;;;;;;35093:528;:::o;25549:164::-;25646:4;25670:18;:25;25689:5;25670:25;;;;;;;;;;;;;;;:35;25696:8;25670:35;;;;;;;;;;;;;;;;;;;;;;;;;25663:42;;25549:164;;;;:::o;36354:168::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36436:6:::1;36432:82;36448:8;:15;36444:1;:19;36432:82;;;36510:4;36483:11;:24;36495:8;36504:1;36495:11;;;;;;;;:::i;:::-;;;;;;;;36483:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;36465:3;;;;;:::i;:::-;;;;36432:82;;;;36354:168:::0;:::o;37513:95::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37596:4:::1;37579:14;;:21;;;;;;;;;;;;;;;;;;37513:95:::0;:::o;14482:192::-;13813:12;:10;:12::i;:::-;13802:23;;:7;:5;:7::i;:::-;:23;;;13794:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14591:1:::1;14571:22;;:8;:22;;;;14563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14647:19;14657:8;14647:9;:19::i;:::-;14482:192:::0;:::o;15587:157::-;15672:4;15711:25;15696:40;;;:11;:40;;;;15689:47;;15587:157;;;:::o;28284:127::-;28349:4;28401:1;28373:30;;:7;:16;28381:7;28373:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28366:37;;28284:127;;;:::o;722:98::-;775:7;802:10;795:17;;722:98;:::o;32266:174::-;32368:2;32341:15;:24;32357:7;32341:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32424:7;32420:2;32386:46;;32395:23;32410:7;32395:14;:23::i;:::-;32386:46;;;;;;;;;;;;32266:174;;:::o;28578:348::-;28671:4;28696:16;28704:7;28696;:16::i;:::-;28688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28772:13;28788:23;28803:7;28788:14;:23::i;:::-;28772:39;;28841:5;28830:16;;:7;:16;;;:51;;;;28874:7;28850:31;;:20;28862:7;28850:11;:20::i;:::-;:31;;;28830:51;:87;;;;28885:32;28902:5;28909:7;28885:16;:32::i;:::-;28830:87;28822:96;;;28578:348;;;;:::o;31570:578::-;31729:4;31702:31;;:23;31717:7;31702:14;:23::i;:::-;:31;;;31694:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31812:1;31798:16;;:2;:16;;;;31790:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31868:39;31889:4;31895:2;31899:7;31868:20;:39::i;:::-;31972:29;31989:1;31993:7;31972:8;:29::i;:::-;32033:1;32014:9;:15;32024:4;32014:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32062:1;32045:9;:13;32055:2;32045:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32093:2;32074:7;:16;32082:7;32074:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32132:7;32128:2;32113:27;;32122:4;32113:27;;;;;;;;;;;;31570:578;;;:::o;29268:110::-;29344:26;29354:2;29358:7;29344:26;;;;;;;;;;;;:9;:26::i;:::-;29268:110;;:::o;14682:173::-;14738:16;14757:6;;;;;;;;;;;14738:25;;14783:8;14774:6;;:17;;;;;;;;;;;;;;;;;;14838:8;14807:40;;14828:8;14807:40;;;;;;;;;;;;14727:128;14682:173;:::o;27656:315::-;27813:28;27823:4;27829:2;27833:7;27813:9;:28::i;:::-;27860:48;27883:4;27889:2;27893:7;27902:5;27860:22;:48::i;:::-;27852:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27656:315;;;;:::o;37727:108::-;37787:13;37820:7;37813:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37727:108;:::o;1187:723::-;1243:13;1473:1;1464:5;:10;1460:53;;;1491:10;;;;;;;;;;;;;;;;;;;;;1460:53;1523:12;1538:5;1523:20;;1554:14;1579:78;1594:1;1586:4;:9;1579:78;;1612:8;;;;;:::i;:::-;;;;1643:2;1635:10;;;;;:::i;:::-;;;1579:78;;;1667:19;1699:6;1689:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1667:39;;1717:154;1733:1;1724:5;:10;1717:154;;1761:1;1751:11;;;;;:::i;:::-;;;1828:2;1820:5;:10;;;;:::i;:::-;1807:2;:24;;;;:::i;:::-;1794:39;;1777:6;1784;1777:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1857:2;1848:11;;;;;:::i;:::-;;;1717:154;;;1895:6;1881:21;;;;;1187:723;;;;:::o;34376:126::-;;;;:::o;29605:321::-;29735:18;29741:2;29745:7;29735:5;:18::i;:::-;29786:54;29817:1;29821:2;29825:7;29834:5;29786:22;:54::i;:::-;29764:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29605:321;;;:::o;33005:799::-;33160:4;33181:15;:2;:13;;;:15::i;:::-;33177:620;;;33233:2;33217:36;;;33254:12;:10;:12::i;:::-;33268:4;33274:7;33283:5;33217:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33213:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33476:1;33459:6;:13;:18;33455:272;;;33502:60;;;;;;;;;;:::i;:::-;;;;;;;;33455:272;33677:6;33671:13;33662:6;33658:2;33654:15;33647:38;33213:529;33350:41;;;33340:51;;;:6;:51;;;;33333:58;;;;;33177:620;33781:4;33774:11;;33005:799;;;;;;;:::o;30262:382::-;30356:1;30342:16;;:2;:16;;;;30334:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30415:16;30423:7;30415;:16::i;:::-;30414:17;30406:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30477:45;30506:1;30510:2;30514:7;30477:20;:45::i;:::-;30552:1;30535:9;:13;30545:2;30535:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30583:2;30564:7;:16;30572:7;30564:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30628:7;30624:2;30603:33;;30620:1;30603:33;;;;;;;;;;;;30262:382;;:::o;3652:387::-;3712:4;3920:12;3987:7;3975:20;3967:28;;4030:1;4023:4;:8;4016:15;;;3652:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:323::-;7359:6;7408:2;7396:9;7387:7;7383:23;7379:32;7376:119;;;7414:79;;:::i;:::-;7376:119;7534:1;7559:50;7601:7;7592:6;7581:9;7577:22;7559:50;:::i;:::-;7549:60;;7505:114;7303:323;;;;:::o;7632:327::-;7690:6;7739:2;7727:9;7718:7;7714:23;7710:32;7707:119;;;7745:79;;:::i;:::-;7707:119;7865:1;7890:52;7934:7;7925:6;7914:9;7910:22;7890:52;:::i;:::-;7880:62;;7836:116;7632:327;;;;:::o;7965:349::-;8034:6;8083:2;8071:9;8062:7;8058:23;8054:32;8051:119;;;8089:79;;:::i;:::-;8051:119;8209:1;8234:63;8289:7;8280:6;8269:9;8265:22;8234:63;:::i;:::-;8224:73;;8180:127;7965:349;;;;:::o;8320:509::-;8389:6;8438:2;8426:9;8417:7;8413:23;8409:32;8406:119;;;8444:79;;:::i;:::-;8406:119;8592:1;8581:9;8577:17;8564:31;8622:18;8614:6;8611:30;8608:117;;;8644:79;;:::i;:::-;8608:117;8749:63;8804:7;8795:6;8784:9;8780:22;8749:63;:::i;:::-;8739:73;;8535:287;8320:509;;;;:::o;8835:329::-;8894:6;8943:2;8931:9;8922:7;8918:23;8914:32;8911:119;;;8949:79;;:::i;:::-;8911:119;9069:1;9094:53;9139:7;9130:6;9119:9;9115:22;9094:53;:::i;:::-;9084:63;;9040:117;8835:329;;;;:::o;9170:118::-;9257:24;9275:5;9257:24;:::i;:::-;9252:3;9245:37;9170:118;;:::o;9294:109::-;9375:21;9390:5;9375:21;:::i;:::-;9370:3;9363:34;9294:109;;:::o;9409:360::-;9495:3;9523:38;9555:5;9523:38;:::i;:::-;9577:70;9640:6;9635:3;9577:70;:::i;:::-;9570:77;;9656:52;9701:6;9696:3;9689:4;9682:5;9678:16;9656:52;:::i;:::-;9733:29;9755:6;9733:29;:::i;:::-;9728:3;9724:39;9717:46;;9499:270;9409:360;;;;:::o;9775:364::-;9863:3;9891:39;9924:5;9891:39;:::i;:::-;9946:71;10010:6;10005:3;9946:71;:::i;:::-;9939:78;;10026:52;10071:6;10066:3;10059:4;10052:5;10048:16;10026:52;:::i;:::-;10103:29;10125:6;10103:29;:::i;:::-;10098:3;10094:39;10087:46;;9867:272;9775:364;;;;:::o;10145:377::-;10251:3;10279:39;10312:5;10279:39;:::i;:::-;10334:89;10416:6;10411:3;10334:89;:::i;:::-;10327:96;;10432:52;10477:6;10472:3;10465:4;10458:5;10454:16;10432:52;:::i;:::-;10509:6;10504:3;10500:16;10493:23;;10255:267;10145:377;;;;:::o;10528:366::-;10670:3;10691:67;10755:2;10750:3;10691:67;:::i;:::-;10684:74;;10767:93;10856:3;10767:93;:::i;:::-;10885:2;10880:3;10876:12;10869:19;;10528:366;;;:::o;10900:::-;11042:3;11063:67;11127:2;11122:3;11063:67;:::i;:::-;11056:74;;11139:93;11228:3;11139:93;:::i;:::-;11257:2;11252:3;11248:12;11241:19;;10900:366;;;:::o;11272:::-;11414:3;11435:67;11499:2;11494:3;11435:67;:::i;:::-;11428:74;;11511:93;11600:3;11511:93;:::i;:::-;11629:2;11624:3;11620:12;11613:19;;11272:366;;;:::o;11644:::-;11786:3;11807:67;11871:2;11866:3;11807:67;:::i;:::-;11800:74;;11883:93;11972:3;11883:93;:::i;:::-;12001:2;11996:3;11992:12;11985:19;;11644:366;;;:::o;12016:::-;12158:3;12179:67;12243:2;12238:3;12179:67;:::i;:::-;12172:74;;12255:93;12344:3;12255:93;:::i;:::-;12373:2;12368:3;12364:12;12357:19;;12016:366;;;:::o;12388:::-;12530:3;12551:67;12615:2;12610:3;12551:67;:::i;:::-;12544:74;;12627:93;12716:3;12627:93;:::i;:::-;12745:2;12740:3;12736:12;12729:19;;12388:366;;;:::o;12760:::-;12902:3;12923:67;12987:2;12982:3;12923:67;:::i;:::-;12916:74;;12999:93;13088:3;12999:93;:::i;:::-;13117:2;13112:3;13108:12;13101:19;;12760:366;;;:::o;13132:::-;13274:3;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13371:93;13460:3;13371:93;:::i;:::-;13489:2;13484:3;13480:12;13473:19;;13132:366;;;:::o;13504:::-;13646:3;13667:67;13731:2;13726:3;13667:67;:::i;:::-;13660:74;;13743:93;13832:3;13743:93;:::i;:::-;13861:2;13856:3;13852:12;13845:19;;13504:366;;;:::o;13876:::-;14018:3;14039:67;14103:2;14098:3;14039:67;:::i;:::-;14032:74;;14115:93;14204:3;14115:93;:::i;:::-;14233:2;14228:3;14224:12;14217:19;;13876:366;;;:::o;14248:::-;14390:3;14411:67;14475:2;14470:3;14411:67;:::i;:::-;14404:74;;14487:93;14576:3;14487:93;:::i;:::-;14605:2;14600:3;14596:12;14589:19;;14248:366;;;:::o;14620:::-;14762:3;14783:67;14847:2;14842:3;14783:67;:::i;:::-;14776:74;;14859:93;14948:3;14859:93;:::i;:::-;14977:2;14972:3;14968:12;14961:19;;14620:366;;;:::o;14992:::-;15134:3;15155:67;15219:2;15214:3;15155:67;:::i;:::-;15148:74;;15231:93;15320:3;15231:93;:::i;:::-;15349:2;15344:3;15340:12;15333:19;;14992:366;;;:::o;15364:::-;15506:3;15527:67;15591:2;15586:3;15527:67;:::i;:::-;15520:74;;15603:93;15692:3;15603:93;:::i;:::-;15721:2;15716:3;15712:12;15705:19;;15364:366;;;:::o;15736:::-;15878:3;15899:67;15963:2;15958:3;15899:67;:::i;:::-;15892:74;;15975:93;16064:3;15975:93;:::i;:::-;16093:2;16088:3;16084:12;16077:19;;15736:366;;;:::o;16108:::-;16250:3;16271:67;16335:2;16330:3;16271:67;:::i;:::-;16264:74;;16347:93;16436:3;16347:93;:::i;:::-;16465:2;16460:3;16456:12;16449:19;;16108:366;;;:::o;16480:::-;16622:3;16643:67;16707:2;16702:3;16643:67;:::i;:::-;16636:74;;16719:93;16808:3;16719:93;:::i;:::-;16837:2;16832:3;16828:12;16821:19;;16480:366;;;:::o;16852:::-;16994:3;17015:67;17079:2;17074:3;17015:67;:::i;:::-;17008:74;;17091:93;17180:3;17091:93;:::i;:::-;17209:2;17204:3;17200:12;17193:19;;16852:366;;;:::o;17224:::-;17366:3;17387:67;17451:2;17446:3;17387:67;:::i;:::-;17380:74;;17463:93;17552:3;17463:93;:::i;:::-;17581:2;17576:3;17572:12;17565:19;;17224:366;;;:::o;17596:::-;17738:3;17759:67;17823:2;17818:3;17759:67;:::i;:::-;17752:74;;17835:93;17924:3;17835:93;:::i;:::-;17953:2;17948:3;17944:12;17937:19;;17596:366;;;:::o;17968:::-;18110:3;18131:67;18195:2;18190:3;18131:67;:::i;:::-;18124:74;;18207:93;18296:3;18207:93;:::i;:::-;18325:2;18320:3;18316:12;18309:19;;17968:366;;;:::o;18340:::-;18482:3;18503:67;18567:2;18562:3;18503:67;:::i;:::-;18496:74;;18579:93;18668:3;18579:93;:::i;:::-;18697:2;18692:3;18688:12;18681:19;;18340:366;;;:::o;18712:::-;18854:3;18875:67;18939:2;18934:3;18875:67;:::i;:::-;18868:74;;18951:93;19040:3;18951:93;:::i;:::-;19069:2;19064:3;19060:12;19053:19;;18712:366;;;:::o;19084:::-;19226:3;19247:67;19311:2;19306:3;19247:67;:::i;:::-;19240:74;;19323:93;19412:3;19323:93;:::i;:::-;19441:2;19436:3;19432:12;19425:19;;19084:366;;;:::o;19456:118::-;19543:24;19561:5;19543:24;:::i;:::-;19538:3;19531:37;19456:118;;:::o;19580:435::-;19760:3;19782:95;19873:3;19864:6;19782:95;:::i;:::-;19775:102;;19894:95;19985:3;19976:6;19894:95;:::i;:::-;19887:102;;20006:3;19999:10;;19580:435;;;;;:::o;20021:222::-;20114:4;20152:2;20141:9;20137:18;20129:26;;20165:71;20233:1;20222:9;20218:17;20209:6;20165:71;:::i;:::-;20021:222;;;;:::o;20249:640::-;20444:4;20482:3;20471:9;20467:19;20459:27;;20496:71;20564:1;20553:9;20549:17;20540:6;20496:71;:::i;:::-;20577:72;20645:2;20634:9;20630:18;20621:6;20577:72;:::i;:::-;20659;20727:2;20716:9;20712:18;20703:6;20659:72;:::i;:::-;20778:9;20772:4;20768:20;20763:2;20752:9;20748:18;20741:48;20806:76;20877:4;20868:6;20806:76;:::i;:::-;20798:84;;20249:640;;;;;;;:::o;20895:210::-;20982:4;21020:2;21009:9;21005:18;20997:26;;21033:65;21095:1;21084:9;21080:17;21071:6;21033:65;:::i;:::-;20895:210;;;;:::o;21111:313::-;21224:4;21262:2;21251:9;21247:18;21239:26;;21311:9;21305:4;21301:20;21297:1;21286:9;21282:17;21275:47;21339:78;21412:4;21403:6;21339:78;:::i;:::-;21331:86;;21111:313;;;;:::o;21430:419::-;21596:4;21634:2;21623:9;21619:18;21611:26;;21683:9;21677:4;21673:20;21669:1;21658:9;21654:17;21647:47;21711:131;21837:4;21711:131;:::i;:::-;21703:139;;21430:419;;;:::o;21855:::-;22021:4;22059:2;22048:9;22044:18;22036:26;;22108:9;22102:4;22098:20;22094:1;22083:9;22079:17;22072:47;22136:131;22262:4;22136:131;:::i;:::-;22128:139;;21855:419;;;:::o;22280:::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22533:9;22527:4;22523:20;22519:1;22508:9;22504:17;22497:47;22561:131;22687:4;22561:131;:::i;:::-;22553:139;;22280:419;;;:::o;22705:::-;22871:4;22909:2;22898:9;22894:18;22886:26;;22958:9;22952:4;22948:20;22944:1;22933:9;22929:17;22922:47;22986:131;23112:4;22986:131;:::i;:::-;22978:139;;22705:419;;;:::o;23130:::-;23296:4;23334:2;23323:9;23319:18;23311:26;;23383:9;23377:4;23373:20;23369:1;23358:9;23354:17;23347:47;23411:131;23537:4;23411:131;:::i;:::-;23403:139;;23130:419;;;:::o;23555:::-;23721:4;23759:2;23748:9;23744:18;23736:26;;23808:9;23802:4;23798:20;23794:1;23783:9;23779:17;23772:47;23836:131;23962:4;23836:131;:::i;:::-;23828:139;;23555:419;;;:::o;23980:::-;24146:4;24184:2;24173:9;24169:18;24161:26;;24233:9;24227:4;24223:20;24219:1;24208:9;24204:17;24197:47;24261:131;24387:4;24261:131;:::i;:::-;24253:139;;23980:419;;;:::o;24405:::-;24571:4;24609:2;24598:9;24594:18;24586:26;;24658:9;24652:4;24648:20;24644:1;24633:9;24629:17;24622:47;24686:131;24812:4;24686:131;:::i;:::-;24678:139;;24405:419;;;:::o;24830:::-;24996:4;25034:2;25023:9;25019:18;25011:26;;25083:9;25077:4;25073:20;25069:1;25058:9;25054:17;25047:47;25111:131;25237:4;25111:131;:::i;:::-;25103:139;;24830:419;;;:::o;25255:::-;25421:4;25459:2;25448:9;25444:18;25436:26;;25508:9;25502:4;25498:20;25494:1;25483:9;25479:17;25472:47;25536:131;25662:4;25536:131;:::i;:::-;25528:139;;25255:419;;;:::o;25680:::-;25846:4;25884:2;25873:9;25869:18;25861:26;;25933:9;25927:4;25923:20;25919:1;25908:9;25904:17;25897:47;25961:131;26087:4;25961:131;:::i;:::-;25953:139;;25680:419;;;:::o;26105:::-;26271:4;26309:2;26298:9;26294:18;26286:26;;26358:9;26352:4;26348:20;26344:1;26333:9;26329:17;26322:47;26386:131;26512:4;26386:131;:::i;:::-;26378:139;;26105:419;;;:::o;26530:::-;26696:4;26734:2;26723:9;26719:18;26711:26;;26783:9;26777:4;26773:20;26769:1;26758:9;26754:17;26747:47;26811:131;26937:4;26811:131;:::i;:::-;26803:139;;26530:419;;;:::o;26955:::-;27121:4;27159:2;27148:9;27144:18;27136:26;;27208:9;27202:4;27198:20;27194:1;27183:9;27179:17;27172:47;27236:131;27362:4;27236:131;:::i;:::-;27228:139;;26955:419;;;:::o;27380:::-;27546:4;27584:2;27573:9;27569:18;27561:26;;27633:9;27627:4;27623:20;27619:1;27608:9;27604:17;27597:47;27661:131;27787:4;27661:131;:::i;:::-;27653:139;;27380:419;;;:::o;27805:::-;27971:4;28009:2;27998:9;27994:18;27986:26;;28058:9;28052:4;28048:20;28044:1;28033:9;28029:17;28022:47;28086:131;28212:4;28086:131;:::i;:::-;28078:139;;27805:419;;;:::o;28230:::-;28396:4;28434:2;28423:9;28419:18;28411:26;;28483:9;28477:4;28473:20;28469:1;28458:9;28454:17;28447:47;28511:131;28637:4;28511:131;:::i;:::-;28503:139;;28230:419;;;:::o;28655:::-;28821:4;28859:2;28848:9;28844:18;28836:26;;28908:9;28902:4;28898:20;28894:1;28883:9;28879:17;28872:47;28936:131;29062:4;28936:131;:::i;:::-;28928:139;;28655:419;;;:::o;29080:::-;29246:4;29284:2;29273:9;29269:18;29261:26;;29333:9;29327:4;29323:20;29319:1;29308:9;29304:17;29297:47;29361:131;29487:4;29361:131;:::i;:::-;29353:139;;29080:419;;;:::o;29505:::-;29671:4;29709:2;29698:9;29694:18;29686:26;;29758:9;29752:4;29748:20;29744:1;29733:9;29729:17;29722:47;29786:131;29912:4;29786:131;:::i;:::-;29778:139;;29505:419;;;:::o;29930:::-;30096:4;30134:2;30123:9;30119:18;30111:26;;30183:9;30177:4;30173:20;30169:1;30158:9;30154:17;30147:47;30211:131;30337:4;30211:131;:::i;:::-;30203:139;;29930:419;;;:::o;30355:::-;30521:4;30559:2;30548:9;30544:18;30536:26;;30608:9;30602:4;30598:20;30594:1;30583:9;30579:17;30572:47;30636:131;30762:4;30636:131;:::i;:::-;30628:139;;30355:419;;;:::o;30780:::-;30946:4;30984:2;30973:9;30969:18;30961:26;;31033:9;31027:4;31023:20;31019:1;31008:9;31004:17;30997:47;31061:131;31187:4;31061:131;:::i;:::-;31053:139;;30780:419;;;:::o;31205:::-;31371:4;31409:2;31398:9;31394:18;31386:26;;31458:9;31452:4;31448:20;31444:1;31433:9;31429:17;31422:47;31486:131;31612:4;31486:131;:::i;:::-;31478:139;;31205:419;;;:::o;31630:222::-;31723:4;31761:2;31750:9;31746:18;31738:26;;31774:71;31842:1;31831:9;31827:17;31818:6;31774:71;:::i;:::-;31630:222;;;;:::o;31858:129::-;31892:6;31919:20;;:::i;:::-;31909:30;;31948:33;31976:4;31968:6;31948:33;:::i;:::-;31858:129;;;:::o;31993:75::-;32026:6;32059:2;32053:9;32043:19;;31993:75;:::o;32074:311::-;32151:4;32241:18;32233:6;32230:30;32227:56;;;32263:18;;:::i;:::-;32227:56;32313:4;32305:6;32301:17;32293:25;;32373:4;32367;32363:15;32355:23;;32074:311;;;:::o;32391:307::-;32452:4;32542:18;32534:6;32531:30;32528:56;;;32564:18;;:::i;:::-;32528:56;32602:29;32624:6;32602:29;:::i;:::-;32594:37;;32686:4;32680;32676:15;32668:23;;32391:307;;;:::o;32704:308::-;32766:4;32856:18;32848:6;32845:30;32842:56;;;32878:18;;:::i;:::-;32842:56;32916:29;32938:6;32916:29;:::i;:::-;32908:37;;33000:4;32994;32990:15;32982:23;;32704:308;;;:::o;33018:98::-;33069:6;33103:5;33097:12;33087:22;;33018:98;;;:::o;33122:99::-;33174:6;33208:5;33202:12;33192:22;;33122:99;;;:::o;33227:168::-;33310:11;33344:6;33339:3;33332:19;33384:4;33379:3;33375:14;33360:29;;33227:168;;;;:::o;33401:169::-;33485:11;33519:6;33514:3;33507:19;33559:4;33554:3;33550:14;33535:29;;33401:169;;;;:::o;33576:148::-;33678:11;33715:3;33700:18;;33576:148;;;;:::o;33730:305::-;33770:3;33789:20;33807:1;33789:20;:::i;:::-;33784:25;;33823:20;33841:1;33823:20;:::i;:::-;33818:25;;33977:1;33909:66;33905:74;33902:1;33899:81;33896:107;;;33983:18;;:::i;:::-;33896:107;34027:1;34024;34020:9;34013:16;;33730:305;;;;:::o;34041:185::-;34081:1;34098:20;34116:1;34098:20;:::i;:::-;34093:25;;34132:20;34150:1;34132:20;:::i;:::-;34127:25;;34171:1;34161:35;;34176:18;;:::i;:::-;34161:35;34218:1;34215;34211:9;34206:14;;34041:185;;;;:::o;34232:348::-;34272:7;34295:20;34313:1;34295:20;:::i;:::-;34290:25;;34329:20;34347:1;34329:20;:::i;:::-;34324:25;;34517:1;34449:66;34445:74;34442:1;34439:81;34434:1;34427:9;34420:17;34416:105;34413:131;;;34524:18;;:::i;:::-;34413:131;34572:1;34569;34565:9;34554:20;;34232:348;;;;:::o;34586:191::-;34626:4;34646:20;34664:1;34646:20;:::i;:::-;34641:25;;34680:20;34698:1;34680:20;:::i;:::-;34675:25;;34719:1;34716;34713:8;34710:34;;;34724:18;;:::i;:::-;34710:34;34769:1;34766;34762:9;34754:17;;34586:191;;;;:::o;34783:96::-;34820:7;34849:24;34867:5;34849:24;:::i;:::-;34838:35;;34783:96;;;:::o;34885:90::-;34919:7;34962:5;34955:13;34948:21;34937:32;;34885:90;;;:::o;34981:149::-;35017:7;35057:66;35050:5;35046:78;35035:89;;34981:149;;;:::o;35136:126::-;35173:7;35213:42;35206:5;35202:54;35191:65;;35136:126;;;:::o;35268:77::-;35305:7;35334:5;35323:16;;35268:77;;;:::o;35351:154::-;35435:6;35430:3;35425;35412:30;35497:1;35488:6;35483:3;35479:16;35472:27;35351:154;;;:::o;35511:307::-;35579:1;35589:113;35603:6;35600:1;35597:13;35589:113;;;35688:1;35683:3;35679:11;35673:18;35669:1;35664:3;35660:11;35653:39;35625:2;35622:1;35618:10;35613:15;;35589:113;;;35720:6;35717:1;35714:13;35711:101;;;35800:1;35791:6;35786:3;35782:16;35775:27;35711:101;35560:258;35511:307;;;:::o;35824:320::-;35868:6;35905:1;35899:4;35895:12;35885:22;;35952:1;35946:4;35942:12;35973:18;35963:81;;36029:4;36021:6;36017:17;36007:27;;35963:81;36091:2;36083:6;36080:14;36060:18;36057:38;36054:84;;;36110:18;;:::i;:::-;36054:84;35875:269;35824:320;;;:::o;36150:281::-;36233:27;36255:4;36233:27;:::i;:::-;36225:6;36221:40;36363:6;36351:10;36348:22;36327:18;36315:10;36312:34;36309:62;36306:88;;;36374:18;;:::i;:::-;36306:88;36414:10;36410:2;36403:22;36193:238;36150:281;;:::o;36437:233::-;36476:3;36499:24;36517:5;36499:24;:::i;:::-;36490:33;;36545:66;36538:5;36535:77;36532:103;;;36615:18;;:::i;:::-;36532:103;36662:1;36655:5;36651:13;36644:20;;36437:233;;;:::o;36676:176::-;36708:1;36725:20;36743:1;36725:20;:::i;:::-;36720:25;;36759:20;36777:1;36759:20;:::i;:::-;36754:25;;36798:1;36788:35;;36803:18;;:::i;:::-;36788:35;36844:1;36841;36837:9;36832:14;;36676:176;;;;:::o;36858:180::-;36906:77;36903:1;36896:88;37003:4;37000:1;36993:15;37027:4;37024:1;37017:15;37044:180;37092:77;37089:1;37082:88;37189:4;37186:1;37179:15;37213:4;37210:1;37203:15;37230:180;37278:77;37275:1;37268:88;37375:4;37372:1;37365:15;37399:4;37396:1;37389:15;37416:180;37464:77;37461:1;37454:88;37561:4;37558:1;37551:15;37585:4;37582:1;37575:15;37602:180;37650:77;37647:1;37640:88;37747:4;37744:1;37737:15;37771:4;37768:1;37761:15;37788:117;37897:1;37894;37887:12;37911:117;38020:1;38017;38010:12;38034:117;38143:1;38140;38133:12;38157:117;38266:1;38263;38256:12;38280:117;38389:1;38386;38379:12;38403:102;38444:6;38495:2;38491:7;38486:2;38479:5;38475:14;38471:28;38461:38;;38403:102;;;:::o;38511:237::-;38651:34;38647:1;38639:6;38635:14;38628:58;38720:20;38715:2;38707:6;38703:15;38696:45;38511:237;:::o;38754:225::-;38894:34;38890:1;38882:6;38878:14;38871:58;38963:8;38958:2;38950:6;38946:15;38939:33;38754:225;:::o;38985:178::-;39125:30;39121:1;39113:6;39109:14;39102:54;38985:178;:::o;39169:223::-;39309:34;39305:1;39297:6;39293:14;39286:58;39378:6;39373:2;39365:6;39361:15;39354:31;39169:223;:::o;39398:175::-;39538:27;39534:1;39526:6;39522:14;39515:51;39398:175;:::o;39579:231::-;39719:34;39715:1;39707:6;39703:14;39696:58;39788:14;39783:2;39775:6;39771:15;39764:39;39579:231;:::o;39816:172::-;39956:24;39952:1;39944:6;39940:14;39933:48;39816:172;:::o;39994:243::-;40134:34;40130:1;40122:6;40118:14;40111:58;40203:26;40198:2;40190:6;40186:15;40179:51;39994:243;:::o;40243:169::-;40383:21;40379:1;40371:6;40367:14;40360:45;40243:169;:::o;40418:229::-;40558:34;40554:1;40546:6;40542:14;40535:58;40627:12;40622:2;40614:6;40610:15;40603:37;40418:229;:::o;40653:228::-;40793:34;40789:1;40781:6;40777:14;40770:58;40862:11;40857:2;40849:6;40845:15;40838:36;40653:228;:::o;40887:172::-;41027:24;41023:1;41015:6;41011:14;41004:48;40887:172;:::o;41065:182::-;41205:34;41201:1;41193:6;41189:14;41182:58;41065:182;:::o;41253:231::-;41393:34;41389:1;41381:6;41377:14;41370:58;41462:14;41457:2;41449:6;41445:15;41438:39;41253:231;:::o;41490:182::-;41630:34;41626:1;41618:6;41614:14;41607:58;41490:182;:::o;41678:171::-;41818:23;41814:1;41806:6;41802:14;41795:47;41678:171;:::o;41855:228::-;41995:34;41991:1;41983:6;41979:14;41972:58;42064:11;42059:2;42051:6;42047:15;42040:36;41855:228;:::o;42089:234::-;42229:34;42225:1;42217:6;42213:14;42206:58;42298:17;42293:2;42285:6;42281:15;42274:42;42089:234;:::o;42329:220::-;42469:34;42465:1;42457:6;42453:14;42446:58;42538:3;42533:2;42525:6;42521:15;42514:28;42329:220;:::o;42555:236::-;42695:34;42691:1;42683:6;42679:14;42672:58;42764:19;42759:2;42751:6;42747:15;42740:44;42555:236;:::o;42797:173::-;42937:25;42933:1;42925:6;42921:14;42914:49;42797:173;:::o;42976:178::-;43116:30;43112:1;43104:6;43100:14;43093:54;42976:178;:::o;43160:172::-;43300:24;43296:1;43288:6;43284:14;43277:48;43160:172;:::o;43338:165::-;43478:17;43474:1;43466:6;43462:14;43455:41;43338:165;:::o;43509:122::-;43582:24;43600:5;43582:24;:::i;:::-;43575:5;43572:35;43562:63;;43621:1;43618;43611:12;43562:63;43509:122;:::o;43637:116::-;43707:21;43722:5;43707:21;:::i;:::-;43700:5;43697:32;43687:60;;43743:1;43740;43733:12;43687:60;43637:116;:::o;43759:120::-;43831:23;43848:5;43831:23;:::i;:::-;43824:5;43821:34;43811:62;;43869:1;43866;43859:12;43811:62;43759:120;:::o;43885:122::-;43958:24;43976:5;43958:24;:::i;:::-;43951:5;43948:35;43938:63;;43997:1;43994;43987:12;43938:63;43885:122;:::o

Swarm Source

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