ETH Price: $3,427.55 (+3.23%)

Token

Doge Father (DOGE)
 

Overview

Max Total Supply

402 DOGE

Holders

132

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 DOGE
0xbefcf846a328a2f62f6e332ad0b3c04aa9765342
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
DogeFather

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-29
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

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

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

contract OwnableDelegateProxy {}

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

contract DogeFather is Ownable, ERC721 {
    uint256 public constant TOTAL_MAX_QTY = 2222;
    uint256 public constant FREE_MINT_MAX_QTY = 222;
    uint256 public constant GIFT_MAX_QTY = 30;
    uint256 public constant TOTAL_MINT_MAX_QTY = TOTAL_MAX_QTY - GIFT_MAX_QTY;
    uint256 public constant PRICE = 0.039 ether;
    uint256 public constant MAX_QTY_PER_WALLET = 20;
    string private _tokenBaseURI;
    uint256 public maxFreeQtyPerWallet = 1;
    uint256 public mintedQty = 0;
    uint256 public giftedQty = 0;
    mapping(address => uint256) public minterToTokenQty;
    address proxyRegistryAddress;

    constructor() ERC721("Doge Father", "DOGE") {
        if(block.chainid == 0) {
            proxyRegistryAddress = 0xa5409ec958C83C3f309868babACA7c86DCB077c1;
        }
        else if(block.chainid == 4) {
            proxyRegistryAddress = 0xF57B2c51dED3A29e6891aba85459d600256Cf317;
        }
    }

    function totalSupply() public view returns (uint256) {
        return mintedQty + giftedQty;
    }

    function mint(uint256 _mintQty) external payable {
        // free
        if (mintedQty < FREE_MINT_MAX_QTY) {
            require(mintedQty + _mintQty <= FREE_MINT_MAX_QTY, "MAXL");
            require(minterToTokenQty[msg.sender] + _mintQty <= maxFreeQtyPerWallet, "MAXF");
        }
        //paid
        else {
            require(mintedQty + _mintQty <= TOTAL_MINT_MAX_QTY, "MAXL");
            require(minterToTokenQty[msg.sender] + _mintQty <= MAX_QTY_PER_WALLET, "MAXP");
            require(msg.value >= PRICE * _mintQty, "SETH");
        }
        uint256 totalSupplyBefore = totalSupply();
        mintedQty += _mintQty;
        minterToTokenQty[msg.sender] += _mintQty;
        for (uint256 i = 0; i < _mintQty; i++) {
            _mint(msg.sender, ++totalSupplyBefore);
        }
    }

    function gift(address[] calldata receivers) external onlyOwner {
        require(giftedQty + receivers.length <= GIFT_MAX_QTY, "MAXG");

        uint256 totalSupplyBefore = totalSupply();
        giftedQty += receivers.length;
        for (uint256 i = 0; i < receivers.length; i++) {
            _mint(receivers[i], ++totalSupplyBefore);
        }
    }

    function withdrawAll() external onlyOwner {
        require(address(this).balance > 0, "ZERO");
        payable(msg.sender).transfer(address(this).balance);
    }

    function setMaxFreeQtyPerTx(uint256 _maxQtyPerTx) external onlyOwner {
        maxFreeQtyPerWallet = _maxQtyPerTx;
    }

    function setProxyRegistryAddress(address proxyAddress) external onlyOwner {
        proxyRegistryAddress = proxyAddress;
    }

    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    function setBaseURI(string calldata URI) external onlyOwner {
        _tokenBaseURI = URI;
    }

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

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":"FREE_MINT_MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GIFT_MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_QTY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_MINT_MAX_QTY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftedQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"maxFreeQtyPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintQty","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintedQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minterToTokenQty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxQtyPerTx","type":"uint256"}],"name":"setMaxFreeQtyPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyAddress","type":"address"}],"name":"setProxyRegistryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600160085560006009556000600a553480156200002057600080fd5b506040518060400160405280600b81526020017f446f6765204661746865720000000000000000000000000000000000000000008152506040518060400160405280600481526020017f444f474500000000000000000000000000000000000000000000000000000000815250620000ad620000a1620001ad60201b60201c565b620001b560201b60201c565b8160019080519060200190620000c592919062000279565b508060029080519060200190620000de92919062000279565b5050506000461415620001465773a5409ec958c83c3f309868babaca7c86dcb077c1600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001a7565b6004461415620001a65773f57b2c51ded3a29e6891aba85459d600256cf317600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b6200038e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002879062000329565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b600060028204905060018216806200034257607f821691505b602082108114156200035957620003586200035f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613d26806200039e6000396000f3fe6080604052600436106101ee5760003560e01c8063853828b61161010d578063a22cb465116100a0578063d26ea6c01161006f578063d26ea6c0146106cc578063dee816e6146106f5578063e351da4c14610720578063e985e9c51461074b578063f2fde38b14610788576101ee565b8063a22cb46514610612578063b88d4fde1461063b578063bd34fc5714610664578063c87b56dd1461068f576101ee565b806395d89b41116100dc57806395d89b4114610575578063966784ec146105a05780639a525d9c146105cb578063a0712d68146105f6576101ee565b8063853828b6146104cb57806388aadd41146104e25780638d859f3e1461051f5780638da5cb5b1461054a576101ee565b80633f5632b0116101855780636352211e116101545780636352211e1461041157806370a082311461044e578063715018a61461048b578063738a92e8146104a2576101ee565b80633f5632b01461036957806342842e0e1461039457806355f804b3146103bd5780635f717202146103e6576101ee565b8063163e1e61116101c1578063163e1e61146102c157806318160ddd146102ea57806323b872dd146103155780633354fe341461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612a4c565b6107b1565b6040516102279190612faa565b60405180910390f35b34801561023c57600080fd5b50610245610893565b6040516102529190612fc5565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612b20565b610925565b60405161028f9190612f43565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906129bf565b6109aa565b005b3480156102cd57600080fd5b506102e860048036038101906102e391906129ff565b610ac2565b005b3480156102f657600080fd5b506102ff610c1e565b60405161030c91906132a7565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906128a9565b610c35565b005b34801561034a57600080fd5b50610353610c95565b60405161036091906132a7565b60405180910390f35b34801561037557600080fd5b5061037e610c9a565b60405161038b91906132a7565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b691906128a9565b610ca0565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612ad3565b610cc0565b005b3480156103f257600080fd5b506103fb610d52565b60405161040891906132a7565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190612b20565b610d64565b6040516104459190612f43565b60405180910390f35b34801561045a57600080fd5b506104756004803603810190610470919061283c565b610e16565b60405161048291906132a7565b60405180910390f35b34801561049757600080fd5b506104a0610ece565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612b20565b610f56565b005b3480156104d757600080fd5b506104e0610fdc565b005b3480156104ee57600080fd5b506105096004803603810190610504919061283c565b6110e4565b60405161051691906132a7565b60405180910390f35b34801561052b57600080fd5b506105346110fc565b60405161054191906132a7565b60405180910390f35b34801561055657600080fd5b5061055f611107565b60405161056c9190612f43565b60405180910390f35b34801561058157600080fd5b5061058a611130565b6040516105979190612fc5565b60405180910390f35b3480156105ac57600080fd5b506105b56111c2565b6040516105c291906132a7565b60405180910390f35b3480156105d757600080fd5b506105e06111c8565b6040516105ed91906132a7565b60405180910390f35b610610600480360381019061060b9190612b20565b6111cd565b005b34801561061e57600080fd5b506106396004803603810190610634919061297f565b6114b3565b005b34801561064757600080fd5b50610662600480360381019061065d91906128fc565b6114c9565b005b34801561067057600080fd5b5061067961152b565b60405161068691906132a7565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612b20565b611531565b6040516106c39190612fc5565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061283c565b6115d8565b005b34801561070157600080fd5b5061070a611698565b60405161071791906132a7565b60405180910390f35b34801561072c57600080fd5b5061073561169e565b60405161074291906132a7565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612869565b6116a3565b60405161077f9190612faa565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061283c565b6117a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088c575061088b8261189d565b5b9050919050565b6060600180546108a290613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce90613538565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600061093082611907565b61096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906131c7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b582610d64565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90613267565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a45611973565b73ffffffffffffffffffffffffffffffffffffffff161480610a745750610a7381610a6e611973565b6116a3565b5b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90613107565b60405180910390fd5b610abd838361197b565b505050565b610aca611973565b73ffffffffffffffffffffffffffffffffffffffff16610ae8611107565b73ffffffffffffffffffffffffffffffffffffffff1614610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590613207565b60405180910390fd5b601e82829050600a54610b51919061335b565b1115610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906131e7565b60405180910390fd5b6000610b9c610c1e565b905082829050600a6000828254610bb3919061335b565b9250508190555060005b83839050811015610c1857610c05848483818110610bde57610bdd6136a2565b5b9050602002016020810190610bf3919061283c565b83610bfd9061359b565b935083611a34565b8080610c109061359b565b915050610bbd565b50505050565b6000600a54600954610c30919061335b565b905090565b610c46610c40611973565b82611c02565b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613287565b60405180910390fd5b610c90838383611ce0565b505050565b601e81565b60095481565b610cbb838383604051806020016040528060008152506114c9565b505050565b610cc8611973565b73ffffffffffffffffffffffffffffffffffffffff16610ce6611107565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390613207565b60405180910390fd5b818160079190610d4d9291906125ff565b505050565b601e6108ae610d61919061343c565b81565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613167565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613147565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed6611973565b73ffffffffffffffffffffffffffffffffffffffff16610ef4611107565b73ffffffffffffffffffffffffffffffffffffffff1614610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613207565b60405180910390fd5b610f546000611f3c565b565b610f5e611973565b73ffffffffffffffffffffffffffffffffffffffff16610f7c611107565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613207565b60405180910390fd5b8060088190555050565b610fe4611973565b73ffffffffffffffffffffffffffffffffffffffff16611002611107565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613207565b60405180910390fd5b6000471161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613067565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110e1573d6000803e3d6000fd5b50565b600b6020528060005260406000206000915090505481565b668a8e4b1a3d800081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461113f90613538565b80601f016020809104026020016040519081016040528092919081815260200182805461116b90613538565b80156111b85780601f1061118d576101008083540402835291602001916111b8565b820191906000526020600020905b81548152906001019060200180831161119b57829003601f168201915b5050505050905090565b60085481565b60de81565b60de60095410156112bd5760de816009546111e8919061335b565b1115611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612fe7565b60405180910390fd5b60085481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611277919061335b565b11156112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613127565b60405180910390fd5b6113ff565b601e6108ae6112cc919061343c565b816009546112da919061335b565b111561131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290612fe7565b60405180910390fd5b601481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611368919061335b565b11156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090613087565b60405180910390fd5b80668a8e4b1a3d80006113bc91906133e2565b3410156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590613187565b60405180910390fd5b5b6000611409610c1e565b9050816009600082825461141d919061335b565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611473919061335b565b9250508190555060005b828110156114ae5761149b33836114939061359b565b935083611a34565b80806114a69061359b565b91505061147d565b505050565b6114c56114be611973565b8383612000565b5050565b6114da6114d4611973565b83611c02565b611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613287565b60405180910390fd5b6115258484848461216d565b50505050565b600a5481565b606061153c82611907565b61157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613247565b60405180910390fd5b60006115856121c9565b905060008151116115a557604051806020016040528060008152506115d0565b806115af8461225b565b6040516020016115c0929190612f1f565b6040516020818303038152906040525b915050919050565b6115e0611973565b73ffffffffffffffffffffffffffffffffffffffff166115fe611107565b73ffffffffffffffffffffffffffffffffffffffff1614611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613207565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108ae81565b601481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161171b9190612f43565b60206040518083038186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176b9190612aa6565b73ffffffffffffffffffffffffffffffffffffffff16141561179157600191505061179f565b61179b84846123bc565b9150505b92915050565b6117ad611973565b73ffffffffffffffffffffffffffffffffffffffff166117cb611107565b73ffffffffffffffffffffffffffffffffffffffff1614611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890613207565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613027565b60405180910390fd5b61189a81611f3c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119ee83610d64565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b906131a7565b60405180910390fd5b611aad81611907565b15611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613047565b60405180910390fd5b611af960008383612450565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b49919061335b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611c0d82611907565b611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906130e7565b60405180910390fd5b6000611c5783610d64565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cc657508373ffffffffffffffffffffffffffffffffffffffff16611cae84610925565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cd75750611cd681856116a3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0082610d64565b73ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613227565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd906130a7565b60405180910390fd5b611dd1838383612450565b611ddc60008261197b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2c919061343c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e83919061335b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561206f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612066906130c7565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121609190612faa565b60405180910390a3505050565b612178848484611ce0565b61218484848484612455565b6121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90613007565b60405180910390fd5b50505050565b6060600780546121d890613538565b80601f016020809104026020016040519081016040528092919081815260200182805461220490613538565b80156122515780601f1061222657610100808354040283529160200191612251565b820191906000526020600020905b81548152906001019060200180831161223457829003601f168201915b5050505050905090565b606060008214156122a3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123b7565b600082905060005b600082146122d55780806122be9061359b565b915050600a826122ce91906133b1565b91506122ab565b60008167ffffffffffffffff8111156122f1576122f06136d1565b5b6040519080825280601f01601f1916602001820160405280156123235781602001600182028036833780820191505090505b5090505b600085146123b05760018261233c919061343c565b9150600a8561234b91906135e4565b6030612357919061335b565b60f81b81838151811061236d5761236c6136a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123a991906133b1565b9450612327565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60006124768473ffffffffffffffffffffffffffffffffffffffff166125ec565b156125df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261249f611973565b8786866040518563ffffffff1660e01b81526004016124c19493929190612f5e565b602060405180830381600087803b1580156124db57600080fd5b505af192505050801561250c57506040513d601f19601f820116820180604052508101906125099190612a79565b60015b61258f573d806000811461253c576040519150601f19603f3d011682016040523d82523d6000602084013e612541565b606091505b50600081511415612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90613007565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125e4565b600190505b949350505050565b600080823b905060008111915050919050565b82805461260b90613538565b90600052602060002090601f01602090048101928261262d5760008555612674565b82601f1061264657803560ff1916838001178555612674565b82800160010185558215612674579182015b82811115612673578235825591602001919060010190612658565b5b5090506126819190612685565b5090565b5b8082111561269e576000816000905550600101612686565b5090565b60006126b56126b0846132e7565b6132c2565b9050828152602081018484840111156126d1576126d061370f565b5b6126dc8482856134f6565b509392505050565b6000813590506126f381613c7d565b92915050565b60008083601f84011261270f5761270e613705565b5b8235905067ffffffffffffffff81111561272c5761272b613700565b5b6020830191508360208202830111156127485761274761370a565b5b9250929050565b60008135905061275e81613c94565b92915050565b60008135905061277381613cab565b92915050565b60008151905061278881613cab565b92915050565b600082601f8301126127a3576127a2613705565b5b81356127b38482602086016126a2565b91505092915050565b6000815190506127cb81613cc2565b92915050565b60008083601f8401126127e7576127e6613705565b5b8235905067ffffffffffffffff81111561280457612803613700565b5b6020830191508360018202830111156128205761281f61370a565b5b9250929050565b60008135905061283681613cd9565b92915050565b60006020828403121561285257612851613719565b5b6000612860848285016126e4565b91505092915050565b600080604083850312156128805761287f613719565b5b600061288e858286016126e4565b925050602061289f858286016126e4565b9150509250929050565b6000806000606084860312156128c2576128c1613719565b5b60006128d0868287016126e4565b93505060206128e1868287016126e4565b92505060406128f286828701612827565b9150509250925092565b6000806000806080858703121561291657612915613719565b5b6000612924878288016126e4565b9450506020612935878288016126e4565b935050604061294687828801612827565b925050606085013567ffffffffffffffff81111561296757612966613714565b5b6129738782880161278e565b91505092959194509250565b6000806040838503121561299657612995613719565b5b60006129a4858286016126e4565b92505060206129b58582860161274f565b9150509250929050565b600080604083850312156129d6576129d5613719565b5b60006129e4858286016126e4565b92505060206129f585828601612827565b9150509250929050565b60008060208385031215612a1657612a15613719565b5b600083013567ffffffffffffffff811115612a3457612a33613714565b5b612a40858286016126f9565b92509250509250929050565b600060208284031215612a6257612a61613719565b5b6000612a7084828501612764565b91505092915050565b600060208284031215612a8f57612a8e613719565b5b6000612a9d84828501612779565b91505092915050565b600060208284031215612abc57612abb613719565b5b6000612aca848285016127bc565b91505092915050565b60008060208385031215612aea57612ae9613719565b5b600083013567ffffffffffffffff811115612b0857612b07613714565b5b612b14858286016127d1565b92509250509250929050565b600060208284031215612b3657612b35613719565b5b6000612b4484828501612827565b91505092915050565b612b5681613470565b82525050565b612b6581613482565b82525050565b6000612b7682613318565b612b80818561332e565b9350612b90818560208601613505565b612b998161371e565b840191505092915050565b6000612baf82613323565b612bb9818561333f565b9350612bc9818560208601613505565b612bd28161371e565b840191505092915050565b6000612be882613323565b612bf28185613350565b9350612c02818560208601613505565b80840191505092915050565b6000612c1b60048361333f565b9150612c268261372f565b602082019050919050565b6000612c3e60328361333f565b9150612c4982613758565b604082019050919050565b6000612c6160268361333f565b9150612c6c826137a7565b604082019050919050565b6000612c84601c8361333f565b9150612c8f826137f6565b602082019050919050565b6000612ca760048361333f565b9150612cb28261381f565b602082019050919050565b6000612cca60048361333f565b9150612cd582613848565b602082019050919050565b6000612ced60248361333f565b9150612cf882613871565b604082019050919050565b6000612d1060198361333f565b9150612d1b826138c0565b602082019050919050565b6000612d33602c8361333f565b9150612d3e826138e9565b604082019050919050565b6000612d5660388361333f565b9150612d6182613938565b604082019050919050565b6000612d7960048361333f565b9150612d8482613987565b602082019050919050565b6000612d9c602a8361333f565b9150612da7826139b0565b604082019050919050565b6000612dbf60298361333f565b9150612dca826139ff565b604082019050919050565b6000612de260048361333f565b9150612ded82613a4e565b602082019050919050565b6000612e0560208361333f565b9150612e1082613a77565b602082019050919050565b6000612e28602c8361333f565b9150612e3382613aa0565b604082019050919050565b6000612e4b60048361333f565b9150612e5682613aef565b602082019050919050565b6000612e6e60208361333f565b9150612e7982613b18565b602082019050919050565b6000612e9160298361333f565b9150612e9c82613b41565b604082019050919050565b6000612eb4602f8361333f565b9150612ebf82613b90565b604082019050919050565b6000612ed760218361333f565b9150612ee282613bdf565b604082019050919050565b6000612efa60318361333f565b9150612f0582613c2e565b604082019050919050565b612f19816134ec565b82525050565b6000612f2b8285612bdd565b9150612f378284612bdd565b91508190509392505050565b6000602082019050612f586000830184612b4d565b92915050565b6000608082019050612f736000830187612b4d565b612f806020830186612b4d565b612f8d6040830185612f10565b8181036060830152612f9f8184612b6b565b905095945050505050565b6000602082019050612fbf6000830184612b5c565b92915050565b60006020820190508181036000830152612fdf8184612ba4565b905092915050565b6000602082019050818103600083015261300081612c0e565b9050919050565b6000602082019050818103600083015261302081612c31565b9050919050565b6000602082019050818103600083015261304081612c54565b9050919050565b6000602082019050818103600083015261306081612c77565b9050919050565b6000602082019050818103600083015261308081612c9a565b9050919050565b600060208201905081810360008301526130a081612cbd565b9050919050565b600060208201905081810360008301526130c081612ce0565b9050919050565b600060208201905081810360008301526130e081612d03565b9050919050565b6000602082019050818103600083015261310081612d26565b9050919050565b6000602082019050818103600083015261312081612d49565b9050919050565b6000602082019050818103600083015261314081612d6c565b9050919050565b6000602082019050818103600083015261316081612d8f565b9050919050565b6000602082019050818103600083015261318081612db2565b9050919050565b600060208201905081810360008301526131a081612dd5565b9050919050565b600060208201905081810360008301526131c081612df8565b9050919050565b600060208201905081810360008301526131e081612e1b565b9050919050565b6000602082019050818103600083015261320081612e3e565b9050919050565b6000602082019050818103600083015261322081612e61565b9050919050565b6000602082019050818103600083015261324081612e84565b9050919050565b6000602082019050818103600083015261326081612ea7565b9050919050565b6000602082019050818103600083015261328081612eca565b9050919050565b600060208201905081810360008301526132a081612eed565b9050919050565b60006020820190506132bc6000830184612f10565b92915050565b60006132cc6132dd565b90506132d8828261356a565b919050565b6000604051905090565b600067ffffffffffffffff821115613302576133016136d1565b5b61330b8261371e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613366826134ec565b9150613371836134ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133a6576133a5613615565b5b828201905092915050565b60006133bc826134ec565b91506133c7836134ec565b9250826133d7576133d6613644565b5b828204905092915050565b60006133ed826134ec565b91506133f8836134ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561343157613430613615565b5b828202905092915050565b6000613447826134ec565b9150613452836134ec565b92508282101561346557613464613615565b5b828203905092915050565b600061347b826134cc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006134c582613470565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613523578082015181840152602081019050613508565b83811115613532576000848401525b50505050565b6000600282049050600182168061355057607f821691505b6020821081141561356457613563613673565b5b50919050565b6135738261371e565b810181811067ffffffffffffffff82111715613592576135916136d1565b5b80604052505050565b60006135a6826134ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135d9576135d8613615565b5b600182019050919050565b60006135ef826134ec565b91506135fa836134ec565b92508261360a57613609613644565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d41584c00000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5a45524f00000000000000000000000000000000000000000000000000000000600082015250565b7f4d41585000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d41584600000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5345544800000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d41584700000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613c8681613470565b8114613c9157600080fd5b50565b613c9d81613482565b8114613ca857600080fd5b50565b613cb48161348e565b8114613cbf57600080fd5b50565b613ccb816134ba565b8114613cd657600080fd5b50565b613ce2816134ec565b8114613ced57600080fd5b5056fea264697066735822122084e2099c9de742eea3cf124426fd92fc13a296de14738d804750b7acfcd75c1f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101ee5760003560e01c8063853828b61161010d578063a22cb465116100a0578063d26ea6c01161006f578063d26ea6c0146106cc578063dee816e6146106f5578063e351da4c14610720578063e985e9c51461074b578063f2fde38b14610788576101ee565b8063a22cb46514610612578063b88d4fde1461063b578063bd34fc5714610664578063c87b56dd1461068f576101ee565b806395d89b41116100dc57806395d89b4114610575578063966784ec146105a05780639a525d9c146105cb578063a0712d68146105f6576101ee565b8063853828b6146104cb57806388aadd41146104e25780638d859f3e1461051f5780638da5cb5b1461054a576101ee565b80633f5632b0116101855780636352211e116101545780636352211e1461041157806370a082311461044e578063715018a61461048b578063738a92e8146104a2576101ee565b80633f5632b01461036957806342842e0e1461039457806355f804b3146103bd5780635f717202146103e6576101ee565b8063163e1e61116101c1578063163e1e61146102c157806318160ddd146102ea57806323b872dd146103155780633354fe341461033e576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612a4c565b6107b1565b6040516102279190612faa565b60405180910390f35b34801561023c57600080fd5b50610245610893565b6040516102529190612fc5565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612b20565b610925565b60405161028f9190612f43565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906129bf565b6109aa565b005b3480156102cd57600080fd5b506102e860048036038101906102e391906129ff565b610ac2565b005b3480156102f657600080fd5b506102ff610c1e565b60405161030c91906132a7565b60405180910390f35b34801561032157600080fd5b5061033c600480360381019061033791906128a9565b610c35565b005b34801561034a57600080fd5b50610353610c95565b60405161036091906132a7565b60405180910390f35b34801561037557600080fd5b5061037e610c9a565b60405161038b91906132a7565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b691906128a9565b610ca0565b005b3480156103c957600080fd5b506103e460048036038101906103df9190612ad3565b610cc0565b005b3480156103f257600080fd5b506103fb610d52565b60405161040891906132a7565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190612b20565b610d64565b6040516104459190612f43565b60405180910390f35b34801561045a57600080fd5b506104756004803603810190610470919061283c565b610e16565b60405161048291906132a7565b60405180910390f35b34801561049757600080fd5b506104a0610ece565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190612b20565b610f56565b005b3480156104d757600080fd5b506104e0610fdc565b005b3480156104ee57600080fd5b506105096004803603810190610504919061283c565b6110e4565b60405161051691906132a7565b60405180910390f35b34801561052b57600080fd5b506105346110fc565b60405161054191906132a7565b60405180910390f35b34801561055657600080fd5b5061055f611107565b60405161056c9190612f43565b60405180910390f35b34801561058157600080fd5b5061058a611130565b6040516105979190612fc5565b60405180910390f35b3480156105ac57600080fd5b506105b56111c2565b6040516105c291906132a7565b60405180910390f35b3480156105d757600080fd5b506105e06111c8565b6040516105ed91906132a7565b60405180910390f35b610610600480360381019061060b9190612b20565b6111cd565b005b34801561061e57600080fd5b506106396004803603810190610634919061297f565b6114b3565b005b34801561064757600080fd5b50610662600480360381019061065d91906128fc565b6114c9565b005b34801561067057600080fd5b5061067961152b565b60405161068691906132a7565b60405180910390f35b34801561069b57600080fd5b506106b660048036038101906106b19190612b20565b611531565b6040516106c39190612fc5565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee919061283c565b6115d8565b005b34801561070157600080fd5b5061070a611698565b60405161071791906132a7565b60405180910390f35b34801561072c57600080fd5b5061073561169e565b60405161074291906132a7565b60405180910390f35b34801561075757600080fd5b50610772600480360381019061076d9190612869565b6116a3565b60405161077f9190612faa565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa919061283c565b6117a5565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087c57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061088c575061088b8261189d565b5b9050919050565b6060600180546108a290613538565b80601f01602080910402602001604051908101604052809291908181526020018280546108ce90613538565b801561091b5780601f106108f05761010080835404028352916020019161091b565b820191906000526020600020905b8154815290600101906020018083116108fe57829003601f168201915b5050505050905090565b600061093082611907565b61096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906131c7565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109b582610d64565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1d90613267565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a45611973565b73ffffffffffffffffffffffffffffffffffffffff161480610a745750610a7381610a6e611973565b6116a3565b5b610ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aaa90613107565b60405180910390fd5b610abd838361197b565b505050565b610aca611973565b73ffffffffffffffffffffffffffffffffffffffff16610ae8611107565b73ffffffffffffffffffffffffffffffffffffffff1614610b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3590613207565b60405180910390fd5b601e82829050600a54610b51919061335b565b1115610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b89906131e7565b60405180910390fd5b6000610b9c610c1e565b905082829050600a6000828254610bb3919061335b565b9250508190555060005b83839050811015610c1857610c05848483818110610bde57610bdd6136a2565b5b9050602002016020810190610bf3919061283c565b83610bfd9061359b565b935083611a34565b8080610c109061359b565b915050610bbd565b50505050565b6000600a54600954610c30919061335b565b905090565b610c46610c40611973565b82611c02565b610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c90613287565b60405180910390fd5b610c90838383611ce0565b505050565b601e81565b60095481565b610cbb838383604051806020016040528060008152506114c9565b505050565b610cc8611973565b73ffffffffffffffffffffffffffffffffffffffff16610ce6611107565b73ffffffffffffffffffffffffffffffffffffffff1614610d3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3390613207565b60405180910390fd5b818160079190610d4d9291906125ff565b505050565b601e6108ae610d61919061343c565b81565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613167565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90613147565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ed6611973565b73ffffffffffffffffffffffffffffffffffffffff16610ef4611107565b73ffffffffffffffffffffffffffffffffffffffff1614610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613207565b60405180910390fd5b610f546000611f3c565b565b610f5e611973565b73ffffffffffffffffffffffffffffffffffffffff16610f7c611107565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc990613207565b60405180910390fd5b8060088190555050565b610fe4611973565b73ffffffffffffffffffffffffffffffffffffffff16611002611107565b73ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104f90613207565b60405180910390fd5b6000471161109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290613067565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110e1573d6000803e3d6000fd5b50565b600b6020528060005260406000206000915090505481565b668a8e4b1a3d800081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461113f90613538565b80601f016020809104026020016040519081016040528092919081815260200182805461116b90613538565b80156111b85780601f1061118d576101008083540402835291602001916111b8565b820191906000526020600020905b81548152906001019060200180831161119b57829003601f168201915b5050505050905090565b60085481565b60de81565b60de60095410156112bd5760de816009546111e8919061335b565b1115611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122090612fe7565b60405180910390fd5b60085481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611277919061335b565b11156112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613127565b60405180910390fd5b6113ff565b601e6108ae6112cc919061343c565b816009546112da919061335b565b111561131b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131290612fe7565b60405180910390fd5b601481600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611368919061335b565b11156113a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a090613087565b60405180910390fd5b80668a8e4b1a3d80006113bc91906133e2565b3410156113fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f590613187565b60405180910390fd5b5b6000611409610c1e565b9050816009600082825461141d919061335b565b9250508190555081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611473919061335b565b9250508190555060005b828110156114ae5761149b33836114939061359b565b935083611a34565b80806114a69061359b565b91505061147d565b505050565b6114c56114be611973565b8383612000565b5050565b6114da6114d4611973565b83611c02565b611519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151090613287565b60405180910390fd5b6115258484848461216d565b50505050565b600a5481565b606061153c82611907565b61157b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157290613247565b60405180910390fd5b60006115856121c9565b905060008151116115a557604051806020016040528060008152506115d0565b806115af8461225b565b6040516020016115c0929190612f1f565b6040516020818303038152906040525b915050919050565b6115e0611973565b73ffffffffffffffffffffffffffffffffffffffff166115fe611107565b73ffffffffffffffffffffffffffffffffffffffff1614611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613207565b60405180910390fd5b80600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6108ae81565b601481565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b815260040161171b9190612f43565b60206040518083038186803b15801561173357600080fd5b505afa158015611747573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061176b9190612aa6565b73ffffffffffffffffffffffffffffffffffffffff16141561179157600191505061179f565b61179b84846123bc565b9150505b92915050565b6117ad611973565b73ffffffffffffffffffffffffffffffffffffffff166117cb611107565b73ffffffffffffffffffffffffffffffffffffffff1614611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890613207565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611891576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188890613027565b60405180910390fd5b61189a81611f3c565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166119ee83610d64565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9b906131a7565b60405180910390fd5b611aad81611907565b15611aed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae490613047565b60405180910390fd5b611af960008383612450565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b49919061335b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000611c0d82611907565b611c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c43906130e7565b60405180910390fd5b6000611c5783610d64565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611cc657508373ffffffffffffffffffffffffffffffffffffffff16611cae84610925565b73ffffffffffffffffffffffffffffffffffffffff16145b80611cd75750611cd681856116a3565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d0082610d64565b73ffffffffffffffffffffffffffffffffffffffff1614611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90613227565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dbd906130a7565b60405180910390fd5b611dd1838383612450565b611ddc60008261197b565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e2c919061343c565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e83919061335b565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561206f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612066906130c7565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121609190612faa565b60405180910390a3505050565b612178848484611ce0565b61218484848484612455565b6121c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ba90613007565b60405180910390fd5b50505050565b6060600780546121d890613538565b80601f016020809104026020016040519081016040528092919081815260200182805461220490613538565b80156122515780601f1061222657610100808354040283529160200191612251565b820191906000526020600020905b81548152906001019060200180831161223457829003601f168201915b5050505050905090565b606060008214156122a3576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506123b7565b600082905060005b600082146122d55780806122be9061359b565b915050600a826122ce91906133b1565b91506122ab565b60008167ffffffffffffffff8111156122f1576122f06136d1565b5b6040519080825280601f01601f1916602001820160405280156123235781602001600182028036833780820191505090505b5090505b600085146123b05760018261233c919061343c565b9150600a8561234b91906135e4565b6030612357919061335b565b60f81b81838151811061236d5761236c6136a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856123a991906133b1565b9450612327565b8093505050505b919050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b505050565b60006124768473ffffffffffffffffffffffffffffffffffffffff166125ec565b156125df578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261249f611973565b8786866040518563ffffffff1660e01b81526004016124c19493929190612f5e565b602060405180830381600087803b1580156124db57600080fd5b505af192505050801561250c57506040513d601f19601f820116820180604052508101906125099190612a79565b60015b61258f573d806000811461253c576040519150601f19603f3d011682016040523d82523d6000602084013e612541565b606091505b50600081511415612587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257e90613007565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506125e4565b600190505b949350505050565b600080823b905060008111915050919050565b82805461260b90613538565b90600052602060002090601f01602090048101928261262d5760008555612674565b82601f1061264657803560ff1916838001178555612674565b82800160010185558215612674579182015b82811115612673578235825591602001919060010190612658565b5b5090506126819190612685565b5090565b5b8082111561269e576000816000905550600101612686565b5090565b60006126b56126b0846132e7565b6132c2565b9050828152602081018484840111156126d1576126d061370f565b5b6126dc8482856134f6565b509392505050565b6000813590506126f381613c7d565b92915050565b60008083601f84011261270f5761270e613705565b5b8235905067ffffffffffffffff81111561272c5761272b613700565b5b6020830191508360208202830111156127485761274761370a565b5b9250929050565b60008135905061275e81613c94565b92915050565b60008135905061277381613cab565b92915050565b60008151905061278881613cab565b92915050565b600082601f8301126127a3576127a2613705565b5b81356127b38482602086016126a2565b91505092915050565b6000815190506127cb81613cc2565b92915050565b60008083601f8401126127e7576127e6613705565b5b8235905067ffffffffffffffff81111561280457612803613700565b5b6020830191508360018202830111156128205761281f61370a565b5b9250929050565b60008135905061283681613cd9565b92915050565b60006020828403121561285257612851613719565b5b6000612860848285016126e4565b91505092915050565b600080604083850312156128805761287f613719565b5b600061288e858286016126e4565b925050602061289f858286016126e4565b9150509250929050565b6000806000606084860312156128c2576128c1613719565b5b60006128d0868287016126e4565b93505060206128e1868287016126e4565b92505060406128f286828701612827565b9150509250925092565b6000806000806080858703121561291657612915613719565b5b6000612924878288016126e4565b9450506020612935878288016126e4565b935050604061294687828801612827565b925050606085013567ffffffffffffffff81111561296757612966613714565b5b6129738782880161278e565b91505092959194509250565b6000806040838503121561299657612995613719565b5b60006129a4858286016126e4565b92505060206129b58582860161274f565b9150509250929050565b600080604083850312156129d6576129d5613719565b5b60006129e4858286016126e4565b92505060206129f585828601612827565b9150509250929050565b60008060208385031215612a1657612a15613719565b5b600083013567ffffffffffffffff811115612a3457612a33613714565b5b612a40858286016126f9565b92509250509250929050565b600060208284031215612a6257612a61613719565b5b6000612a7084828501612764565b91505092915050565b600060208284031215612a8f57612a8e613719565b5b6000612a9d84828501612779565b91505092915050565b600060208284031215612abc57612abb613719565b5b6000612aca848285016127bc565b91505092915050565b60008060208385031215612aea57612ae9613719565b5b600083013567ffffffffffffffff811115612b0857612b07613714565b5b612b14858286016127d1565b92509250509250929050565b600060208284031215612b3657612b35613719565b5b6000612b4484828501612827565b91505092915050565b612b5681613470565b82525050565b612b6581613482565b82525050565b6000612b7682613318565b612b80818561332e565b9350612b90818560208601613505565b612b998161371e565b840191505092915050565b6000612baf82613323565b612bb9818561333f565b9350612bc9818560208601613505565b612bd28161371e565b840191505092915050565b6000612be882613323565b612bf28185613350565b9350612c02818560208601613505565b80840191505092915050565b6000612c1b60048361333f565b9150612c268261372f565b602082019050919050565b6000612c3e60328361333f565b9150612c4982613758565b604082019050919050565b6000612c6160268361333f565b9150612c6c826137a7565b604082019050919050565b6000612c84601c8361333f565b9150612c8f826137f6565b602082019050919050565b6000612ca760048361333f565b9150612cb28261381f565b602082019050919050565b6000612cca60048361333f565b9150612cd582613848565b602082019050919050565b6000612ced60248361333f565b9150612cf882613871565b604082019050919050565b6000612d1060198361333f565b9150612d1b826138c0565b602082019050919050565b6000612d33602c8361333f565b9150612d3e826138e9565b604082019050919050565b6000612d5660388361333f565b9150612d6182613938565b604082019050919050565b6000612d7960048361333f565b9150612d8482613987565b602082019050919050565b6000612d9c602a8361333f565b9150612da7826139b0565b604082019050919050565b6000612dbf60298361333f565b9150612dca826139ff565b604082019050919050565b6000612de260048361333f565b9150612ded82613a4e565b602082019050919050565b6000612e0560208361333f565b9150612e1082613a77565b602082019050919050565b6000612e28602c8361333f565b9150612e3382613aa0565b604082019050919050565b6000612e4b60048361333f565b9150612e5682613aef565b602082019050919050565b6000612e6e60208361333f565b9150612e7982613b18565b602082019050919050565b6000612e9160298361333f565b9150612e9c82613b41565b604082019050919050565b6000612eb4602f8361333f565b9150612ebf82613b90565b604082019050919050565b6000612ed760218361333f565b9150612ee282613bdf565b604082019050919050565b6000612efa60318361333f565b9150612f0582613c2e565b604082019050919050565b612f19816134ec565b82525050565b6000612f2b8285612bdd565b9150612f378284612bdd565b91508190509392505050565b6000602082019050612f586000830184612b4d565b92915050565b6000608082019050612f736000830187612b4d565b612f806020830186612b4d565b612f8d6040830185612f10565b8181036060830152612f9f8184612b6b565b905095945050505050565b6000602082019050612fbf6000830184612b5c565b92915050565b60006020820190508181036000830152612fdf8184612ba4565b905092915050565b6000602082019050818103600083015261300081612c0e565b9050919050565b6000602082019050818103600083015261302081612c31565b9050919050565b6000602082019050818103600083015261304081612c54565b9050919050565b6000602082019050818103600083015261306081612c77565b9050919050565b6000602082019050818103600083015261308081612c9a565b9050919050565b600060208201905081810360008301526130a081612cbd565b9050919050565b600060208201905081810360008301526130c081612ce0565b9050919050565b600060208201905081810360008301526130e081612d03565b9050919050565b6000602082019050818103600083015261310081612d26565b9050919050565b6000602082019050818103600083015261312081612d49565b9050919050565b6000602082019050818103600083015261314081612d6c565b9050919050565b6000602082019050818103600083015261316081612d8f565b9050919050565b6000602082019050818103600083015261318081612db2565b9050919050565b600060208201905081810360008301526131a081612dd5565b9050919050565b600060208201905081810360008301526131c081612df8565b9050919050565b600060208201905081810360008301526131e081612e1b565b9050919050565b6000602082019050818103600083015261320081612e3e565b9050919050565b6000602082019050818103600083015261322081612e61565b9050919050565b6000602082019050818103600083015261324081612e84565b9050919050565b6000602082019050818103600083015261326081612ea7565b9050919050565b6000602082019050818103600083015261328081612eca565b9050919050565b600060208201905081810360008301526132a081612eed565b9050919050565b60006020820190506132bc6000830184612f10565b92915050565b60006132cc6132dd565b90506132d8828261356a565b919050565b6000604051905090565b600067ffffffffffffffff821115613302576133016136d1565b5b61330b8261371e565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613366826134ec565b9150613371836134ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133a6576133a5613615565b5b828201905092915050565b60006133bc826134ec565b91506133c7836134ec565b9250826133d7576133d6613644565b5b828204905092915050565b60006133ed826134ec565b91506133f8836134ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561343157613430613615565b5b828202905092915050565b6000613447826134ec565b9150613452836134ec565b92508282101561346557613464613615565b5b828203905092915050565b600061347b826134cc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006134c582613470565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613523578082015181840152602081019050613508565b83811115613532576000848401525b50505050565b6000600282049050600182168061355057607f821691505b6020821081141561356457613563613673565b5b50919050565b6135738261371e565b810181811067ffffffffffffffff82111715613592576135916136d1565b5b80604052505050565b60006135a6826134ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135d9576135d8613615565b5b600182019050919050565b60006135ef826134ec565b91506135fa836134ec565b92508261360a57613609613644565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d41584c00000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f5a45524f00000000000000000000000000000000000000000000000000000000600082015250565b7f4d41585000000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4d41584600000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5345544800000000000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d41584700000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b613c8681613470565b8114613c9157600080fd5b50565b613c9d81613482565b8114613ca857600080fd5b50565b613cb48161348e565b8114613cbf57600080fd5b50565b613ccb816134ba565b8114613cd657600080fd5b50565b613ce2816134ec565b8114613ced57600080fd5b5056fea264697066735822122084e2099c9de742eea3cf124426fd92fc13a296de14738d804750b7acfcd75c1f64736f6c63430008070033

Deployed Bytecode Sourcemap

34795:3298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22226:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23171:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24730:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24253:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36672:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35738:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25480:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34946:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35258:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25890:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37870:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34994:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22865:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22595:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4369:103;;;;;;;;;;;;;:::i;:::-;;37214:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37041:165;;;;;;;;;;;;;:::i;:::-;;35328:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35074:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3718:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23340:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35213:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34892:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35846:818;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25023:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26146:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35293:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23515:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37344:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34841:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35124:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37480:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4627:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22226:305;22328:4;22380:25;22365:40;;;:11;:40;;;;:105;;;;22437:33;22422:48;;;:11;:48;;;;22365:105;:158;;;;22487:36;22511:11;22487:23;:36::i;:::-;22365:158;22345:178;;22226:305;;;:::o;23171:100::-;23225:13;23258:5;23251:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23171:100;:::o;24730:221::-;24806:7;24834:16;24842:7;24834;:16::i;:::-;24826:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24919:15;:24;24935:7;24919:24;;;;;;;;;;;;;;;;;;;;;24912:31;;24730:221;;;:::o;24253:411::-;24334:13;24350:23;24365:7;24350:14;:23::i;:::-;24334:39;;24398:5;24392:11;;:2;:11;;;;24384:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24492:5;24476:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24501:37;24518:5;24525:12;:10;:12::i;:::-;24501:16;:37::i;:::-;24476:62;24454:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24635:21;24644:2;24648:7;24635:8;:21::i;:::-;24323:341;24253:411;;:::o;36672:361::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34985:2:::1;36766:9;;:16;;36754:9;;:28;;;;:::i;:::-;:44;;36746:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36820:25;36848:13;:11;:13::i;:::-;36820:41;;36885:9;;:16;;36872:9;;:29;;;;;;;:::i;:::-;;;;;;;;36917:9;36912:114;36936:9;;:16;;36932:1;:20;36912:114;;;36974:40;36980:9;;36990:1;36980:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36994:19;;;;:::i;:::-;;;;36974:5;:40::i;:::-;36954:3;;;;;:::i;:::-;;;;36912:114;;;;36735:298;36672:361:::0;;:::o;35738:100::-;35782:7;35821:9;;35809;;:21;;;;:::i;:::-;35802:28;;35738:100;:::o;25480:339::-;25675:41;25694:12;:10;:12::i;:::-;25708:7;25675:18;:41::i;:::-;25667:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25783:28;25793:4;25799:2;25803:7;25783:9;:28::i;:::-;25480:339;;;:::o;34946:41::-;34985:2;34946:41;:::o;35258:28::-;;;;:::o;25890:185::-;26028:39;26045:4;26051:2;26055:7;26028:39;;;;;;;;;;;;:16;:39::i;:::-;25890:185;;;:::o;37870:98::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37957:3:::1;;37941:13;:19;;;;;;;:::i;:::-;;37870:98:::0;;:::o;34994:73::-;34985:2;34881:4;35039:28;;;;:::i;:::-;34994:73;:::o;22865:239::-;22937:7;22957:13;22973:7;:16;22981:7;22973:16;;;;;;;;;;;;;;;;;;;;;22957:32;;23025:1;23008:19;;:5;:19;;;;23000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23091:5;23084:12;;;22865:239;;;:::o;22595:208::-;22667:7;22712:1;22695:19;;:5;:19;;;;22687:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22779:9;:16;22789:5;22779:16;;;;;;;;;;;;;;;;22772:23;;22595:208;;;:::o;4369:103::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4434:30:::1;4461:1;4434:18;:30::i;:::-;4369:103::o:0;37214:122::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:12:::1;37294:19;:34;;;;37214:122:::0;:::o;37041:165::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37126:1:::1;37102:21;:25;37094:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:10;37147:28;;:51;37176:21;37147:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37041:165::o:0;35328:51::-;;;;;;;;;;;;;;;;;:::o;35074:43::-;35106:11;35074:43;:::o;3718:87::-;3764:7;3791:6;;;;;;;;;;;3784:13;;3718:87;:::o;23340:104::-;23396:13;23429:7;23422:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23340:104;:::o;35213:38::-;;;;:::o;34892:47::-;34936:3;34892:47;:::o;35846:818::-;34936:3;35927:9;;:29;35923:485;;;34936:3;35993:8;35981:9;;:20;;;;:::i;:::-;:41;;35973:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:19;;36085:8;36054:16;:28;36071:10;36054:28;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:62;;36046:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;35923:485;;;34985:2;34881:4;35039:28;;;;:::i;:::-;36203:8;36191:9;;:20;;;;:::i;:::-;:42;;36183:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35169:2;36296:8;36265:16;:28;36282:10;36265:28;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;:61;;36257:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36379:8;35106:11;36371:16;;;;:::i;:::-;36358:9;:29;;36350:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;35923:485;36418:25;36446:13;:11;:13::i;:::-;36418:41;;36483:8;36470:9;;:21;;;;;;;:::i;:::-;;;;;;;;36534:8;36502:16;:28;36519:10;36502:28;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;36558:9;36553:104;36577:8;36573:1;:12;36553:104;;;36607:38;36613:10;36625:19;;;;:::i;:::-;;;;36607:5;:38::i;:::-;36587:3;;;;;:::i;:::-;;;;36553:104;;;;35895:769;35846:818;:::o;25023:155::-;25118:52;25137:12;:10;:12::i;:::-;25151:8;25161;25118:18;:52::i;:::-;25023:155;;:::o;26146:328::-;26321:41;26340:12;:10;:12::i;:::-;26354:7;26321:18;:41::i;:::-;26313:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26427:39;26441:4;26447:2;26451:7;26460:5;26427:13;:39::i;:::-;26146:328;;;;:::o;35293:28::-;;;;:::o;23515:334::-;23588:13;23622:16;23630:7;23622;:16::i;:::-;23614:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23703:21;23727:10;:8;:10::i;:::-;23703:34;;23779:1;23761:7;23755:21;:25;:86;;;;;;;;;;;;;;;;;23807:7;23816:18;:7;:16;:18::i;:::-;23790:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23755:86;23748:93;;;23515:334;;;:::o;37344:128::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37452:12:::1;37429:20;;:35;;;;;;;;;;;;;;;;;;37344:128:::0;:::o;34841:44::-;34881:4;34841:44;:::o;35124:47::-;35169:2;35124:47;:::o;37480:382::-;37605:4;37627:27;37671:20;;;;;;;;;;;37627:65;;37748:8;37707:49;;37715:13;:21;;;37737:5;37715:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37707:49;;;37703:93;;;37780:4;37773:11;;;;;37703:93;37815:39;37838:5;37845:8;37815:22;:39::i;:::-;37808:46;;;37480:382;;;;;:::o;4627:201::-;3949:12;:10;:12::i;:::-;3938:23;;:7;:5;:7::i;:::-;:23;;;3930:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4736:1:::1;4716:22;;:8;:22;;;;4708:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4792:28;4811:8;4792:18;:28::i;:::-;4627:201:::0;:::o;15508:157::-;15593:4;15632:25;15617:40;;;:11;:40;;;;15610:47;;15508:157;;;:::o;27984:127::-;28049:4;28101:1;28073:30;;:7;:16;28081:7;28073:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28066:37;;27984:127;;;:::o;2585:98::-;2638:7;2665:10;2658:17;;2585:98;:::o;31966:174::-;32068:2;32041:15;:24;32057:7;32041:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32124:7;32120:2;32086:46;;32095:23;32110:7;32095:14;:23::i;:::-;32086:46;;;;;;;;;;;;31966:174;;:::o;29962:382::-;30056:1;30042:16;;:2;:16;;;;30034:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30115:16;30123:7;30115;:16::i;:::-;30114:17;30106:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30177:45;30206:1;30210:2;30214:7;30177:20;:45::i;:::-;30252:1;30235:9;:13;30245:2;30235:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30283:2;30264:7;:16;30272:7;30264:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30328:7;30324:2;30303:33;;30320:1;30303:33;;;;;;;;;;;;29962:382;;:::o;28278:348::-;28371:4;28396:16;28404:7;28396;:16::i;:::-;28388:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28472:13;28488:23;28503:7;28488:14;:23::i;:::-;28472:39;;28541:5;28530:16;;:7;:16;;;:51;;;;28574:7;28550:31;;:20;28562:7;28550:11;:20::i;:::-;:31;;;28530:51;:87;;;;28585:32;28602:5;28609:7;28585:16;:32::i;:::-;28530:87;28522:96;;;28278:348;;;;:::o;31270:578::-;31429:4;31402:31;;:23;31417:7;31402:14;:23::i;:::-;:31;;;31394:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31512:1;31498:16;;:2;:16;;;;31490:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31568:39;31589:4;31595:2;31599:7;31568:20;:39::i;:::-;31672:29;31689:1;31693:7;31672:8;:29::i;:::-;31733:1;31714:9;:15;31724:4;31714:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31762:1;31745:9;:13;31755:2;31745:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31793:2;31774:7;:16;31782:7;31774:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31832:7;31828:2;31813:27;;31822:4;31813:27;;;;;;;;;;;;31270:578;;;:::o;4988:191::-;5062:16;5081:6;;;;;;;;;;;5062:25;;5107:8;5098:6;;:17;;;;;;;;;;;;;;;;;;5162:8;5131:40;;5152:8;5131:40;;;;;;;;;;;;5051:128;4988:191;:::o;32282:315::-;32437:8;32428:17;;:5;:17;;;;32420:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32524:8;32486:18;:25;32505:5;32486:25;;;;;;;;;;;;;;;:35;32512:8;32486:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32570:8;32548:41;;32563:5;32548:41;;;32580:8;32548:41;;;;;;:::i;:::-;;;;;;;;32282:315;;;:::o;27356:::-;27513:28;27523:4;27529:2;27533:7;27513:9;:28::i;:::-;27560:48;27583:4;27589:2;27593:7;27602:5;27560:22;:48::i;:::-;27552:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27356:315;;;;:::o;37976:114::-;38036:13;38069;38062:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37976:114;:::o;286:723::-;342:13;572:1;563:5;:10;559:53;;;590:10;;;;;;;;;;;;;;;;;;;;;559:53;622:12;637:5;622:20;;653:14;678:78;693:1;685:4;:9;678:78;;711:8;;;;;:::i;:::-;;;;742:2;734:10;;;;;:::i;:::-;;;678:78;;;766:19;798:6;788:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;766:39;;816:154;832:1;823:5;:10;816:154;;860:1;850:11;;;;;:::i;:::-;;;927:2;919:5;:10;;;;:::i;:::-;906:2;:24;;;;:::i;:::-;893:39;;876:6;883;876:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;956:2;947:11;;;;;:::i;:::-;;;816:154;;;994:6;980:21;;;;;286:723;;;;:::o;25249:164::-;25346:4;25370:18;:25;25389:5;25370:25;;;;;;;;;;;;;;;:35;25396:8;25370:35;;;;;;;;;;;;;;;;;;;;;;;;;25363:42;;25249:164;;;;:::o;34533:126::-;;;;:::o;33162:799::-;33317:4;33338:15;:2;:13;;;:15::i;:::-;33334:620;;;33390:2;33374:36;;;33411:12;:10;:12::i;:::-;33425:4;33431:7;33440:5;33374:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33370:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33633:1;33616:6;:13;:18;33612:272;;;33659:60;;;;;;;;;;:::i;:::-;;;;;;;;33612:272;33834:6;33828:13;33819:6;33815:2;33811:15;33804:38;33370:529;33507:41;;;33497:51;;;:6;:51;;;;33490:58;;;;;33334:620;33938:4;33931:11;;33162:799;;;;;;;:::o;5867:387::-;5927:4;6135:12;6202:7;6190:20;6182:28;;6245:1;6238:4;:8;6231:15;;;5867:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1945:201::-;2031:5;2062:6;2056:13;2047:22;;2078:62;2134:5;2078:62;:::i;:::-;1945:201;;;;:::o;2166:553::-;2224:8;2234:6;2284:3;2277:4;2269:6;2265:17;2261:27;2251:122;;2292:79;;:::i;:::-;2251:122;2405:6;2392:20;2382:30;;2435:18;2427:6;2424:30;2421:117;;;2457:79;;:::i;:::-;2421:117;2571:4;2563:6;2559:17;2547:29;;2625:3;2617:4;2609:6;2605:17;2595:8;2591:32;2588:41;2585:128;;;2632:79;;:::i;:::-;2585:128;2166:553;;;;;:::o;2725:139::-;2771:5;2809:6;2796:20;2787:29;;2825:33;2852:5;2825:33;:::i;:::-;2725:139;;;;:::o;2870:329::-;2929:6;2978:2;2966:9;2957:7;2953:23;2949:32;2946:119;;;2984:79;;:::i;:::-;2946:119;3104:1;3129:53;3174:7;3165:6;3154:9;3150:22;3129:53;:::i;:::-;3119:63;;3075:117;2870:329;;;;:::o;3205:474::-;3273:6;3281;3330:2;3318:9;3309:7;3305:23;3301:32;3298:119;;;3336:79;;:::i;:::-;3298:119;3456:1;3481:53;3526:7;3517:6;3506:9;3502:22;3481:53;:::i;:::-;3471:63;;3427:117;3583:2;3609:53;3654:7;3645:6;3634:9;3630:22;3609:53;:::i;:::-;3599:63;;3554:118;3205:474;;;;;:::o;3685:619::-;3762:6;3770;3778;3827:2;3815:9;3806:7;3802:23;3798:32;3795:119;;;3833:79;;:::i;:::-;3795:119;3953:1;3978:53;4023:7;4014:6;4003:9;3999:22;3978:53;:::i;:::-;3968:63;;3924:117;4080:2;4106:53;4151:7;4142:6;4131:9;4127:22;4106:53;:::i;:::-;4096:63;;4051:118;4208:2;4234:53;4279:7;4270:6;4259:9;4255:22;4234:53;:::i;:::-;4224:63;;4179:118;3685:619;;;;;:::o;4310:943::-;4405:6;4413;4421;4429;4478:3;4466:9;4457:7;4453:23;4449:33;4446:120;;;4485:79;;:::i;:::-;4446:120;4605:1;4630:53;4675:7;4666:6;4655:9;4651:22;4630:53;:::i;:::-;4620:63;;4576:117;4732:2;4758:53;4803:7;4794:6;4783:9;4779:22;4758:53;:::i;:::-;4748:63;;4703:118;4860:2;4886:53;4931:7;4922:6;4911:9;4907:22;4886:53;:::i;:::-;4876:63;;4831:118;5016:2;5005:9;5001:18;4988:32;5047:18;5039:6;5036:30;5033:117;;;5069:79;;:::i;:::-;5033:117;5174:62;5228:7;5219:6;5208:9;5204:22;5174:62;:::i;:::-;5164:72;;4959:287;4310:943;;;;;;;:::o;5259:468::-;5324:6;5332;5381:2;5369:9;5360:7;5356:23;5352:32;5349:119;;;5387:79;;:::i;:::-;5349:119;5507:1;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5478:117;5634:2;5660:50;5702:7;5693:6;5682:9;5678:22;5660:50;:::i;:::-;5650:60;;5605:115;5259:468;;;;;:::o;5733:474::-;5801:6;5809;5858:2;5846:9;5837:7;5833:23;5829:32;5826:119;;;5864:79;;:::i;:::-;5826:119;5984:1;6009:53;6054:7;6045:6;6034:9;6030:22;6009:53;:::i;:::-;5999:63;;5955:117;6111:2;6137:53;6182:7;6173:6;6162:9;6158:22;6137:53;:::i;:::-;6127:63;;6082:118;5733:474;;;;;:::o;6213:559::-;6299:6;6307;6356:2;6344:9;6335:7;6331:23;6327:32;6324:119;;;6362:79;;:::i;:::-;6324:119;6510:1;6499:9;6495:17;6482:31;6540:18;6532:6;6529:30;6526:117;;;6562:79;;:::i;:::-;6526:117;6675:80;6747:7;6738:6;6727:9;6723:22;6675:80;:::i;:::-;6657:98;;;;6453:312;6213:559;;;;;:::o;6778:327::-;6836:6;6885:2;6873:9;6864:7;6860:23;6856:32;6853:119;;;6891:79;;:::i;:::-;6853:119;7011:1;7036:52;7080:7;7071:6;7060:9;7056:22;7036:52;:::i;:::-;7026:62;;6982:116;6778:327;;;;:::o;7111:349::-;7180:6;7229:2;7217:9;7208:7;7204:23;7200:32;7197:119;;;7235:79;;:::i;:::-;7197:119;7355:1;7380:63;7435:7;7426:6;7415:9;7411:22;7380:63;:::i;:::-;7370:73;;7326:127;7111:349;;;;:::o;7466:409::-;7565:6;7614:2;7602:9;7593:7;7589:23;7585:32;7582:119;;;7620:79;;:::i;:::-;7582:119;7740:1;7765:93;7850:7;7841:6;7830:9;7826:22;7765:93;:::i;:::-;7755:103;;7711:157;7466:409;;;;:::o;7881:529::-;7952:6;7960;8009:2;7997:9;7988:7;7984:23;7980:32;7977:119;;;8015:79;;:::i;:::-;7977:119;8163:1;8152:9;8148:17;8135:31;8193:18;8185:6;8182:30;8179:117;;;8215:79;;:::i;:::-;8179:117;8328:65;8385:7;8376:6;8365:9;8361:22;8328:65;:::i;:::-;8310:83;;;;8106:297;7881:529;;;;;:::o;8416:329::-;8475:6;8524:2;8512:9;8503:7;8499:23;8495:32;8492:119;;;8530:79;;:::i;:::-;8492:119;8650:1;8675:53;8720:7;8711:6;8700:9;8696:22;8675:53;:::i;:::-;8665:63;;8621:117;8416:329;;;;:::o;8751:118::-;8838:24;8856:5;8838:24;:::i;:::-;8833:3;8826:37;8751:118;;:::o;8875:109::-;8956:21;8971:5;8956:21;:::i;:::-;8951:3;8944:34;8875:109;;:::o;8990:360::-;9076:3;9104:38;9136:5;9104:38;:::i;:::-;9158:70;9221:6;9216:3;9158:70;:::i;:::-;9151:77;;9237:52;9282:6;9277:3;9270:4;9263:5;9259:16;9237:52;:::i;:::-;9314:29;9336:6;9314:29;:::i;:::-;9309:3;9305:39;9298:46;;9080:270;8990:360;;;;:::o;9356:364::-;9444:3;9472:39;9505:5;9472:39;:::i;:::-;9527:71;9591:6;9586:3;9527:71;:::i;:::-;9520:78;;9607:52;9652:6;9647:3;9640:4;9633:5;9629:16;9607:52;:::i;:::-;9684:29;9706:6;9684:29;:::i;:::-;9679:3;9675:39;9668:46;;9448:272;9356:364;;;;:::o;9726:377::-;9832:3;9860:39;9893:5;9860:39;:::i;:::-;9915:89;9997:6;9992:3;9915:89;:::i;:::-;9908:96;;10013:52;10058:6;10053:3;10046:4;10039:5;10035:16;10013:52;:::i;:::-;10090:6;10085:3;10081:16;10074:23;;9836:267;9726:377;;;;:::o;10109:365::-;10251:3;10272:66;10336:1;10331:3;10272:66;:::i;:::-;10265:73;;10347:93;10436:3;10347:93;:::i;:::-;10465:2;10460:3;10456:12;10449:19;;10109:365;;;:::o;10480:366::-;10622:3;10643:67;10707:2;10702:3;10643:67;:::i;:::-;10636:74;;10719:93;10808:3;10719:93;:::i;:::-;10837:2;10832:3;10828:12;10821:19;;10480:366;;;:::o;10852:::-;10994:3;11015:67;11079:2;11074:3;11015:67;:::i;:::-;11008:74;;11091:93;11180:3;11091:93;:::i;:::-;11209:2;11204:3;11200:12;11193:19;;10852:366;;;:::o;11224:::-;11366:3;11387:67;11451:2;11446:3;11387:67;:::i;:::-;11380:74;;11463:93;11552:3;11463:93;:::i;:::-;11581:2;11576:3;11572:12;11565:19;;11224:366;;;:::o;11596:365::-;11738:3;11759:66;11823:1;11818:3;11759:66;:::i;:::-;11752:73;;11834:93;11923:3;11834:93;:::i;:::-;11952:2;11947:3;11943:12;11936:19;;11596:365;;;:::o;11967:::-;12109:3;12130:66;12194:1;12189:3;12130:66;:::i;:::-;12123:73;;12205:93;12294:3;12205:93;:::i;:::-;12323:2;12318:3;12314:12;12307:19;;11967:365;;;:::o;12338:366::-;12480:3;12501:67;12565:2;12560:3;12501:67;:::i;:::-;12494:74;;12577:93;12666:3;12577:93;:::i;:::-;12695:2;12690:3;12686:12;12679:19;;12338:366;;;:::o;12710:::-;12852:3;12873:67;12937:2;12932:3;12873:67;:::i;:::-;12866:74;;12949:93;13038:3;12949:93;:::i;:::-;13067:2;13062:3;13058:12;13051:19;;12710:366;;;:::o;13082:::-;13224:3;13245:67;13309:2;13304:3;13245:67;:::i;:::-;13238:74;;13321:93;13410:3;13321:93;:::i;:::-;13439:2;13434:3;13430:12;13423:19;;13082:366;;;:::o;13454:::-;13596:3;13617:67;13681:2;13676:3;13617:67;:::i;:::-;13610:74;;13693:93;13782:3;13693:93;:::i;:::-;13811:2;13806:3;13802:12;13795:19;;13454:366;;;:::o;13826:365::-;13968:3;13989:66;14053:1;14048:3;13989:66;:::i;:::-;13982:73;;14064:93;14153:3;14064:93;:::i;:::-;14182:2;14177:3;14173:12;14166:19;;13826:365;;;:::o;14197:366::-;14339:3;14360:67;14424:2;14419:3;14360:67;:::i;:::-;14353:74;;14436:93;14525:3;14436:93;:::i;:::-;14554:2;14549:3;14545:12;14538:19;;14197:366;;;:::o;14569:::-;14711:3;14732:67;14796:2;14791:3;14732:67;:::i;:::-;14725:74;;14808:93;14897:3;14808:93;:::i;:::-;14926:2;14921:3;14917:12;14910:19;;14569:366;;;:::o;14941:365::-;15083:3;15104:66;15168:1;15163:3;15104:66;:::i;:::-;15097:73;;15179:93;15268:3;15179:93;:::i;:::-;15297:2;15292:3;15288:12;15281:19;;14941:365;;;:::o;15312:366::-;15454:3;15475:67;15539:2;15534:3;15475:67;:::i;:::-;15468:74;;15551:93;15640:3;15551:93;:::i;:::-;15669:2;15664:3;15660:12;15653:19;;15312:366;;;:::o;15684:::-;15826:3;15847:67;15911:2;15906:3;15847:67;:::i;:::-;15840:74;;15923:93;16012:3;15923:93;:::i;:::-;16041:2;16036:3;16032:12;16025:19;;15684:366;;;:::o;16056:365::-;16198:3;16219:66;16283:1;16278:3;16219:66;:::i;:::-;16212:73;;16294:93;16383:3;16294:93;:::i;:::-;16412:2;16407:3;16403:12;16396:19;;16056:365;;;:::o;16427:366::-;16569:3;16590:67;16654:2;16649:3;16590:67;:::i;:::-;16583:74;;16666:93;16755:3;16666:93;:::i;:::-;16784:2;16779:3;16775:12;16768:19;;16427:366;;;:::o;16799:::-;16941:3;16962:67;17026:2;17021:3;16962:67;:::i;:::-;16955:74;;17038:93;17127:3;17038:93;:::i;:::-;17156:2;17151:3;17147:12;17140:19;;16799:366;;;:::o;17171:::-;17313:3;17334:67;17398:2;17393:3;17334:67;:::i;:::-;17327:74;;17410:93;17499:3;17410:93;:::i;:::-;17528:2;17523:3;17519:12;17512:19;;17171:366;;;:::o;17543:::-;17685:3;17706:67;17770:2;17765:3;17706:67;:::i;:::-;17699:74;;17782:93;17871:3;17782:93;:::i;:::-;17900:2;17895:3;17891:12;17884:19;;17543:366;;;:::o;17915:::-;18057:3;18078:67;18142:2;18137:3;18078:67;:::i;:::-;18071:74;;18154:93;18243:3;18154:93;:::i;:::-;18272:2;18267:3;18263:12;18256:19;;17915:366;;;:::o;18287:118::-;18374:24;18392:5;18374:24;:::i;:::-;18369:3;18362:37;18287:118;;:::o;18411:435::-;18591:3;18613:95;18704:3;18695:6;18613:95;:::i;:::-;18606:102;;18725:95;18816:3;18807:6;18725:95;:::i;:::-;18718:102;;18837:3;18830:10;;18411:435;;;;;:::o;18852:222::-;18945:4;18983:2;18972:9;18968:18;18960:26;;18996:71;19064:1;19053:9;19049:17;19040:6;18996:71;:::i;:::-;18852:222;;;;:::o;19080:640::-;19275:4;19313:3;19302:9;19298:19;19290:27;;19327:71;19395:1;19384:9;19380:17;19371:6;19327:71;:::i;:::-;19408:72;19476:2;19465:9;19461:18;19452:6;19408:72;:::i;:::-;19490;19558:2;19547:9;19543:18;19534:6;19490:72;:::i;:::-;19609:9;19603:4;19599:20;19594:2;19583:9;19579:18;19572:48;19637:76;19708:4;19699:6;19637:76;:::i;:::-;19629:84;;19080:640;;;;;;;:::o;19726:210::-;19813:4;19851:2;19840:9;19836:18;19828:26;;19864:65;19926:1;19915:9;19911:17;19902:6;19864:65;:::i;:::-;19726:210;;;;:::o;19942:313::-;20055:4;20093:2;20082:9;20078:18;20070:26;;20142:9;20136:4;20132:20;20128:1;20117:9;20113:17;20106:47;20170:78;20243:4;20234:6;20170:78;:::i;:::-;20162:86;;19942:313;;;;:::o;20261:419::-;20427:4;20465:2;20454:9;20450:18;20442:26;;20514:9;20508:4;20504:20;20500:1;20489:9;20485:17;20478:47;20542:131;20668:4;20542:131;:::i;:::-;20534:139;;20261:419;;;:::o;20686:::-;20852:4;20890:2;20879:9;20875:18;20867:26;;20939:9;20933:4;20929:20;20925:1;20914:9;20910:17;20903:47;20967:131;21093:4;20967:131;:::i;:::-;20959:139;;20686:419;;;:::o;21111:::-;21277:4;21315:2;21304:9;21300:18;21292:26;;21364:9;21358:4;21354:20;21350:1;21339:9;21335:17;21328:47;21392:131;21518:4;21392:131;:::i;:::-;21384:139;;21111:419;;;:::o;21536:::-;21702:4;21740:2;21729:9;21725:18;21717:26;;21789:9;21783:4;21779:20;21775:1;21764:9;21760:17;21753:47;21817:131;21943:4;21817:131;:::i;:::-;21809:139;;21536:419;;;:::o;21961:::-;22127:4;22165:2;22154:9;22150:18;22142:26;;22214:9;22208:4;22204:20;22200:1;22189:9;22185:17;22178:47;22242:131;22368:4;22242:131;:::i;:::-;22234:139;;21961:419;;;:::o;22386:::-;22552:4;22590:2;22579:9;22575:18;22567:26;;22639:9;22633:4;22629:20;22625:1;22614:9;22610:17;22603:47;22667:131;22793:4;22667:131;:::i;:::-;22659:139;;22386:419;;;:::o;22811:::-;22977:4;23015:2;23004:9;23000:18;22992:26;;23064:9;23058:4;23054:20;23050:1;23039:9;23035:17;23028:47;23092:131;23218:4;23092:131;:::i;:::-;23084:139;;22811:419;;;:::o;23236:::-;23402:4;23440:2;23429:9;23425:18;23417:26;;23489:9;23483:4;23479:20;23475:1;23464:9;23460:17;23453:47;23517:131;23643:4;23517:131;:::i;:::-;23509:139;;23236:419;;;:::o;23661:::-;23827:4;23865:2;23854:9;23850:18;23842:26;;23914:9;23908:4;23904:20;23900:1;23889:9;23885:17;23878:47;23942:131;24068:4;23942:131;:::i;:::-;23934:139;;23661:419;;;:::o;24086:::-;24252:4;24290:2;24279:9;24275:18;24267:26;;24339:9;24333:4;24329:20;24325:1;24314:9;24310:17;24303:47;24367:131;24493:4;24367:131;:::i;:::-;24359:139;;24086:419;;;:::o;24511:::-;24677:4;24715:2;24704:9;24700:18;24692:26;;24764:9;24758:4;24754:20;24750:1;24739:9;24735:17;24728:47;24792:131;24918:4;24792:131;:::i;:::-;24784:139;;24511:419;;;:::o;24936:::-;25102:4;25140:2;25129:9;25125:18;25117:26;;25189:9;25183:4;25179:20;25175:1;25164:9;25160:17;25153:47;25217:131;25343:4;25217:131;:::i;:::-;25209:139;;24936:419;;;:::o;25361:::-;25527:4;25565:2;25554:9;25550:18;25542:26;;25614:9;25608:4;25604:20;25600:1;25589:9;25585:17;25578:47;25642:131;25768:4;25642:131;:::i;:::-;25634:139;;25361:419;;;:::o;25786:::-;25952:4;25990:2;25979:9;25975:18;25967:26;;26039:9;26033:4;26029:20;26025:1;26014:9;26010:17;26003:47;26067:131;26193:4;26067:131;:::i;:::-;26059:139;;25786:419;;;:::o;26211:::-;26377:4;26415:2;26404:9;26400:18;26392:26;;26464:9;26458:4;26454:20;26450:1;26439:9;26435:17;26428:47;26492:131;26618:4;26492:131;:::i;:::-;26484:139;;26211:419;;;:::o;26636:::-;26802:4;26840:2;26829:9;26825:18;26817:26;;26889:9;26883:4;26879:20;26875:1;26864:9;26860:17;26853:47;26917:131;27043:4;26917:131;:::i;:::-;26909:139;;26636:419;;;:::o;27061:::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27061:419;;;:::o;27486:::-;27652:4;27690:2;27679:9;27675:18;27667:26;;27739:9;27733:4;27729:20;27725:1;27714:9;27710:17;27703:47;27767:131;27893:4;27767:131;:::i;:::-;27759:139;;27486:419;;;:::o;27911:::-;28077:4;28115:2;28104:9;28100:18;28092:26;;28164:9;28158:4;28154:20;28150:1;28139:9;28135:17;28128:47;28192:131;28318:4;28192:131;:::i;:::-;28184:139;;27911:419;;;:::o;28336:::-;28502:4;28540:2;28529:9;28525:18;28517:26;;28589:9;28583:4;28579:20;28575:1;28564:9;28560:17;28553:47;28617:131;28743:4;28617:131;:::i;:::-;28609:139;;28336:419;;;:::o;28761:::-;28927:4;28965:2;28954:9;28950:18;28942:26;;29014:9;29008:4;29004:20;29000:1;28989:9;28985:17;28978:47;29042:131;29168:4;29042:131;:::i;:::-;29034:139;;28761:419;;;:::o;29186:::-;29352:4;29390:2;29379:9;29375:18;29367:26;;29439:9;29433:4;29429:20;29425:1;29414:9;29410:17;29403:47;29467:131;29593:4;29467:131;:::i;:::-;29459:139;;29186:419;;;:::o;29611:222::-;29704:4;29742:2;29731:9;29727:18;29719:26;;29755:71;29823:1;29812:9;29808:17;29799:6;29755:71;:::i;:::-;29611:222;;;;:::o;29839:129::-;29873:6;29900:20;;:::i;:::-;29890:30;;29929:33;29957:4;29949:6;29929:33;:::i;:::-;29839:129;;;:::o;29974:75::-;30007:6;30040:2;30034:9;30024:19;;29974:75;:::o;30055:307::-;30116:4;30206:18;30198:6;30195:30;30192:56;;;30228:18;;:::i;:::-;30192:56;30266:29;30288:6;30266:29;:::i;:::-;30258:37;;30350:4;30344;30340:15;30332:23;;30055:307;;;:::o;30368:98::-;30419:6;30453:5;30447:12;30437:22;;30368:98;;;:::o;30472:99::-;30524:6;30558:5;30552:12;30542:22;;30472:99;;;:::o;30577:168::-;30660:11;30694:6;30689:3;30682:19;30734:4;30729:3;30725:14;30710:29;;30577:168;;;;:::o;30751:169::-;30835:11;30869:6;30864:3;30857:19;30909:4;30904:3;30900:14;30885:29;;30751:169;;;;:::o;30926:148::-;31028:11;31065:3;31050:18;;30926:148;;;;:::o;31080:305::-;31120:3;31139:20;31157:1;31139:20;:::i;:::-;31134:25;;31173:20;31191:1;31173:20;:::i;:::-;31168:25;;31327:1;31259:66;31255:74;31252:1;31249:81;31246:107;;;31333:18;;:::i;:::-;31246:107;31377:1;31374;31370:9;31363:16;;31080:305;;;;:::o;31391:185::-;31431:1;31448:20;31466:1;31448:20;:::i;:::-;31443:25;;31482:20;31500:1;31482:20;:::i;:::-;31477:25;;31521:1;31511:35;;31526:18;;:::i;:::-;31511:35;31568:1;31565;31561:9;31556:14;;31391:185;;;;:::o;31582:348::-;31622:7;31645:20;31663:1;31645:20;:::i;:::-;31640:25;;31679:20;31697:1;31679:20;:::i;:::-;31674:25;;31867:1;31799:66;31795:74;31792:1;31789:81;31784:1;31777:9;31770:17;31766:105;31763:131;;;31874:18;;:::i;:::-;31763:131;31922:1;31919;31915:9;31904:20;;31582:348;;;;:::o;31936:191::-;31976:4;31996:20;32014:1;31996:20;:::i;:::-;31991:25;;32030:20;32048:1;32030:20;:::i;:::-;32025:25;;32069:1;32066;32063:8;32060:34;;;32074:18;;:::i;:::-;32060:34;32119:1;32116;32112:9;32104:17;;31936:191;;;;:::o;32133:96::-;32170:7;32199:24;32217:5;32199:24;:::i;:::-;32188:35;;32133:96;;;:::o;32235:90::-;32269:7;32312:5;32305:13;32298:21;32287:32;;32235:90;;;:::o;32331:149::-;32367:7;32407:66;32400:5;32396:78;32385:89;;32331:149;;;:::o;32486:125::-;32552:7;32581:24;32599:5;32581:24;:::i;:::-;32570:35;;32486:125;;;:::o;32617:126::-;32654:7;32694:42;32687:5;32683:54;32672:65;;32617:126;;;:::o;32749:77::-;32786:7;32815:5;32804:16;;32749:77;;;:::o;32832:154::-;32916:6;32911:3;32906;32893:30;32978:1;32969:6;32964:3;32960:16;32953:27;32832:154;;;:::o;32992:307::-;33060:1;33070:113;33084:6;33081:1;33078:13;33070:113;;;33169:1;33164:3;33160:11;33154:18;33150:1;33145:3;33141:11;33134:39;33106:2;33103:1;33099:10;33094:15;;33070:113;;;33201:6;33198:1;33195:13;33192:101;;;33281:1;33272:6;33267:3;33263:16;33256:27;33192:101;33041:258;32992:307;;;:::o;33305:320::-;33349:6;33386:1;33380:4;33376:12;33366:22;;33433:1;33427:4;33423:12;33454:18;33444:81;;33510:4;33502:6;33498:17;33488:27;;33444:81;33572:2;33564:6;33561:14;33541:18;33538:38;33535:84;;;33591:18;;:::i;:::-;33535:84;33356:269;33305:320;;;:::o;33631:281::-;33714:27;33736:4;33714:27;:::i;:::-;33706:6;33702:40;33844:6;33832:10;33829:22;33808:18;33796:10;33793:34;33790:62;33787:88;;;33855:18;;:::i;:::-;33787:88;33895:10;33891:2;33884:22;33674:238;33631:281;;:::o;33918:233::-;33957:3;33980:24;33998:5;33980:24;:::i;:::-;33971:33;;34026:66;34019:5;34016:77;34013:103;;;34096:18;;:::i;:::-;34013:103;34143:1;34136:5;34132:13;34125:20;;33918:233;;;:::o;34157:176::-;34189:1;34206:20;34224:1;34206:20;:::i;:::-;34201:25;;34240:20;34258:1;34240:20;:::i;:::-;34235:25;;34279:1;34269:35;;34284:18;;:::i;:::-;34269:35;34325:1;34322;34318:9;34313:14;;34157:176;;;;:::o;34339:180::-;34387:77;34384:1;34377:88;34484:4;34481:1;34474:15;34508:4;34505:1;34498:15;34525:180;34573:77;34570:1;34563:88;34670:4;34667:1;34660:15;34694:4;34691:1;34684:15;34711:180;34759:77;34756:1;34749:88;34856:4;34853:1;34846:15;34880:4;34877:1;34870:15;34897:180;34945:77;34942:1;34935:88;35042:4;35039:1;35032:15;35066:4;35063:1;35056:15;35083:180;35131:77;35128:1;35121:88;35228:4;35225:1;35218:15;35252:4;35249:1;35242:15;35269:117;35378:1;35375;35368:12;35392:117;35501:1;35498;35491:12;35515:117;35624:1;35621;35614:12;35638:117;35747:1;35744;35737:12;35761:117;35870:1;35867;35860:12;35884:117;35993:1;35990;35983:12;36007:102;36048:6;36099:2;36095:7;36090:2;36083:5;36079:14;36075:28;36065:38;;36007:102;;;:::o;36115:154::-;36255:6;36251:1;36243:6;36239:14;36232:30;36115:154;:::o;36275:237::-;36415:34;36411:1;36403:6;36399:14;36392:58;36484:20;36479:2;36471:6;36467:15;36460:45;36275:237;:::o;36518:225::-;36658:34;36654:1;36646:6;36642:14;36635:58;36727:8;36722:2;36714:6;36710:15;36703:33;36518:225;:::o;36749:178::-;36889:30;36885:1;36877:6;36873:14;36866:54;36749:178;:::o;36933:154::-;37073:6;37069:1;37061:6;37057:14;37050:30;36933:154;:::o;37093:::-;37233:6;37229:1;37221:6;37217:14;37210:30;37093:154;:::o;37253:223::-;37393:34;37389:1;37381:6;37377:14;37370:58;37462:6;37457:2;37449:6;37445:15;37438:31;37253:223;:::o;37482:175::-;37622:27;37618:1;37610:6;37606:14;37599:51;37482:175;:::o;37663:231::-;37803:34;37799:1;37791:6;37787:14;37780:58;37872:14;37867:2;37859:6;37855:15;37848:39;37663:231;:::o;37900:243::-;38040:34;38036:1;38028:6;38024:14;38017:58;38109:26;38104:2;38096:6;38092:15;38085:51;37900:243;:::o;38149:154::-;38289:6;38285:1;38277:6;38273:14;38266:30;38149:154;:::o;38309:229::-;38449:34;38445:1;38437:6;38433:14;38426:58;38518:12;38513:2;38505:6;38501:15;38494:37;38309:229;:::o;38544:228::-;38684:34;38680:1;38672:6;38668:14;38661:58;38753:11;38748:2;38740:6;38736:15;38729:36;38544:228;:::o;38778:154::-;38918:6;38914:1;38906:6;38902:14;38895:30;38778:154;:::o;38938:182::-;39078:34;39074:1;39066:6;39062:14;39055:58;38938:182;:::o;39126:231::-;39266:34;39262:1;39254:6;39250:14;39243:58;39335:14;39330:2;39322:6;39318:15;39311:39;39126:231;:::o;39363:154::-;39503:6;39499:1;39491:6;39487:14;39480:30;39363:154;:::o;39523:182::-;39663:34;39659:1;39651:6;39647:14;39640:58;39523:182;:::o;39711:228::-;39851:34;39847:1;39839:6;39835:14;39828:58;39920:11;39915:2;39907:6;39903:15;39896:36;39711:228;:::o;39945:234::-;40085:34;40081:1;40073:6;40069:14;40062:58;40154:17;40149:2;40141:6;40137:15;40130:42;39945:234;:::o;40185:220::-;40325:34;40321:1;40313:6;40309:14;40302:58;40394:3;40389:2;40381:6;40377:15;40370:28;40185:220;:::o;40411:236::-;40551:34;40547:1;40539:6;40535:14;40528:58;40620:19;40615:2;40607:6;40603:15;40596:44;40411:236;:::o;40653:122::-;40726:24;40744:5;40726:24;:::i;:::-;40719:5;40716:35;40706:63;;40765:1;40762;40755:12;40706:63;40653:122;:::o;40781:116::-;40851:21;40866:5;40851:21;:::i;:::-;40844:5;40841:32;40831:60;;40887:1;40884;40877:12;40831:60;40781:116;:::o;40903:120::-;40975:23;40992:5;40975:23;:::i;:::-;40968:5;40965:34;40955:62;;41013:1;41010;41003:12;40955:62;40903:120;:::o;41029:180::-;41131:53;41178:5;41131:53;:::i;:::-;41124:5;41121:64;41111:92;;41199:1;41196;41189:12;41111:92;41029:180;:::o;41215:122::-;41288:24;41306:5;41288:24;:::i;:::-;41281:5;41278:35;41268:63;;41327:1;41324;41317:12;41268:63;41215:122;:::o

Swarm Source

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