ETH Price: $3,104.98 (+0.76%)
Gas: 4 Gwei

Token

Hungry Runtz (HUNGRYRUNTZ)
 

Overview

Max Total Supply

6,610 HUNGRYRUNTZ

Holders

1,209

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 HUNGRYRUNTZ
0xb060b93d2d409d2bcd7a400e3582676a8af33b5e
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Hungry Runtz are an infinite FREE-TO-MINT gamified NFT collection that allow holders to join Wolfpacks as well as earn status and rewards. Learn more at www.hungrywolves.com.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Hungry_Runtz

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-18
*/

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.0 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/ERC721.sol)

pragma solidity ^0.8.0;








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

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _approve(to, tokenId);
    }

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

        return _tokenApprovals[tokenId];
    }

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

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

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

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC721/extensions/ERC721Enumerable.sol)

pragma solidity ^0.8.0;



/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

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

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    /**
     * @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` cannot be the zero address.
     * - `to` cannot be the zero address.
     *
     * 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 override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

// File: contracts/runtz-v5.sol

// Wolfpack Labs LLC
// Authors: Jimmyisabot, Charmer

pragma solidity 0.8.12;




contract Hungry_Runtz is ERC721Enumerable, Ownable, ReentrancyGuard {
  using Strings for uint256;

  struct SaleState {
    /// The starting mint (supply) index for the sale.
    uint32 startSupply;
    /// The number of mints allowed in this sale series.
    uint32 seriesSize;
    /// The number of tokens minted in this series. This is reset when the series is reset or rolled.
    uint32 seriesSupply;
    /// The lifetime total supply for this sale (never resets).
    uint32 totalSupply;
    /// The limit of tokens to be minted in a single transaction.
    uint8 maxMint;
    /// The current index of the hundreds unit being minted.
    uint16 hundreds;
    /// The offset of the end of the available (and pre-shuffled) list of remaining ID's for the current hundreds index.
    uint8 offset;
    /// If true, this sale is currently paused.
    bool paused;
    /// If true, reward minting is paused for this sale.
    bool wlPaused;
    /// A shuffled list of IDs for the current block of a hundred tokens being minted.
    uint8[100] list;
  }

  struct AppState {
    uint128 cost;
    uint128 count;
    uint256 nonce;
  }

  SaleState _free =
    SaleState(
      0,
      30000,
      0,
      0,
      20,
      0,
      99,
      true,
      false,
      // prettier-ignore
      [100, 99, 9, 84, 45, 23, 86, 17, 36, 64, 55, 29, 79, 58, 27, 25, 95, 3, 66, 40, 82, 87, 88, 42, 35, 12, 15, 1, 96, 89, 73, 6, 61, 57, 43, 56, 4, 90, 28, 91, 72, 68, 44, 38, 77, 65, 2, 71, 75, 94, 76, 7, 16, 34, 83, 98, 10, 33, 63, 62, 78, 49, 92, 24, 54, 8, 30, 52, 74, 21, 11, 51, 5, 70, 32, 37, 67, 13, 69, 53, 50, 41, 14, 22, 31, 85, 46, 80, 26, 93, 48, 47, 39, 97, 59, 20, 19, 81, 60, 18]
    );
  SaleState _paid =
    SaleState(
      50000,
      10000,
      0,
      0,
      20,
      0,
      99,
      true,
      false,
      // prettier-ignore
      [64, 26, 33, 81, 16, 41, 82, 55, 95, 2, 18, 20, 5, 84, 93, 21, 53, 94, 96, 73, 34, 11, 78, 98, 51, 30, 17, 68, 14, 92, 86, 75, 58, 31, 69, 36, 27, 4, 44, 63, 42, 35, 7, 47, 37, 65, 87, 100, 74, 61, 28, 24, 49, 13, 54, 12, 8, 29, 80, 83, 38, 43, 70, 85, 66, 45, 10, 22, 46, 77, 56, 76, 48, 71, 60, 89, 15, 97, 40, 67, 39, 52, 91, 79, 25, 1, 6, 62, 32, 19, 59, 23, 9, 3, 90, 57, 72, 99, 88, 50]
    );
  AppState _state = AppState(0.005 ether, 0, uint256(blockhash(block.number)) ^ uint256(block.timestamp));

  string public baseURI;
  string public baseExtension = ".json";

  address[] freeWL;
  address[] paidWL;

  event ExternalContractFailure(address extContract, bytes error);

  constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {}

  function freeWLMint(uint256 mintAmount) external payable nonReentrant isHolder(freeWL) {
    require(!_free.wlPaused, "wl minting is paused");
    require(mintAmount <= _free.maxMint, "sale: exceeded max mint amount");
    require(_free.seriesSupply + mintAmount <= _free.seriesSize, "sale: not enough supply left");
    _doMint(mintAmount, _free);
  }

  function paidWLMint(uint256 mintAmount) external payable nonReentrant isHolder(paidWL) {
    require(!_paid.wlPaused, "wl minting is paused");
    require(mintAmount <= _paid.maxMint, "sale: exceeded max mint amount");
    require(_paid.seriesSupply + mintAmount <= _paid.seriesSize, "sale: not enough supply left");
    require(msg.value >= _state.cost * mintAmount);
    _doMint(mintAmount, _paid);
  }

  function paidMint(uint256 _mintAmount) external payable nonReentrant withValidMint(_paid, _mintAmount) {
    require(msg.value >= _state.cost * _mintAmount);
    _doMint(_mintAmount, _paid);
  }

  function freeMint(uint256 mintAmount) external payable nonReentrant withValidMint(_free, mintAmount) {
    _doMint(mintAmount, _free);
  }

  function _doMint(uint256 _mintAmount, SaleState storage sale) internal {
    // uint8[100] storage list = sale.list;
    uint8 offset = sale.offset;

    uint16 hundreds = sale.hundreds;
    uint256 nonce = _state.nonce;

    for (uint256 i = 1; i <= _mintAmount; i++) {
      // Get a random number and swap it to the end of the list.
      uint256 rand = nonce % (offset + 1);
      uint8 nextId = sale.list[rand];
      sale.list[rand] = sale.list[offset];
      sale.list[offset] = nextId;

      // Make sure we get the current token id before rolling the hundreds and resetting the id offset.
      uint256 id = sale.startSupply + (hundreds * 100) + nextId;

      // Check to see if we have used the last id in the list for this block of one hundred.
      if (offset == 0) {
        // Reset the id offset and move to the next block of one hundred.
        offset = 99;
        hundreds++;
      } else {
        // Mark one more id in the list as used.
        offset--;
      }

      // We can finally mint a single token! That was a lot of effort, but I think we can all agree it is worth it!
      _safeMint(msg.sender, id);

      // Update the nonce to take into account the current mint count.
      nonce = nextNonce(nonce, i);
    }

    // Update the contract storage with the new state. This is done once here at the end of the transaction so that we
    // can reduce the number of writes to storage.
    sale.seriesSupply += uint32(_mintAmount);
    sale.totalSupply += uint32(_mintAmount);
    _state.count += uint32(_mintAmount);
    sale.hundreds = hundreds;
    sale.offset = offset;
    _state.nonce = nonce;
  }

  modifier isHolder(address[] memory wl) {
    bool holder = false;
    bytes4 iid = type(IERC721).interfaceId;
    for (uint256 i = 0; i < wl.length && !holder; i++) {
      ERC721 ext = ERC721(wl[i]);
      if (ext.supportsInterface(iid)) {
        try ext.balanceOf(msg.sender) returns (uint256 count) {
          holder = count > 0;
        } catch (bytes memory error) {
          // Ignore the error as it doesn't give access to anything.
          emit ExternalContractFailure(address(ext), error);
        }
      }
    }
    require(holder, "sender is not an owner of provided token");

    _;
  }

  modifier withValidMint(SaleState memory sale, uint256 mintAmount) {
    require(!sale.paused, "sale: not active");
    require(mintAmount <= sale.maxMint, "sale: exceeded max mint amount");
    require(sale.seriesSupply + mintAmount <= sale.seriesSize, "sale: not enough supply left");

    _;
  }

  function nextNonce(uint256 previousNonce, uint256 counter) internal view returns (uint256 nonce) {
    bytes memory input = abi.encodePacked(
      previousNonce ^ counter,
      block.timestamp,
      block.difficulty,
      block.gaslimit,
      msg.sender
    );
    nonce = uint256(keccak256(input));
  }

  function randMod(uint256 modulus) internal view returns (uint256 rand) {
    rand = _state.nonce % modulus;
  }

  function walletOfOwner(address owner) public view returns (uint256[] memory) {
    uint256 ownerTokenCount = balanceOf(owner);
    uint256[] memory tokenIds = new uint256[](ownerTokenCount);
    for (uint256 i; i < ownerTokenCount; i++) {
      tokenIds[i] = tokenOfOwnerByIndex(owner, i);
    }
    return tokenIds;
  }

  // Free Mint Functions

  function setFreeMaxMint(uint8 freeMaxMint) external onlyOwner {
    _free.maxMint = freeMaxMint;
  }

  function setFreeStart(uint32 supply) external onlyOwner {
    _free.startSupply = supply;
  }

  function setFreeOffset(uint8 idx) external onlyOwner {
    _free.offset = idx;
  }

  function setFreeHundredsIndex(uint16 idx) external onlyOwner {
    _free.hundreds = idx;
  }

  function freeMintPause(bool paused) external onlyOwner {
    _free.paused = paused;
  }

  function setFreeSeriesSupply(uint32 supply) external onlyOwner {
    _free.seriesSupply = supply;
  }

  function setFreeSeriesSize(uint32 freeSize) external onlyOwner {
    _free.seriesSize = freeSize;
  }

  function setFreeWL(address[] calldata contracts) external onlyOwner {
    for (uint256 i = 0; i < contracts.length; i++) {
      freeWL.push(contracts[i]);
    }
  }

  function pauseFreeWL(bool paused) external onlyOwner {
    _free.wlPaused = paused;
  }

  function getFreeState() external view onlyOwner returns (SaleState memory _freeState) {
    _freeState = _free;
    return _freeState;
  }

  function getPaidState() external view onlyOwner returns (SaleState memory) {
    return _paid;
  }

  // Paid Mint Functions

  function setPaidCost(uint128 cost) external onlyOwner {
    _state.cost = cost;
  }

  function setPaidMaxMint(uint8 paidMaxMint) external onlyOwner {
    _paid.maxMint = paidMaxMint;
  }

  function setPaidStart(uint32 supply) external onlyOwner {
    _paid.startSupply = supply;
  }

  function setPaidOffset(uint8 idx) external onlyOwner {
    _paid.offset = idx;
  }

  function setPaidHundredsIndex(uint16 idx) external onlyOwner {
    _paid.hundreds = idx;
  }

  function paidMintPause(bool state) external onlyOwner {
    _paid.paused = state;
  }

  function setPaidSeriesSupply(uint32 supply) external onlyOwner {
    _paid.seriesSupply = supply;
  }

  function setPaidSeriesSize(uint32 size) external onlyOwner {
    _paid.seriesSize = size;
  }

  function setPaidWL(address[] calldata contracts) external onlyOwner {
    for (uint256 i = 0; i < contracts.length; i++) {
      paidWL.push(contracts[i]);
    }
  }

  function pausePaidWL(bool paused) external onlyOwner {
    _paid.wlPaused = paused;
  }

  // Contract-Wide Functions

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

  function setBaseURI(string memory uri) external onlyOwner {
    baseURI = uri;
  }

  function setBaseExtension(string memory ext) external onlyOwner {
    baseExtension = ext;
  }

  function burnToken(uint256 tokenId) public onlyOwner {
    require(_isApprovedOrOwner(msg.sender, tokenId));
    _burn(tokenId);
  }

  function withdraw() public onlyOwner {
    require(payable(msg.sender).send(address(this).balance));
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"extContract","type":"address"},{"indexed":false,"internalType":"bytes","name":"error","type":"bytes"}],"name":"ExternalContractFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"freeMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"freeWLMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFreeState","outputs":[{"components":[{"internalType":"uint32","name":"startSupply","type":"uint32"},{"internalType":"uint32","name":"seriesSize","type":"uint32"},{"internalType":"uint32","name":"seriesSupply","type":"uint32"},{"internalType":"uint32","name":"totalSupply","type":"uint32"},{"internalType":"uint8","name":"maxMint","type":"uint8"},{"internalType":"uint16","name":"hundreds","type":"uint16"},{"internalType":"uint8","name":"offset","type":"uint8"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"wlPaused","type":"bool"},{"internalType":"uint8[100]","name":"list","type":"uint8[100]"}],"internalType":"struct Hungry_Runtz.SaleState","name":"_freeState","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPaidState","outputs":[{"components":[{"internalType":"uint32","name":"startSupply","type":"uint32"},{"internalType":"uint32","name":"seriesSize","type":"uint32"},{"internalType":"uint32","name":"seriesSupply","type":"uint32"},{"internalType":"uint32","name":"totalSupply","type":"uint32"},{"internalType":"uint8","name":"maxMint","type":"uint8"},{"internalType":"uint16","name":"hundreds","type":"uint16"},{"internalType":"uint8","name":"offset","type":"uint8"},{"internalType":"bool","name":"paused","type":"bool"},{"internalType":"bool","name":"wlPaused","type":"bool"},{"internalType":"uint8[100]","name":"list","type":"uint8[100]"}],"internalType":"struct Hungry_Runtz.SaleState","name":"","type":"tuple"}],"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"paidMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"paidMintPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"name":"paidWLMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"pauseFreeWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"pausePaidWL","outputs":[],"stateMutability":"nonpayable","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":"ext","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"idx","type":"uint16"}],"name":"setFreeHundredsIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"freeMaxMint","type":"uint8"}],"name":"setFreeMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"idx","type":"uint8"}],"name":"setFreeOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"freeSize","type":"uint32"}],"name":"setFreeSeriesSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"supply","type":"uint32"}],"name":"setFreeSeriesSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"supply","type":"uint32"}],"name":"setFreeStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contracts","type":"address[]"}],"name":"setFreeWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"cost","type":"uint128"}],"name":"setPaidCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"idx","type":"uint16"}],"name":"setPaidHundredsIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"paidMaxMint","type":"uint8"}],"name":"setPaidMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"idx","type":"uint8"}],"name":"setPaidOffset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"size","type":"uint32"}],"name":"setPaidSeriesSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"supply","type":"uint32"}],"name":"setPaidSeriesSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"supply","type":"uint32"}],"name":"setPaidStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"contracts","type":"address[]"}],"name":"setPaidWL","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6000608081815261753060a05260c082905260e082905260146101008190526101208390526063610140819052600161016081905261018094909452610e40604090815260646101c08181526101e093909352600961020052605461022052602d6102405260176102605260566102805260116102a05260246102c0526102e091909152603761030052601d61032052604f61034052603a61036052601b6103805260196103a052605f6103c05260036103e052604261040052602861042052605261044052605761046052605861048052602a6104a05260236104c052600c6104e0819052600f610500526105209590955260606105405260596105605260496105805260066105a052603d6105c05260396105e052602b61060052603861062052600461064052605a61066052601c61068052605b6106a05260486106c05260446106e052602c61070052602661072052604d6107405260416107605260026107805260476107a052604b6107c052605e6107e052604c6108005260076108205260106108405260226108605260536108805260626108a052600a6108c05260216108e052603f61090052603e61092052604e61094052603161096052605c6109805260186109a05260366109c05260086109e052601e610a00526034610a2052604a610a40526015610a6052600b610a80526033610aa0526005610ac0526046610ae0526020610b00526025610b20526043610b4052600d610b608190526045610b80526035610ba0526032610bc0526029610be052600e610c00526016610c2052601f610c40526055610c6052602e610c80526050610ca052601a610cc052605d610ce0526030610d0052602f610d20526027610d40526061610d6052603b610d8052610da0939093526013610dc0526051610de052603c610e00526012610e20526101a082905284546001600160b01b03191674016300001400000000000000000000753000000000178555929392620002e0929190620009ee565b50505060405180610140016040528061c35063ffffffff16815260200161271063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001601460ff168152602001600061ffff168152602001606360ff16815260200160011515815260200160001515815260200160405180610c800160405280604060ff168152602001601a60ff168152602001602160ff168152602001605160ff168152602001601060ff168152602001602960ff168152602001605260ff168152602001603760ff168152602001605f60ff168152602001600260ff168152602001601260ff168152602001601460ff168152602001600560ff168152602001605460ff168152602001605d60ff168152602001601560ff168152602001603560ff168152602001605e60ff168152602001606060ff168152602001604960ff168152602001602260ff168152602001600b60ff168152602001604e60ff168152602001606260ff168152602001603360ff168152602001601e60ff168152602001601160ff168152602001604460ff168152602001600e60ff168152602001605c60ff168152602001605660ff168152602001604b60ff168152602001603a60ff168152602001601f60ff168152602001604560ff168152602001602460ff168152602001601b60ff168152602001600460ff168152602001602c60ff168152602001603f60ff168152602001602a60ff168152602001602360ff168152602001600760ff168152602001602f60ff168152602001602560ff168152602001604160ff168152602001605760ff168152602001606460ff168152602001604a60ff168152602001603d60ff168152602001601c60ff168152602001601860ff168152602001603160ff168152602001600d60ff168152602001603660ff168152602001600c60ff168152602001600860ff168152602001601d60ff168152602001605060ff168152602001605360ff168152602001602660ff168152602001602b60ff168152602001604660ff168152602001605560ff168152602001604260ff168152602001602d60ff168152602001600a60ff168152602001601660ff168152602001602e60ff168152602001604d60ff168152602001603860ff168152602001604c60ff168152602001603060ff168152602001604760ff168152602001603c60ff168152602001605960ff168152602001600f60ff168152602001606160ff168152602001602860ff168152602001604360ff168152602001602760ff168152602001603460ff168152602001605b60ff168152602001604f60ff168152602001601960ff168152602001600160ff168152602001600660ff168152602001603e60ff168152602001602060ff168152602001601360ff168152602001603b60ff168152602001601760ff168152602001600960ff168152602001600360ff168152602001605a60ff168152602001603960ff168152602001604860ff168152602001606360ff168152602001605860ff168152602001603260ff16815250815250601160008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160086101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160000160106101000a81548160ff021916908360ff16021790555060a08201518160000160116101000a81548161ffff021916908361ffff16021790555060c08201518160000160136101000a81548160ff021916908360ff16021790555060e08201518160000160146101000a81548160ff0219169083151502179055506101008201518160000160156101000a81548160ff02191690831515021790555061012082015181600101906064620008a9929190620009ee565b5050604080516060810182526611c37937e080008082526000602080840191909152434042189284018390526016919091556017919091558151808301909252600580835264173539b7b760d91b929091019182526200090e92506019919062000a88565b503480156200091c57600080fd5b5060405162004b2338038062004b238339810160408190526200093f9162000be9565b8151829082906200095890600090602085019062000a88565b5080516200096e90600190602084019062000a88565b5050506200098b620009856200099860201b60201c565b6200099c565b50506001600b5562000c90565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60048301918390821562000a765791602002820160005b8382111562000a4557835183826101000a81548160ff021916908360ff160217905550926020019260010160208160000104928301926001030262000a05565b801562000a745782816101000a81549060ff021916905560010160208160000104928301926001030262000a45565b505b5062000a8492915062000b05565b5090565b82805462000a969062000c53565b90600052602060002090601f01602090048101928262000aba576000855562000a76565b82601f1062000ad557805160ff191683800117855562000a76565b8280016001018555821562000a76579182015b8281111562000a7657825182559160200191906001019062000ae8565b5b8082111562000a84576000815560010162000b06565b634e487b7160e01b600052604160045260246000fd5b600082601f83011262000b4457600080fd5b81516001600160401b038082111562000b615762000b6162000b1c565b604051601f8301601f19908116603f0116810190828211818310171562000b8c5762000b8c62000b1c565b8160405283815260209250868385880101111562000ba957600080fd5b600091505b8382101562000bcd578582018301518183018401529082019062000bae565b8382111562000bdf5760008385830101525b9695505050505050565b6000806040838503121562000bfd57600080fd5b82516001600160401b038082111562000c1557600080fd5b62000c238683870162000b32565b9350602085015191508082111562000c3a57600080fd5b5062000c498582860162000b32565b9150509250929050565b600181811c9082168062000c6857607f821691505b6020821081141562000c8a57634e487b7160e01b600052602260045260246000fd5b50919050565b613e838062000ca06000396000f3fe6080604052600436106102e45760003560e01c806370e8e53211610190578063ac3659e2116100dc578063ca10ed5a11610095578063da3ef23f1161006f578063da3ef23f14610890578063df239951146108b0578063e985e9c5146108d0578063f2fde38b1461091957600080fd5b8063ca10ed5a14610830578063d227694914610850578063d8c7062e1461087057600080fd5b8063ac3659e214610793578063b88d4fde146107b3578063bb24b20e146107d3578063c3848e3d146107e6578063c6682862146107fb578063c87b56dd1461081057600080fd5b8063939aa9c21161014957806396af49271161012357806396af4927146107135780639fdd8ac714610733578063a22cb46514610753578063a44a75a81461077357600080fd5b8063939aa9c2146106be57806393cee044146106de57806395d89b41146106fe57600080fd5b806370e8e53214610618578063715018a6146106385780637b47ec1a1461064d5780637c928fe91461066d5780638762992d146106805780638da5cb5b146106a057600080fd5b80633ccfd60b1161024f5780635137ec4c116102085780636352211e116101e25780636352211e146105b057806365cde733146105d05780636c0360eb146105e357806370a08231146105f857600080fd5b80635137ec4c1461055057806355f804b3146105705780635d2d9d2b1461059057600080fd5b80633ccfd60b1461049b57806342842e0e146104b0578063438b6300146104d0578063456e8701146104fd5780634ee9c58c1461051d5780634f6ccce71461053057600080fd5b806323b872dd116102a157806323b872dd146103d957806326bf36bb146103f95780632a081a0a1461041b5780632f1735661461043b5780632f745c591461045b57806338c7a49a1461047b57600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780631102dbd81461039a57806318160ddd146103ba575b600080fd5b3480156102f557600080fd5b50610309610304366004613446565b610939565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50610333610964565b60405161031591906134bb565b34801561034c57600080fd5b5061036061035b3660046134ce565b6109f6565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004613503565b610a90565b005b3480156103a657600080fd5b506103986103b536600461352d565b610ba6565b3480156103c657600080fd5b506008545b604051908152602001610315565b3480156103e557600080fd5b506103986103f4366004613553565b610bec565b34801561040557600080fd5b5061040e610c1d565b60405161031591906135b5565b34801561042757600080fd5b5061039861043636600461352d565b610d3b565b34801561044757600080fd5b5061039861045636600461352d565b610d8b565b34801561046757600080fd5b506103cb610476366004613503565b610ddc565b34801561048757600080fd5b50610398610496366004613688565b610e72565b3480156104a757600080fd5b50610398610ebc565b3480156104bc57600080fd5b506103986104cb366004613553565b610f0c565b3480156104dc57600080fd5b506104f06104eb3660046136ab565b610f27565b60405161031591906136c6565b34801561050957600080fd5b50610398610518366004613718565b610fc9565b61039861052b3660046134ce565b611011565b34801561053c57600080fd5b506103cb61054b3660046134ce565b61134f565b34801561055c57600080fd5b5061039861056b366004613735565b6113e2565b34801561057c57600080fd5b5061039861058b366004613836565b611484565b34801561059c57600080fd5b506103986105ab36600461352d565b6114c5565b3480156105bc57600080fd5b506103606105cb3660046134ce565b61150b565b6103986105de3660046134ce565b611582565b3480156105ef57600080fd5b50610333611775565b34801561060457600080fd5b506103cb6106133660046136ab565b611803565b34801561062457600080fd5b50610398610633366004613718565b61188a565b34801561064457600080fd5b506103986118d2565b34801561065957600080fd5b506103986106683660046134ce565b611906565b61039861067b3660046134ce565b61194f565b34801561068c57600080fd5b5061039861069b36600461352d565b611b15565b3480156106ac57600080fd5b50600a546001600160a01b0316610360565b3480156106ca57600080fd5b506103986106d9366004613688565b611b66565b3480156106ea57600080fd5b506103986106f9366004613735565b611bb0565b34801561070a57600080fd5b50610333611c52565b34801561071f57600080fd5b5061039861072e36600461352d565b611c61565b34801561073f57600080fd5b5061039861074e36600461387f565b611cb1565b34801561075f57600080fd5b5061039861076e3660046138a8565b611d06565b34801561077f57600080fd5b5061039861078e366004613688565b611d11565b34801561079f57600080fd5b506103986107ae366004613718565b611d5b565b3480156107bf57600080fd5b506103986107ce3660046138df565b611da3565b6103986107e13660046134ce565b611ddb565b3480156107f257600080fd5b5061040e6120eb565b34801561080757600080fd5b506103336121f7565b34801561081c57600080fd5b5061033361082b3660046134ce565b612204565b34801561083c57600080fd5b5061039861084b366004613718565b6122df565b34801561085c57600080fd5b5061039861086b36600461395b565b612327565b34801561087c57600080fd5b5061039861088b366004613688565b612373565b34801561089c57600080fd5b506103986108ab366004613836565b6123bd565b3480156108bc57600080fd5b506103986108cb36600461395b565b6123fa565b3480156108dc57600080fd5b506103096108eb36600461397f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092557600080fd5b506103986109343660046136ab565b612446565b60006001600160e01b0319821663780e9d6360e01b148061095e575061095e826124de565b92915050565b606060008054610973906139b2565b80601f016020809104026020016040519081016040528092919081815260200182805461099f906139b2565b80156109ec5780601f106109c1576101008083540402835291602001916109ec565b820191906000526020600020905b8154815290600101906020018083116109cf57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a745760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a9b8261150b565b9050806001600160a01b0316836001600160a01b03161415610b095760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a6b565b336001600160a01b0382161480610b255750610b2581336108eb565b610b975760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a6b565b610ba1838361252e565b505050565b600a546001600160a01b03163314610bd05760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff191663ffffffff92909216919091179055565b610bf6338261259c565b610c125760405162461bcd60e51b8152600401610a6b90613a22565b610ba1838383612693565b610c2561331d565b600a546001600160a01b03163314610c4f5760405162461bcd60e51b8152600401610a6b906139ed565b6040805161014081018252600c805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191600d90606490826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610cff579050505050505081525050905090565b600a546001600160a01b03163314610d655760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff909216600160401b0263ffffffff60401b19909216919091179055565b600a546001600160a01b03163314610db55760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff909216600160201b0267ffffffff0000000019909216919091179055565b6000610de783611803565b8210610e495760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a6b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e9c5760405162461bcd60e51b8152600401610a6b906139ed565b600c805460ff909216600160801b0260ff60801b19909216919091179055565b600a546001600160a01b03163314610ee65760405162461bcd60e51b8152600401610a6b906139ed565b60405133904780156108fc02916000818181858888f19350505050610f0a57600080fd5b565b610ba183838360405180602001604052806000815250611da3565b60606000610f3483611803565b905060008167ffffffffffffffff811115610f5157610f516137aa565b604051908082528060200260200182016040528015610f7a578160200160208202803683370190505b50905060005b82811015610fc157610f928582610ddc565b828281518110610fa457610fa4613a73565b602090810291909101015280610fb981613a9f565b915050610f80565b509392505050565b600a546001600160a01b03163314610ff35760405162461bcd60e51b8152600401610a6b906139ed565b600c8054911515600160a01b0260ff60a01b19909216919091179055565b6002600b5414156110345760405162461bcd60e51b8152600401610a6b90613aba565b6002600b55601b80546040805160208084028201810190925282815292919083018282801561108c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161106e575b50505050506000806380ac58cd60e01b905060005b8351811080156110af575082155b156112385760008482815181106110c8576110c8613a73565b60209081029190910101516040516301ffc9a760e01b81526001600160e01b0319851660048201529091506001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190613af1565b15611225576040516370a0823160e01b81523360048201526001600160a01b038216906370a0823190602401602060405180830381865afa9250505080156111ad575060408051601f3d908101601f191682019092526111aa91810190613b0e565b60015b611220573d8080156111db576040519150601f19603f3d011682016040523d82523d6000602084013e6111e0565b606091505b507f2ba2393d6f407390434145a9edcef2b6bff151c5c3927ef38bbbce1e80b640048282604051611212929190613b27565b60405180910390a150611225565b151593505b508061123081613a9f565b9150506110a1565b50816112565760405162461bcd60e51b8152600401610a6b90613b4b565b601154600160a81b900460ff16156112a75760405162461bcd60e51b81526020600482015260146024820152731ddb081b5a5b9d1a5b99c81a5cc81c185d5cd95960621b6044820152606401610a6b565b601154600160801b900460ff168411156112d35760405162461bcd60e51b8152600401610a6b90613b93565b60115463ffffffff600160201b82048116916112f8918791600160401b900416613bca565b11156113165760405162461bcd60e51b8152600401610a6b90613be2565b60165461132d9085906001600160801b0316613c19565b34101561133957600080fd5b61134484601161283e565b50506001600b555050565b600061135a60085490565b82106113bd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a6b565b600882815481106113d0576113d0613a73565b90600052602060002001549050919050565b600a546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610a6b906139ed565b60005b81811015610ba157601a83838381811061142b5761142b613a73565b905060200201602081019061144091906136ab565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790558061147c81613a9f565b91505061140f565b600a546001600160a01b031633146114ae5760405162461bcd60e51b8152600401610a6b906139ed565b80516114c1906018906020840190613378565b5050565b600a546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff191663ffffffff92909216919091179055565b6000818152600260205260408120546001600160a01b03168061095e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a6b565b6002600b5414156115a55760405162461bcd60e51b8152600401610a6b90613aba565b6002600b5560408051610140810182526011805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191601290606490826000855b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161165a579050505050505081525050818160e00151156116d75760405162461bcd60e51b815260206004820152601060248201526f73616c653a206e6f742061637469766560801b6044820152606401610a6b565b816080015160ff168111156116fe5760405162461bcd60e51b8152600401610a6b90613b93565b816020015163ffffffff1681836040015163ffffffff1661171f9190613bca565b111561173d5760405162461bcd60e51b8152600401610a6b90613be2565b6016546117549084906001600160801b0316613c19565b34101561176057600080fd5b61176b83601161283e565b50506001600b5550565b60188054611782906139b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ae906139b2565b80156117fb5780601f106117d0576101008083540402835291602001916117fb565b820191906000526020600020905b8154815290600101906020018083116117de57829003601f168201915b505050505081565b60006001600160a01b03821661186e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a6b565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146118b45760405162461bcd60e51b8152600401610a6b906139ed565b600c8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146118fc5760405162461bcd60e51b8152600401610a6b906139ed565b610f0a6000612b34565b600a546001600160a01b031633146119305760405162461bcd60e51b8152600401610a6b906139ed565b61193a338261259c565b61194357600080fd5b61194c81612b86565b50565b6002600b5414156119725760405162461bcd60e51b8152600401610a6b90613aba565b6002600b556040805161014081018252600c805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191600d90606490826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611a27579050505050505081525050818160e0015115611aa45760405162461bcd60e51b815260206004820152601060248201526f73616c653a206e6f742061637469766560801b6044820152606401610a6b565b816080015160ff16811115611acb5760405162461bcd60e51b8152600401610a6b90613b93565b816020015163ffffffff1681836040015163ffffffff16611aec9190613bca565b1115611b0a5760405162461bcd60e51b8152600401610a6b90613be2565b61176b83600c61283e565b600a546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff909216600160201b0267ffffffff0000000019909216919091179055565b600a546001600160a01b03163314611b905760405162461bcd60e51b8152600401610a6b906139ed565b600c805460ff909216600160981b0260ff60981b19909216919091179055565b600a546001600160a01b03163314611bda5760405162461bcd60e51b8152600401610a6b906139ed565b60005b81811015610ba157601b838383818110611bf957611bf9613a73565b9050602002016020810190611c0e91906136ab565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b0390921691909117905580611c4a81613a9f565b915050611bdd565b606060018054610973906139b2565b600a546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff909216600160401b0263ffffffff60401b19909216919091179055565b600a546001600160a01b03163314611cdb5760405162461bcd60e51b8152600401610a6b906139ed565b601680546fffffffffffffffffffffffffffffffff19166001600160801b0392909216919091179055565b6114c1338383612c2d565b600a546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610a6b906139ed565b6011805460ff909216600160801b0260ff60801b19909216919091179055565b600a546001600160a01b03163314611d855760405162461bcd60e51b8152600401610a6b906139ed565b60118054911515600160a81b0260ff60a81b19909216919091179055565b611dad338361259c565b611dc95760405162461bcd60e51b8152600401610a6b90613a22565b611dd584848484612cfc565b50505050565b6002600b541415611dfe5760405162461bcd60e51b8152600401610a6b90613aba565b6002600b55601a805460408051602080840282018101909252828152929190830182828015611e5657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e38575b50505050506000806380ac58cd60e01b905060005b835181108015611e79575082155b15612002576000848281518110611e9257611e92613a73565b60209081029190910101516040516301ffc9a760e01b81526001600160e01b0319851660048201529091506001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f129190613af1565b15611fef576040516370a0823160e01b81523360048201526001600160a01b038216906370a0823190602401602060405180830381865afa925050508015611f77575060408051601f3d908101601f19168201909252611f7491810190613b0e565b60015b611fea573d808015611fa5576040519150601f19603f3d011682016040523d82523d6000602084013e611faa565b606091505b507f2ba2393d6f407390434145a9edcef2b6bff151c5c3927ef38bbbce1e80b640048282604051611fdc929190613b27565b60405180910390a150611fef565b151593505b5080611ffa81613a9f565b915050611e6b565b50816120205760405162461bcd60e51b8152600401610a6b90613b4b565b600c54600160a81b900460ff16156120715760405162461bcd60e51b81526020600482015260146024820152731ddb081b5a5b9d1a5b99c81a5cc81c185d5cd95960621b6044820152606401610a6b565b600c54600160801b900460ff1684111561209d5760405162461bcd60e51b8152600401610a6b90613b93565b600c5463ffffffff600160201b82048116916120c2918791600160401b900416613bca565b11156120e05760405162461bcd60e51b8152600401610a6b90613be2565b61134484600c61283e565b6120f361331d565b600a546001600160a01b0316331461211d5760405162461bcd60e51b8152600401610a6b906139ed565b60408051610140810182526011805463ffffffff8082168452600160201b82048116602080860191909152600160401b8304821685870152600160601b8304909116606085015260ff600160801b83048116608086015261ffff600160881b84041660a0860152600160981b8304811660c0860152600160a01b83048116151560e0860152600160a81b909204821615156101008501528451610c80810195869052601280549093168152939492936101208601939092916064919083906001908601808411610cff579050505050505081525050905090565b60198054611782906139b2565b6000818152600260205260409020546060906001600160a01b03166122835760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a6b565b600061228d612d2f565b905060008151116122ad57604051806020016040528060008152506122d8565b806122b784612d3e565b6040516020016122c8929190613c38565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146123095760405162461bcd60e51b8152600401610a6b906139ed565b60118054911515600160a01b0260ff60a01b19909216919091179055565b600a546001600160a01b031633146123515760405162461bcd60e51b8152600401610a6b906139ed565b6011805461ffff909216600160881b0261ffff60881b19909216919091179055565b600a546001600160a01b0316331461239d5760405162461bcd60e51b8152600401610a6b906139ed565b6011805460ff909216600160981b0260ff60981b19909216919091179055565b600a546001600160a01b031633146123e75760405162461bcd60e51b8152600401610a6b906139ed565b80516114c1906019906020840190613378565b600a546001600160a01b031633146124245760405162461bcd60e51b8152600401610a6b906139ed565b600c805461ffff909216600160881b0261ffff60881b19909216919091179055565b600a546001600160a01b031633146124705760405162461bcd60e51b8152600401610a6b906139ed565b6001600160a01b0381166124d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6b565b61194c81612b34565b60006001600160e01b031982166380ac58cd60e01b148061250f57506001600160e01b03198216635b5e139f60e01b145b8061095e57506301ffc9a760e01b6001600160e01b031983161461095e565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125638261150b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166126155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a6b565b60006126208361150b565b9050806001600160a01b0316846001600160a01b0316148061265b5750836001600160a01b0316612650846109f6565b6001600160a01b0316145b8061268b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126a68261150b565b6001600160a01b03161461270e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a6b565b6001600160a01b0382166127705760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6b565b61277b838383612e3c565b61278660008261252e565b6001600160a01b03831660009081526003602052604081208054600192906127af908490613c67565b90915550506001600160a01b03821660009081526003602052604081208054600192906127dd908490613bca565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8054601754600160981b820460ff1691600160881b900461ffff169060015b858111612a27576000612871856001613c7e565b61287e9060ff1684613cb9565b9050600086600101826064811061289757612897613a73565b602091828204019190069054906101000a900460ff169050866001018660ff16606481106128c7576128c7613a73565b602081049091015460ff601f9092166101000a9004166001880183606481106128f2576128f2613a73565b602091828204019190066101000a81548160ff021916908360ff16021790555080876001018760ff166064811061292b5761292b613a73565b602091828204019190066101000a81548160ff021916908360ff16021790555060008160ff1686606461295e9190613ccd565b89546129749161ffff169063ffffffff16613cf7565b61297e9190613cf7565b63ffffffff16905060ff87166129a457606396508561299c81613d16565b9650506129b2565b866129ae81613d38565b9750505b6129bc3382612ef4565b6040805185871860208083019190915242828401524460608084019190915245608084015233901b6bffffffffffffffffffffffff191660a08301528251808303609401815260b4909201909252805191012094505050508080612a1f90613a9f565b91505061285d565b50835485908590600890612a49908490600160401b900463ffffffff16613cf7565b92506101000a81548163ffffffff021916908363ffffffff1602179055508484600001600c8282829054906101000a900463ffffffff16612a8a9190613cf7565b92506101000a81548163ffffffff021916908363ffffffff1602179055508463ffffffff16601660000160108282829054906101000a90046001600160801b0316612ad59190613d55565b82546001600160801b039182166101009390930a928302919092021990911617905550835460ff909316600160981b0260ff60981b1961ffff909316600160881b029290921662ffffff60881b19909316929092171790915560175550565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612b918261150b565b9050612b9f81600084612e3c565b612baa60008361252e565b6001600160a01b0381166000908152600360205260408120805460019290612bd3908490613c67565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03161415612c8f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a6b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612d07848484612693565b612d1384848484612f0e565b611dd55760405162461bcd60e51b8152600401610a6b90613d77565b606060188054610973906139b2565b606081612d625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612d8c5780612d7681613a9f565b9150612d859050600a83613dc9565b9150612d66565b60008167ffffffffffffffff811115612da757612da76137aa565b6040519080825280601f01601f191660200182016040528015612dd1576020820181803683370190505b5090505b841561268b57612de6600183613c67565b9150612df3600a86613cb9565b612dfe906030613bca565b60f81b818381518110612e1357612e13613a73565b60200101906001600160f81b031916908160001a905350612e35600a86613dc9565b9450612dd5565b6001600160a01b038316612e9757612e9281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612eba565b816001600160a01b0316836001600160a01b031614612eba57612eba838261300c565b6001600160a01b038216612ed157610ba1816130a9565b826001600160a01b0316826001600160a01b031614610ba157610ba18282613158565b6114c182826040518060200160405280600081525061319c565b60006001600160a01b0384163b1561300157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612f52903390899088908890600401613ddd565b6020604051808303816000875af1925050508015612f8d575060408051601f3d908101601f19168201909252612f8a91810190613e1a565b60015b612fe7573d808015612fbb576040519150601f19603f3d011682016040523d82523d6000602084013e612fc0565b606091505b508051612fdf5760405162461bcd60e51b8152600401610a6b90613d77565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061268b565b506001949350505050565b6000600161301984611803565b6130239190613c67565b600083815260076020526040902054909150808214613076576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906130bb90600190613c67565b600083815260096020526040812054600880549394509092849081106130e3576130e3613a73565b90600052602060002001549050806008838154811061310457613104613a73565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061313c5761313c613e37565b6001900381819060005260206000200160009055905550505050565b600061316383611803565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6131a683836131cf565b6131b36000848484612f0e565b610ba15760405162461bcd60e51b8152600401610a6b90613d77565b6001600160a01b0382166132255760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a6b565b6000818152600260205260409020546001600160a01b03161561328a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6b565b61329660008383612e3c565b6001600160a01b03821660009081526003602052604081208054600192906132bf908490613bca565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261012081016133736133fc565b905290565b828054613384906139b2565b90600052602060002090601f0160209004810192826133a657600085556133ec565b82601f106133bf57805160ff19168380011785556133ec565b828001600101855582156133ec579182015b828111156133ec5782518255916020019190600101906133d1565b506133f892915061341b565b5090565b60405180610c8001604052806064906020820280368337509192915050565b5b808211156133f8576000815560010161341c565b6001600160e01b03198116811461194c57600080fd5b60006020828403121561345857600080fd5b81356122d881613430565b60005b8381101561347e578181015183820152602001613466565b83811115611dd55750506000910152565b600081518084526134a7816020860160208601613463565b601f01601f19169290920160200192915050565b6020815260006122d8602083018461348f565b6000602082840312156134e057600080fd5b5035919050565b80356001600160a01b03811681146134fe57600080fd5b919050565b6000806040838503121561351657600080fd5b61351f836134e7565b946020939093013593505050565b60006020828403121561353f57600080fd5b813563ffffffff811681146122d857600080fd5b60008060006060848603121561356857600080fd5b613571846134e7565b925061357f602085016134e7565b9150604084013590509250925092565b8060005b6064811015611dd557815160ff16845260209384019390910190600101613593565b815163ffffffff168152610da0810160208301516135db602084018263ffffffff169052565b5060408301516135f3604084018263ffffffff169052565b50606083015161360b606084018263ffffffff169052565b506080830151613620608084018260ff169052565b5060a083015161363660a084018261ffff169052565b5060c083015161364b60c084018260ff169052565b5060e083015161365f60e084018215159052565b5061010083810151151590830152610120808401516136808285018261358f565b505092915050565b60006020828403121561369a57600080fd5b813560ff811681146122d857600080fd5b6000602082840312156136bd57600080fd5b6122d8826134e7565b6020808252825182820181905260009190848201906040850190845b818110156136fe578351835292840192918401916001016136e2565b50909695505050505050565b801515811461194c57600080fd5b60006020828403121561372a57600080fd5b81356122d88161370a565b6000806020838503121561374857600080fd5b823567ffffffffffffffff8082111561376057600080fd5b818501915085601f83011261377457600080fd5b81358181111561378357600080fd5b8660208260051b850101111561379857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137db576137db6137aa565b604051601f8501601f19908116603f01168101908282118183101715613803576138036137aa565b8160405280935085815286868601111561381c57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561384857600080fd5b813567ffffffffffffffff81111561385f57600080fd5b8201601f8101841361387057600080fd5b61268b848235602084016137c0565b60006020828403121561389157600080fd5b81356001600160801b03811681146122d857600080fd5b600080604083850312156138bb57600080fd5b6138c4836134e7565b915060208301356138d48161370a565b809150509250929050565b600080600080608085870312156138f557600080fd5b6138fe856134e7565b935061390c602086016134e7565b925060408501359150606085013567ffffffffffffffff81111561392f57600080fd5b8501601f8101871361394057600080fd5b61394f878235602084016137c0565b91505092959194509250565b60006020828403121561396d57600080fd5b813561ffff811681146122d857600080fd5b6000806040838503121561399257600080fd5b61399b836134e7565b91506139a9602084016134e7565b90509250929050565b600181811c908216806139c657607f821691505b602082108114156139e757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613ab357613ab3613a89565b5060010190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215613b0357600080fd5b81516122d88161370a565b600060208284031215613b2057600080fd5b5051919050565b6001600160a01b038316815260406020820181905260009061268b9083018461348f565b60208082526028908201527f73656e646572206973206e6f7420616e206f776e6572206f662070726f76696460408201526732b2103a37b5b2b760c11b606082015260800190565b6020808252601e908201527f73616c653a206578636565646564206d6178206d696e7420616d6f756e740000604082015260600190565b60008219821115613bdd57613bdd613a89565b500190565b6020808252601c908201527f73616c653a206e6f7420656e6f75676820737570706c79206c65667400000000604082015260600190565b6000816000190483118215151615613c3357613c33613a89565b500290565b60008351613c4a818460208801613463565b835190830190613c5e818360208801613463565b01949350505050565b600082821015613c7957613c79613a89565b500390565b600060ff821660ff84168060ff03821115613c9b57613c9b613a89565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082613cc857613cc8613ca3565b500690565b600061ffff80831681851681830481118215151615613cee57613cee613a89565b02949350505050565b600063ffffffff808316818516808303821115613c5e57613c5e613a89565b600061ffff80831681811415613d2e57613d2e613a89565b6001019392505050565b600060ff821680613d4b57613d4b613a89565b6000190192915050565b60006001600160801b03808316818516808303821115613c5e57613c5e613a89565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082613dd857613dd8613ca3565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613e109083018461348f565b9695505050505050565b600060208284031215613e2c57600080fd5b81516122d881613430565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208b4d7a62e0a0239cf1ceca972f9cea8d144093389911a0184b124b9ab91183da64736f6c634300080c003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c48756e6772792052756e747a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b48554e47525952554e545a000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102e45760003560e01c806370e8e53211610190578063ac3659e2116100dc578063ca10ed5a11610095578063da3ef23f1161006f578063da3ef23f14610890578063df239951146108b0578063e985e9c5146108d0578063f2fde38b1461091957600080fd5b8063ca10ed5a14610830578063d227694914610850578063d8c7062e1461087057600080fd5b8063ac3659e214610793578063b88d4fde146107b3578063bb24b20e146107d3578063c3848e3d146107e6578063c6682862146107fb578063c87b56dd1461081057600080fd5b8063939aa9c21161014957806396af49271161012357806396af4927146107135780639fdd8ac714610733578063a22cb46514610753578063a44a75a81461077357600080fd5b8063939aa9c2146106be57806393cee044146106de57806395d89b41146106fe57600080fd5b806370e8e53214610618578063715018a6146106385780637b47ec1a1461064d5780637c928fe91461066d5780638762992d146106805780638da5cb5b146106a057600080fd5b80633ccfd60b1161024f5780635137ec4c116102085780636352211e116101e25780636352211e146105b057806365cde733146105d05780636c0360eb146105e357806370a08231146105f857600080fd5b80635137ec4c1461055057806355f804b3146105705780635d2d9d2b1461059057600080fd5b80633ccfd60b1461049b57806342842e0e146104b0578063438b6300146104d0578063456e8701146104fd5780634ee9c58c1461051d5780634f6ccce71461053057600080fd5b806323b872dd116102a157806323b872dd146103d957806326bf36bb146103f95780632a081a0a1461041b5780632f1735661461043b5780632f745c591461045b57806338c7a49a1461047b57600080fd5b806301ffc9a7146102e957806306fdde031461031e578063081812fc14610340578063095ea7b3146103785780631102dbd81461039a57806318160ddd146103ba575b600080fd5b3480156102f557600080fd5b50610309610304366004613446565b610939565b60405190151581526020015b60405180910390f35b34801561032a57600080fd5b50610333610964565b60405161031591906134bb565b34801561034c57600080fd5b5061036061035b3660046134ce565b6109f6565b6040516001600160a01b039091168152602001610315565b34801561038457600080fd5b50610398610393366004613503565b610a90565b005b3480156103a657600080fd5b506103986103b536600461352d565b610ba6565b3480156103c657600080fd5b506008545b604051908152602001610315565b3480156103e557600080fd5b506103986103f4366004613553565b610bec565b34801561040557600080fd5b5061040e610c1d565b60405161031591906135b5565b34801561042757600080fd5b5061039861043636600461352d565b610d3b565b34801561044757600080fd5b5061039861045636600461352d565b610d8b565b34801561046757600080fd5b506103cb610476366004613503565b610ddc565b34801561048757600080fd5b50610398610496366004613688565b610e72565b3480156104a757600080fd5b50610398610ebc565b3480156104bc57600080fd5b506103986104cb366004613553565b610f0c565b3480156104dc57600080fd5b506104f06104eb3660046136ab565b610f27565b60405161031591906136c6565b34801561050957600080fd5b50610398610518366004613718565b610fc9565b61039861052b3660046134ce565b611011565b34801561053c57600080fd5b506103cb61054b3660046134ce565b61134f565b34801561055c57600080fd5b5061039861056b366004613735565b6113e2565b34801561057c57600080fd5b5061039861058b366004613836565b611484565b34801561059c57600080fd5b506103986105ab36600461352d565b6114c5565b3480156105bc57600080fd5b506103606105cb3660046134ce565b61150b565b6103986105de3660046134ce565b611582565b3480156105ef57600080fd5b50610333611775565b34801561060457600080fd5b506103cb6106133660046136ab565b611803565b34801561062457600080fd5b50610398610633366004613718565b61188a565b34801561064457600080fd5b506103986118d2565b34801561065957600080fd5b506103986106683660046134ce565b611906565b61039861067b3660046134ce565b61194f565b34801561068c57600080fd5b5061039861069b36600461352d565b611b15565b3480156106ac57600080fd5b50600a546001600160a01b0316610360565b3480156106ca57600080fd5b506103986106d9366004613688565b611b66565b3480156106ea57600080fd5b506103986106f9366004613735565b611bb0565b34801561070a57600080fd5b50610333611c52565b34801561071f57600080fd5b5061039861072e36600461352d565b611c61565b34801561073f57600080fd5b5061039861074e36600461387f565b611cb1565b34801561075f57600080fd5b5061039861076e3660046138a8565b611d06565b34801561077f57600080fd5b5061039861078e366004613688565b611d11565b34801561079f57600080fd5b506103986107ae366004613718565b611d5b565b3480156107bf57600080fd5b506103986107ce3660046138df565b611da3565b6103986107e13660046134ce565b611ddb565b3480156107f257600080fd5b5061040e6120eb565b34801561080757600080fd5b506103336121f7565b34801561081c57600080fd5b5061033361082b3660046134ce565b612204565b34801561083c57600080fd5b5061039861084b366004613718565b6122df565b34801561085c57600080fd5b5061039861086b36600461395b565b612327565b34801561087c57600080fd5b5061039861088b366004613688565b612373565b34801561089c57600080fd5b506103986108ab366004613836565b6123bd565b3480156108bc57600080fd5b506103986108cb36600461395b565b6123fa565b3480156108dc57600080fd5b506103096108eb36600461397f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561092557600080fd5b506103986109343660046136ab565b612446565b60006001600160e01b0319821663780e9d6360e01b148061095e575061095e826124de565b92915050565b606060008054610973906139b2565b80601f016020809104026020016040519081016040528092919081815260200182805461099f906139b2565b80156109ec5780601f106109c1576101008083540402835291602001916109ec565b820191906000526020600020905b8154815290600101906020018083116109cf57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a745760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a9b8261150b565b9050806001600160a01b0316836001600160a01b03161415610b095760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a6b565b336001600160a01b0382161480610b255750610b2581336108eb565b610b975760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a6b565b610ba1838361252e565b505050565b600a546001600160a01b03163314610bd05760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff191663ffffffff92909216919091179055565b610bf6338261259c565b610c125760405162461bcd60e51b8152600401610a6b90613a22565b610ba1838383612693565b610c2561331d565b600a546001600160a01b03163314610c4f5760405162461bcd60e51b8152600401610a6b906139ed565b6040805161014081018252600c805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191600d90606490826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411610cff579050505050505081525050905090565b600a546001600160a01b03163314610d655760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff909216600160401b0263ffffffff60401b19909216919091179055565b600a546001600160a01b03163314610db55760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff909216600160201b0267ffffffff0000000019909216919091179055565b6000610de783611803565b8210610e495760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a6b565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e9c5760405162461bcd60e51b8152600401610a6b906139ed565b600c805460ff909216600160801b0260ff60801b19909216919091179055565b600a546001600160a01b03163314610ee65760405162461bcd60e51b8152600401610a6b906139ed565b60405133904780156108fc02916000818181858888f19350505050610f0a57600080fd5b565b610ba183838360405180602001604052806000815250611da3565b60606000610f3483611803565b905060008167ffffffffffffffff811115610f5157610f516137aa565b604051908082528060200260200182016040528015610f7a578160200160208202803683370190505b50905060005b82811015610fc157610f928582610ddc565b828281518110610fa457610fa4613a73565b602090810291909101015280610fb981613a9f565b915050610f80565b509392505050565b600a546001600160a01b03163314610ff35760405162461bcd60e51b8152600401610a6b906139ed565b600c8054911515600160a01b0260ff60a01b19909216919091179055565b6002600b5414156110345760405162461bcd60e51b8152600401610a6b90613aba565b6002600b55601b80546040805160208084028201810190925282815292919083018282801561108c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161106e575b50505050506000806380ac58cd60e01b905060005b8351811080156110af575082155b156112385760008482815181106110c8576110c8613a73565b60209081029190910101516040516301ffc9a760e01b81526001600160e01b0319851660048201529091506001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611124573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111489190613af1565b15611225576040516370a0823160e01b81523360048201526001600160a01b038216906370a0823190602401602060405180830381865afa9250505080156111ad575060408051601f3d908101601f191682019092526111aa91810190613b0e565b60015b611220573d8080156111db576040519150601f19603f3d011682016040523d82523d6000602084013e6111e0565b606091505b507f2ba2393d6f407390434145a9edcef2b6bff151c5c3927ef38bbbce1e80b640048282604051611212929190613b27565b60405180910390a150611225565b151593505b508061123081613a9f565b9150506110a1565b50816112565760405162461bcd60e51b8152600401610a6b90613b4b565b601154600160a81b900460ff16156112a75760405162461bcd60e51b81526020600482015260146024820152731ddb081b5a5b9d1a5b99c81a5cc81c185d5cd95960621b6044820152606401610a6b565b601154600160801b900460ff168411156112d35760405162461bcd60e51b8152600401610a6b90613b93565b60115463ffffffff600160201b82048116916112f8918791600160401b900416613bca565b11156113165760405162461bcd60e51b8152600401610a6b90613be2565b60165461132d9085906001600160801b0316613c19565b34101561133957600080fd5b61134484601161283e565b50506001600b555050565b600061135a60085490565b82106113bd5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a6b565b600882815481106113d0576113d0613a73565b90600052602060002001549050919050565b600a546001600160a01b0316331461140c5760405162461bcd60e51b8152600401610a6b906139ed565b60005b81811015610ba157601a83838381811061142b5761142b613a73565b905060200201602081019061144091906136ab565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790558061147c81613a9f565b91505061140f565b600a546001600160a01b031633146114ae5760405162461bcd60e51b8152600401610a6b906139ed565b80516114c1906018906020840190613378565b5050565b600a546001600160a01b031633146114ef5760405162461bcd60e51b8152600401610a6b906139ed565b6011805463ffffffff191663ffffffff92909216919091179055565b6000818152600260205260408120546001600160a01b03168061095e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a6b565b6002600b5414156115a55760405162461bcd60e51b8152600401610a6b90613aba565b6002600b5560408051610140810182526011805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191601290606490826000855b825461010083900a900460ff1681526020600192830181810494850194909303909202910180841161165a579050505050505081525050818160e00151156116d75760405162461bcd60e51b815260206004820152601060248201526f73616c653a206e6f742061637469766560801b6044820152606401610a6b565b816080015160ff168111156116fe5760405162461bcd60e51b8152600401610a6b90613b93565b816020015163ffffffff1681836040015163ffffffff1661171f9190613bca565b111561173d5760405162461bcd60e51b8152600401610a6b90613be2565b6016546117549084906001600160801b0316613c19565b34101561176057600080fd5b61176b83601161283e565b50506001600b5550565b60188054611782906139b2565b80601f01602080910402602001604051908101604052809291908181526020018280546117ae906139b2565b80156117fb5780601f106117d0576101008083540402835291602001916117fb565b820191906000526020600020905b8154815290600101906020018083116117de57829003601f168201915b505050505081565b60006001600160a01b03821661186e5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a6b565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146118b45760405162461bcd60e51b8152600401610a6b906139ed565b600c8054911515600160a81b0260ff60a81b19909216919091179055565b600a546001600160a01b031633146118fc5760405162461bcd60e51b8152600401610a6b906139ed565b610f0a6000612b34565b600a546001600160a01b031633146119305760405162461bcd60e51b8152600401610a6b906139ed565b61193a338261259c565b61194357600080fd5b61194c81612b86565b50565b6002600b5414156119725760405162461bcd60e51b8152600401610a6b90613aba565b6002600b556040805161014081018252600c805463ffffffff8082168452600160201b820481166020850152600160401b8204811684860152600160601b820416606084015260ff600160801b82048116608085015261ffff600160881b83041660a0850152600160981b8204811660c0850152600160a01b82048116151560e0850152600160a81b9091041615156101008301528251610c8081019384905291929091610120840191600d90606490826000855b825461010083900a900460ff16815260206001928301818104948501949093039092029101808411611a27579050505050505081525050818160e0015115611aa45760405162461bcd60e51b815260206004820152601060248201526f73616c653a206e6f742061637469766560801b6044820152606401610a6b565b816080015160ff16811115611acb5760405162461bcd60e51b8152600401610a6b90613b93565b816020015163ffffffff1681836040015163ffffffff16611aec9190613bca565b1115611b0a5760405162461bcd60e51b8152600401610a6b90613be2565b61176b83600c61283e565b600a546001600160a01b03163314611b3f5760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff909216600160201b0267ffffffff0000000019909216919091179055565b600a546001600160a01b03163314611b905760405162461bcd60e51b8152600401610a6b906139ed565b600c805460ff909216600160981b0260ff60981b19909216919091179055565b600a546001600160a01b03163314611bda5760405162461bcd60e51b8152600401610a6b906139ed565b60005b81811015610ba157601b838383818110611bf957611bf9613a73565b9050602002016020810190611c0e91906136ab565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b0390921691909117905580611c4a81613a9f565b915050611bdd565b606060018054610973906139b2565b600a546001600160a01b03163314611c8b5760405162461bcd60e51b8152600401610a6b906139ed565b600c805463ffffffff909216600160401b0263ffffffff60401b19909216919091179055565b600a546001600160a01b03163314611cdb5760405162461bcd60e51b8152600401610a6b906139ed565b601680546fffffffffffffffffffffffffffffffff19166001600160801b0392909216919091179055565b6114c1338383612c2d565b600a546001600160a01b03163314611d3b5760405162461bcd60e51b8152600401610a6b906139ed565b6011805460ff909216600160801b0260ff60801b19909216919091179055565b600a546001600160a01b03163314611d855760405162461bcd60e51b8152600401610a6b906139ed565b60118054911515600160a81b0260ff60a81b19909216919091179055565b611dad338361259c565b611dc95760405162461bcd60e51b8152600401610a6b90613a22565b611dd584848484612cfc565b50505050565b6002600b541415611dfe5760405162461bcd60e51b8152600401610a6b90613aba565b6002600b55601a805460408051602080840282018101909252828152929190830182828015611e5657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611e38575b50505050506000806380ac58cd60e01b905060005b835181108015611e79575082155b15612002576000848281518110611e9257611e92613a73565b60209081029190910101516040516301ffc9a760e01b81526001600160e01b0319851660048201529091506001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611eee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f129190613af1565b15611fef576040516370a0823160e01b81523360048201526001600160a01b038216906370a0823190602401602060405180830381865afa925050508015611f77575060408051601f3d908101601f19168201909252611f7491810190613b0e565b60015b611fea573d808015611fa5576040519150601f19603f3d011682016040523d82523d6000602084013e611faa565b606091505b507f2ba2393d6f407390434145a9edcef2b6bff151c5c3927ef38bbbce1e80b640048282604051611fdc929190613b27565b60405180910390a150611fef565b151593505b5080611ffa81613a9f565b915050611e6b565b50816120205760405162461bcd60e51b8152600401610a6b90613b4b565b600c54600160a81b900460ff16156120715760405162461bcd60e51b81526020600482015260146024820152731ddb081b5a5b9d1a5b99c81a5cc81c185d5cd95960621b6044820152606401610a6b565b600c54600160801b900460ff1684111561209d5760405162461bcd60e51b8152600401610a6b90613b93565b600c5463ffffffff600160201b82048116916120c2918791600160401b900416613bca565b11156120e05760405162461bcd60e51b8152600401610a6b90613be2565b61134484600c61283e565b6120f361331d565b600a546001600160a01b0316331461211d5760405162461bcd60e51b8152600401610a6b906139ed565b60408051610140810182526011805463ffffffff8082168452600160201b82048116602080860191909152600160401b8304821685870152600160601b8304909116606085015260ff600160801b83048116608086015261ffff600160881b84041660a0860152600160981b8304811660c0860152600160a01b83048116151560e0860152600160a81b909204821615156101008501528451610c80810195869052601280549093168152939492936101208601939092916064919083906001908601808411610cff579050505050505081525050905090565b60198054611782906139b2565b6000818152600260205260409020546060906001600160a01b03166122835760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a6b565b600061228d612d2f565b905060008151116122ad57604051806020016040528060008152506122d8565b806122b784612d3e565b6040516020016122c8929190613c38565b6040516020818303038152906040525b9392505050565b600a546001600160a01b031633146123095760405162461bcd60e51b8152600401610a6b906139ed565b60118054911515600160a01b0260ff60a01b19909216919091179055565b600a546001600160a01b031633146123515760405162461bcd60e51b8152600401610a6b906139ed565b6011805461ffff909216600160881b0261ffff60881b19909216919091179055565b600a546001600160a01b0316331461239d5760405162461bcd60e51b8152600401610a6b906139ed565b6011805460ff909216600160981b0260ff60981b19909216919091179055565b600a546001600160a01b031633146123e75760405162461bcd60e51b8152600401610a6b906139ed565b80516114c1906019906020840190613378565b600a546001600160a01b031633146124245760405162461bcd60e51b8152600401610a6b906139ed565b600c805461ffff909216600160881b0261ffff60881b19909216919091179055565b600a546001600160a01b031633146124705760405162461bcd60e51b8152600401610a6b906139ed565b6001600160a01b0381166124d55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6b565b61194c81612b34565b60006001600160e01b031982166380ac58cd60e01b148061250f57506001600160e01b03198216635b5e139f60e01b145b8061095e57506301ffc9a760e01b6001600160e01b031983161461095e565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125638261150b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600260205260408120546001600160a01b03166126155760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a6b565b60006126208361150b565b9050806001600160a01b0316846001600160a01b0316148061265b5750836001600160a01b0316612650846109f6565b6001600160a01b0316145b8061268b57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166126a68261150b565b6001600160a01b03161461270e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a6b565b6001600160a01b0382166127705760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6b565b61277b838383612e3c565b61278660008261252e565b6001600160a01b03831660009081526003602052604081208054600192906127af908490613c67565b90915550506001600160a01b03821660009081526003602052604081208054600192906127dd908490613bca565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b8054601754600160981b820460ff1691600160881b900461ffff169060015b858111612a27576000612871856001613c7e565b61287e9060ff1684613cb9565b9050600086600101826064811061289757612897613a73565b602091828204019190069054906101000a900460ff169050866001018660ff16606481106128c7576128c7613a73565b602081049091015460ff601f9092166101000a9004166001880183606481106128f2576128f2613a73565b602091828204019190066101000a81548160ff021916908360ff16021790555080876001018760ff166064811061292b5761292b613a73565b602091828204019190066101000a81548160ff021916908360ff16021790555060008160ff1686606461295e9190613ccd565b89546129749161ffff169063ffffffff16613cf7565b61297e9190613cf7565b63ffffffff16905060ff87166129a457606396508561299c81613d16565b9650506129b2565b866129ae81613d38565b9750505b6129bc3382612ef4565b6040805185871860208083019190915242828401524460608084019190915245608084015233901b6bffffffffffffffffffffffff191660a08301528251808303609401815260b4909201909252805191012094505050508080612a1f90613a9f565b91505061285d565b50835485908590600890612a49908490600160401b900463ffffffff16613cf7565b92506101000a81548163ffffffff021916908363ffffffff1602179055508484600001600c8282829054906101000a900463ffffffff16612a8a9190613cf7565b92506101000a81548163ffffffff021916908363ffffffff1602179055508463ffffffff16601660000160108282829054906101000a90046001600160801b0316612ad59190613d55565b82546001600160801b039182166101009390930a928302919092021990911617905550835460ff909316600160981b0260ff60981b1961ffff909316600160881b029290921662ffffff60881b19909316929092171790915560175550565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000612b918261150b565b9050612b9f81600084612e3c565b612baa60008361252e565b6001600160a01b0381166000908152600360205260408120805460019290612bd3908490613c67565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b816001600160a01b0316836001600160a01b03161415612c8f5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a6b565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612d07848484612693565b612d1384848484612f0e565b611dd55760405162461bcd60e51b8152600401610a6b90613d77565b606060188054610973906139b2565b606081612d625750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612d8c5780612d7681613a9f565b9150612d859050600a83613dc9565b9150612d66565b60008167ffffffffffffffff811115612da757612da76137aa565b6040519080825280601f01601f191660200182016040528015612dd1576020820181803683370190505b5090505b841561268b57612de6600183613c67565b9150612df3600a86613cb9565b612dfe906030613bca565b60f81b818381518110612e1357612e13613a73565b60200101906001600160f81b031916908160001a905350612e35600a86613dc9565b9450612dd5565b6001600160a01b038316612e9757612e9281600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b612eba565b816001600160a01b0316836001600160a01b031614612eba57612eba838261300c565b6001600160a01b038216612ed157610ba1816130a9565b826001600160a01b0316826001600160a01b031614610ba157610ba18282613158565b6114c182826040518060200160405280600081525061319c565b60006001600160a01b0384163b1561300157604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612f52903390899088908890600401613ddd565b6020604051808303816000875af1925050508015612f8d575060408051601f3d908101601f19168201909252612f8a91810190613e1a565b60015b612fe7573d808015612fbb576040519150601f19603f3d011682016040523d82523d6000602084013e612fc0565b606091505b508051612fdf5760405162461bcd60e51b8152600401610a6b90613d77565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061268b565b506001949350505050565b6000600161301984611803565b6130239190613c67565b600083815260076020526040902054909150808214613076576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b6008546000906130bb90600190613c67565b600083815260096020526040812054600880549394509092849081106130e3576130e3613a73565b90600052602060002001549050806008838154811061310457613104613a73565b600091825260208083209091019290925582815260099091526040808220849055858252812055600880548061313c5761313c613e37565b6001900381819060005260206000200160009055905550505050565b600061316383611803565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b6131a683836131cf565b6131b36000848484612f0e565b610ba15760405162461bcd60e51b8152600401610a6b90613d77565b6001600160a01b0382166132255760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a6b565b6000818152600260205260409020546001600160a01b03161561328a5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a6b565b61329660008383612e3c565b6001600160a01b03821660009081526003602052604081208054600192906132bf908490613bca565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6040805161014081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081019190915261012081016133736133fc565b905290565b828054613384906139b2565b90600052602060002090601f0160209004810192826133a657600085556133ec565b82601f106133bf57805160ff19168380011785556133ec565b828001600101855582156133ec579182015b828111156133ec5782518255916020019190600101906133d1565b506133f892915061341b565b5090565b60405180610c8001604052806064906020820280368337509192915050565b5b808211156133f8576000815560010161341c565b6001600160e01b03198116811461194c57600080fd5b60006020828403121561345857600080fd5b81356122d881613430565b60005b8381101561347e578181015183820152602001613466565b83811115611dd55750506000910152565b600081518084526134a7816020860160208601613463565b601f01601f19169290920160200192915050565b6020815260006122d8602083018461348f565b6000602082840312156134e057600080fd5b5035919050565b80356001600160a01b03811681146134fe57600080fd5b919050565b6000806040838503121561351657600080fd5b61351f836134e7565b946020939093013593505050565b60006020828403121561353f57600080fd5b813563ffffffff811681146122d857600080fd5b60008060006060848603121561356857600080fd5b613571846134e7565b925061357f602085016134e7565b9150604084013590509250925092565b8060005b6064811015611dd557815160ff16845260209384019390910190600101613593565b815163ffffffff168152610da0810160208301516135db602084018263ffffffff169052565b5060408301516135f3604084018263ffffffff169052565b50606083015161360b606084018263ffffffff169052565b506080830151613620608084018260ff169052565b5060a083015161363660a084018261ffff169052565b5060c083015161364b60c084018260ff169052565b5060e083015161365f60e084018215159052565b5061010083810151151590830152610120808401516136808285018261358f565b505092915050565b60006020828403121561369a57600080fd5b813560ff811681146122d857600080fd5b6000602082840312156136bd57600080fd5b6122d8826134e7565b6020808252825182820181905260009190848201906040850190845b818110156136fe578351835292840192918401916001016136e2565b50909695505050505050565b801515811461194c57600080fd5b60006020828403121561372a57600080fd5b81356122d88161370a565b6000806020838503121561374857600080fd5b823567ffffffffffffffff8082111561376057600080fd5b818501915085601f83011261377457600080fd5b81358181111561378357600080fd5b8660208260051b850101111561379857600080fd5b60209290920196919550909350505050565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff808411156137db576137db6137aa565b604051601f8501601f19908116603f01168101908282118183101715613803576138036137aa565b8160405280935085815286868601111561381c57600080fd5b858560208301376000602087830101525050509392505050565b60006020828403121561384857600080fd5b813567ffffffffffffffff81111561385f57600080fd5b8201601f8101841361387057600080fd5b61268b848235602084016137c0565b60006020828403121561389157600080fd5b81356001600160801b03811681146122d857600080fd5b600080604083850312156138bb57600080fd5b6138c4836134e7565b915060208301356138d48161370a565b809150509250929050565b600080600080608085870312156138f557600080fd5b6138fe856134e7565b935061390c602086016134e7565b925060408501359150606085013567ffffffffffffffff81111561392f57600080fd5b8501601f8101871361394057600080fd5b61394f878235602084016137c0565b91505092959194509250565b60006020828403121561396d57600080fd5b813561ffff811681146122d857600080fd5b6000806040838503121561399257600080fd5b61399b836134e7565b91506139a9602084016134e7565b90509250929050565b600181811c908216806139c657607f821691505b602082108114156139e757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415613ab357613ab3613a89565b5060010190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215613b0357600080fd5b81516122d88161370a565b600060208284031215613b2057600080fd5b5051919050565b6001600160a01b038316815260406020820181905260009061268b9083018461348f565b60208082526028908201527f73656e646572206973206e6f7420616e206f776e6572206f662070726f76696460408201526732b2103a37b5b2b760c11b606082015260800190565b6020808252601e908201527f73616c653a206578636565646564206d6178206d696e7420616d6f756e740000604082015260600190565b60008219821115613bdd57613bdd613a89565b500190565b6020808252601c908201527f73616c653a206e6f7420656e6f75676820737570706c79206c65667400000000604082015260600190565b6000816000190483118215151615613c3357613c33613a89565b500290565b60008351613c4a818460208801613463565b835190830190613c5e818360208801613463565b01949350505050565b600082821015613c7957613c79613a89565b500390565b600060ff821660ff84168060ff03821115613c9b57613c9b613a89565b019392505050565b634e487b7160e01b600052601260045260246000fd5b600082613cc857613cc8613ca3565b500690565b600061ffff80831681851681830481118215151615613cee57613cee613a89565b02949350505050565b600063ffffffff808316818516808303821115613c5e57613c5e613a89565b600061ffff80831681811415613d2e57613d2e613a89565b6001019392505050565b600060ff821680613d4b57613d4b613a89565b6000190192915050565b60006001600160801b03808316818516808303821115613c5e57613c5e613a89565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b600082613dd857613dd8613ca3565b500490565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613e109083018461348f565b9695505050505050565b600060208284031215613e2c57600080fd5b81516122d881613430565b634e487b7160e01b600052603160045260246000fdfea26469706673582212208b4d7a62e0a0239cf1ceca972f9cea8d144093389911a0184b124b9ab91183da64736f6c634300080c0033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000c48756e6772792052756e747a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b48554e47525952554e545a000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Hungry Runtz
Arg [1] : _symbol (string): HUNGRYRUNTZ

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [3] : 48756e6772792052756e747a0000000000000000000000000000000000000000
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000b
Arg [5] : 48554e47525952554e545a000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

47299:10157:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41025:224;;;;;;;;;;-1:-1:-1;41025:224:0;;;;;:::i;:::-;;:::i;:::-;;;661:14:1;;654:22;636:41;;624:2;609:18;41025:224:0;;;;;;;;28519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30078:221::-;;;;;;;;;;-1:-1:-1;30078:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1788:32:1;;;1770:51;;1758:2;1743:18;30078:221:0;1624:203:1;29601:411:0;;;;;;;;;;-1:-1:-1;29601:411:0;;;;;:::i;:::-;;:::i;:::-;;54664:95;;;;;;;;;;-1:-1:-1;54664:95:0;;;;;:::i;:::-;;:::i;41665:113::-;;;;;;;;;;-1:-1:-1;41753:10:0;:17;41665:113;;;2696:25:1;;;2684:2;2669:18;41665:113:0;2550:177:1;30828:339:0;;;;;;;;;;-1:-1:-1;30828:339:0;;;;;:::i;:::-;;:::i;55538:141::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;56402:103::-;;;;;;;;;;-1:-1:-1;56402:103:0;;;;;:::i;:::-;;:::i;56511:95::-;;;;;;;;;;-1:-1:-1;56511:95:0;;;;;:::i;:::-;;:::i;41333:256::-;;;;;;;;;;-1:-1:-1;41333:256:0;;;;;:::i;:::-;;:::i;54556:102::-;;;;;;;;;;-1:-1:-1;54556:102:0;;;;;:::i;:::-;;:::i;57347:106::-;;;;;;;;;;;;;:::i;31238:185::-;;;;;;;;;;-1:-1:-1;31238:185:0;;;;;:::i;:::-;;:::i;54195:327::-;;;;;;;;;;-1:-1:-1;54195:327:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;54955:89::-;;;;;;;;;;-1:-1:-1;54955:89:0;;;;;:::i;:::-;;:::i;50365:410::-;;;;;;:::i;:::-;;:::i;41855:233::-;;;;;;;;;;-1:-1:-1;41855:233:0;;;;;:::i;:::-;;:::i;55268:169::-;;;;;;;;;;-1:-1:-1;55268:169:0;;;;;:::i;:::-;;:::i;57014:84::-;;;;;;;;;;-1:-1:-1;57014:84:0;;;;;:::i;:::-;;:::i;56018:95::-;;;;;;;;;;-1:-1:-1;56018:95:0;;;;;:::i;:::-;;:::i;28213:239::-;;;;;;;;;;-1:-1:-1;28213:239:0;;;;;:::i;:::-;;:::i;50781:197::-;;;;;;:::i;:::-;;:::i;49731:21::-;;;;;;;;;;;;;:::i;27943:208::-;;;;;;;;;;-1:-1:-1;27943:208:0;;;;;:::i;:::-;;:::i;55443:89::-;;;;;;;;;;-1:-1:-1;55443:89:0;;;;;:::i;:::-;;:::i;7489:103::-;;;;;;;;;;;;;:::i;57206:135::-;;;;;;;;;;-1:-1:-1;57206:135:0;;;;;:::i;:::-;;:::i;50984:140::-;;;;;;:::i;:::-;;:::i;55159:103::-;;;;;;;;;;-1:-1:-1;55159:103:0;;;;;:::i;:::-;;:::i;6838:87::-;;;;;;;;;;-1:-1:-1;6911:6:0;;-1:-1:-1;;;;;6911:6:0;6838:87;;54765:84;;;;;;;;;;-1:-1:-1;54765:84:0;;;;;:::i;:::-;;:::i;56612:169::-;;;;;;;;;;-1:-1:-1;56612:169:0;;;;;:::i;:::-;;:::i;28688:104::-;;;;;;;;;;;;;:::i;55050:103::-;;;;;;;;;;-1:-1:-1;55050:103:0;;;;;:::i;:::-;;:::i;55819:85::-;;;;;;;;;;-1:-1:-1;55819:85:0;;;;;:::i;:::-;;:::i;30371:155::-;;;;;;;;;;-1:-1:-1;30371:155:0;;;;;:::i;:::-;;:::i;55910:102::-;;;;;;;;;;-1:-1:-1;55910:102:0;;;;;:::i;:::-;;:::i;56787:89::-;;;;;;;;;;-1:-1:-1;56787:89:0;;;;;:::i;:::-;;:::i;31494:328::-;;;;;;;;;;-1:-1:-1;31494:328:0;;;;;:::i;:::-;;:::i;50002:357::-;;;;;;:::i;:::-;;:::i;55685:100::-;;;;;;;;;;;;;:::i;49757:37::-;;;;;;;;;;;;;:::i;28863:334::-;;;;;;;;;;-1:-1:-1;28863:334:0;;;;;:::i;:::-;;:::i;56309:87::-;;;;;;;;;;-1:-1:-1;56309:87:0;;;;;:::i;:::-;;:::i;56209:94::-;;;;;;;;;;-1:-1:-1;56209:94:0;;;;;:::i;:::-;;:::i;56119:84::-;;;;;;;;;;-1:-1:-1;56119:84:0;;;;;:::i;:::-;;:::i;57104:96::-;;;;;;;;;;-1:-1:-1;57104:96:0;;;;;:::i;:::-;;:::i;54855:94::-;;;;;;;;;;-1:-1:-1;54855:94:0;;;;;:::i;:::-;;:::i;30597:164::-;;;;;;;;;;-1:-1:-1;30597:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;30718:25:0;;;30694:4;30718:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;30597:164;7747:201;;;;;;;;;;-1:-1:-1;7747:201:0;;;;;:::i;:::-;;:::i;41025:224::-;41127:4;-1:-1:-1;;;;;;41151:50:0;;-1:-1:-1;;;41151:50:0;;:90;;;41205:36;41229:11;41205:23;:36::i;:::-;41144:97;41025:224;-1:-1:-1;;41025:224:0:o;28519:100::-;28573:13;28606:5;28599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28519:100;:::o;30078:221::-;30154:7;33421:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33421:16:0;30174:73;;;;-1:-1:-1;;;30174:73:0;;10786:2:1;30174:73:0;;;10768:21:1;10825:2;10805:18;;;10798:30;10864:34;10844:18;;;10837:62;-1:-1:-1;;;10915:18:1;;;10908:42;10967:19;;30174:73:0;;;;;;;;;-1:-1:-1;30267:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;30267:24:0;;30078:221::o;29601:411::-;29682:13;29698:23;29713:7;29698:14;:23::i;:::-;29682:39;;29746:5;-1:-1:-1;;;;;29740:11:0;:2;-1:-1:-1;;;;;29740:11:0;;;29732:57;;;;-1:-1:-1;;;29732:57:0;;11199:2:1;29732:57:0;;;11181:21:1;11238:2;11218:18;;;11211:30;11277:34;11257:18;;;11250:62;-1:-1:-1;;;11328:18:1;;;11321:31;11369:19;;29732:57:0;10997:397:1;29732:57:0;5642:10;-1:-1:-1;;;;;29824:21:0;;;;:62;;-1:-1:-1;29849:37:0;29866:5;5642:10;30597:164;:::i;29849:37::-;29802:168;;;;-1:-1:-1;;;29802:168:0;;11601:2:1;29802:168:0;;;11583:21:1;11640:2;11620:18;;;11613:30;11679:34;11659:18;;;11652:62;11750:26;11730:18;;;11723:54;11794:19;;29802:168:0;11399:420:1;29802:168:0;29983:21;29992:2;29996:7;29983:8;:21::i;:::-;29671:341;29601:411;;:::o;54664:95::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;54727:5:::1;:26:::0;;-1:-1:-1;;54727:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;54664:95::o;30828:339::-;31023:41;5642:10;31056:7;31023:18;:41::i;:::-;31015:103;;;;-1:-1:-1;;;31015:103:0;;;;;;;:::i;:::-;31131:28;31141:4;31147:2;31151:7;31131:9;:28::i;55538:141::-;55595:27;;:::i;:::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55631:18:::1;::::0;;::::1;::::0;::::1;::::0;;55644:5:::1;55631:18:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;55631:18:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;55631:18:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55631:18:0;::::1;;::::0;;;;::::1;-1:-1:-1::0;;;55631:18:0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;55631:18:0;::::1;;::::0;;;;-1:-1:-1;;;55631:18:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55631:18:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;55631:18:0;;::::1;;;;;::::0;;;;;;;::::1;::::0;;;;;;55644:5;;55631:18;;;;;;::::1;::::0;;-1:-1:-1;55631:18:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;::::0;::::1;;;55538:141:::0;:::o;56402:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56472:5:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;56472:27:0::1;-1:-1:-1::0;;;;56472:27:0;;::::1;::::0;;;::::1;::::0;;56402:103::o;56511:95::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56577:5:::1;:23:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;56577:23:0::1;-1:-1:-1::0;;56577:23:0;;::::1;::::0;;;::::1;::::0;;56511:95::o;41333:256::-;41430:7;41466:23;41483:5;41466:16;:23::i;:::-;41458:5;:31;41450:87;;;;-1:-1:-1;;;41450:87:0;;12805:2:1;41450:87:0;;;12787:21:1;12844:2;12824:18;;;12817:30;12883:34;12863:18;;;12856:62;-1:-1:-1;;;12934:18:1;;;12927:41;12985:19;;41450:87:0;12603:407:1;41450:87:0;-1:-1:-1;;;;;;41555:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;41333:256::o;54556:102::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;54625:5:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;54625:27:0::1;-1:-1:-1::0;;;;54625:27:0;;::::1;::::0;;;::::1;::::0;;54556:102::o;57347:106::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;57399:47:::1;::::0;57407:10:::1;::::0;57424:21:::1;57399:47:::0;::::1;;;::::0;::::1;::::0;;;57424:21;57407:10;57399:47;::::1;;;;;;57391:56;;;::::0;::::1;;57347:106::o:0;31238:185::-;31376:39;31393:4;31399:2;31403:7;31376:39;;;;;;;;;;;;:16;:39::i;54195:327::-;54254:16;54279:23;54305:16;54315:5;54305:9;:16::i;:::-;54279:42;;54328:25;54370:15;54356:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54356:30:0;;54328:58;;54398:9;54393:102;54413:15;54409:1;:19;54393:102;;;54458:29;54478:5;54485:1;54458:19;:29::i;:::-;54444:8;54453:1;54444:11;;;;;;;;:::i;:::-;;;;;;;;;;:43;54430:3;;;;:::i;:::-;;;;54393:102;;;-1:-1:-1;54508:8:0;54195:327;-1:-1:-1;;;54195:327:0:o;54955:89::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55017:5:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;55017:21:0::1;-1:-1:-1::0;;;;55017:21:0;;::::1;::::0;;;::::1;::::0;;54955:89::o;50365:410::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;50444:6:::1;52817:621:::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;50444:6;52817:621;;::::1;50444:6:::0;52817:621;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;52817:621:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;52863:11;52889:10:::0;-1:-1:-1;;;52889:38:0::1;;52939:9;52934:423;52958:2;:9;52954:1;:13;:24;;;;;52972:6;52971:7;52954:24;52934:423;;;52994:10;53014:2;53017:1;53014:5;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;53033:26:::1;::::0;-1:-1:-1;;;53033:26:0;;-1:-1:-1;;;;;;13941:33:1;;53033:26:0::1;::::0;::::1;13923:52:1::0;53014:5:0;;-1:-1:-1;;;;;;53033:21:0;::::1;::::0;::::1;::::0;13896:18:1;;53033:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53029:321;;;53076:25;::::0;-1:-1:-1;;;53076:25:0;;53090:10:::1;53076:25;::::0;::::1;1770:51:1::0;-1:-1:-1;;;;;53076:13:0;::::1;::::0;::::1;::::0;1743:18:1;;53076:25:0::1;;;;;;;;;;;;;;;;;;-1:-1:-1::0;53076:25:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;53076:25:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;53072:269;;;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53285:44;53317:3;53323:5;53285:44;;;;;;;:::i;:::-;;;;;;;;53170:171;53072:269;;;53148:9:::0;;;-1:-1:-1;53072:269:0::1;-1:-1:-1::0;52980:3:0;::::1;::::0;::::1;:::i;:::-;;;;52934:423;;;;53371:6;53363:59;;;;-1:-1:-1::0;;;53363:59:0::1;;;;;;;:::i;:::-;50468:5:::2;:14:::0;-1:-1:-1;;;50468:14:0;::::2;;;50467:15;50459:48;;;::::0;-1:-1:-1;;;50459:48:0;;15356:2:1;50459:48:0::2;::::0;::::2;15338:21:1::0;15395:2;15375:18;;;15368:30;-1:-1:-1;;;15414:18:1;;;15407:50;15474:18;;50459:48:0::2;15154:344:1::0;50459:48:0::2;50536:5;:13:::0;-1:-1:-1;;;50536:13:0;::::2;;;50522:27:::0;::::2;;50514:70;;;;-1:-1:-1::0;;;50514:70:0::2;;;;;;;:::i;:::-;50634:5;:16:::0;::::2;-1:-1:-1::0;;;50634:16:0;::::2;::::0;::::2;::::0;50599:31:::2;::::0;50620:10;;-1:-1:-1;;;50599:18:0;::::2;;:31;:::i;:::-;:51;;50591:92;;;;-1:-1:-1::0;;;50591:92:0::2;;;;;;;:::i;:::-;50711:6;:11:::0;:24:::2;::::0;50725:10;;-1:-1:-1;;;;;50711:11:0::2;:24;:::i;:::-;50698:9;:37;;50690:46;;;::::0;::::2;;50743:26;50751:10;50763:5;50743:7;:26::i;:::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;;50365:410:0:o;41855:233::-;41930:7;41966:30;41753:10;:17;;41665:113;41966:30;41958:5;:38;41950:95;;;;-1:-1:-1;;;41950:95:0;;16727:2:1;41950:95:0;;;16709:21:1;16766:2;16746:18;;;16739:30;16805:34;16785:18;;;16778:62;-1:-1:-1;;;16856:18:1;;;16849:42;16908:19;;41950:95:0;16525:408:1;41950:95:0;42063:10;42074:5;42063:17;;;;;;;;:::i;:::-;;;;;;;;;42056:24;;41855:233;;;:::o;55268:169::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55348:9:::1;55343:89;55363:20:::0;;::::1;55343:89;;;55399:6;55411:9;;55421:1;55411:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;55399:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;55399:25:0;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;55399:25:0::1;-1:-1:-1::0;;;;;55399:25:0;;::::1;::::0;;;::::1;::::0;;55385:3;::::1;::::0;::::1;:::i;:::-;;;;55343:89;;57014:84:::0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;57079:13;;::::1;::::0;:7:::1;::::0;:13:::1;::::0;::::1;::::0;::::1;:::i;:::-;;57014:84:::0;:::o;56018:95::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56081:5:::1;:26:::0;;-1:-1:-1;;56081:26:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;56018:95::o;28213:239::-;28285:7;28321:16;;;:7;:16;;;;;;-1:-1:-1;;;;;28321:16:0;28356:19;28348:73;;;;-1:-1:-1;;;28348:73:0;;17140:2:1;28348:73:0;;;17122:21:1;17179:2;17159:18;;;17152:30;17218:34;17198:18;;;17191:62;-1:-1:-1;;;17269:18:1;;;17262:39;17318:19;;28348:73:0;16938:405:1;50781:197:0;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;53444:303:::1;::::0;;::::1;::::0;::::1;::::0;;50864:5:::1;53444:303:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;;::::0;;;;::::1;-1:-1:-1::0;;;53444:303:0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;53444:303:0;::::1;;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;53444:303:0;;::::1;;;;;::::0;;;;;;;::::1;::::0;;;;;;50864:5;;53444:303;;;;;;::::1;::::0;;-1:-1:-1;53444:303:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;::::0;::::1;50871:11;53526:4;:11;;;53525:12;53517:41;;;::::0;-1:-1:-1;;;53517:41:0;;17550:2:1;53517:41:0::1;::::0;::::1;17532:21:1::0;17589:2;17569:18;;;17562:30;-1:-1:-1;;;17608:18:1;;;17601:46;17664:18;;53517:41:0::1;17348:340:1::0;53517:41:0::1;53587:4;:12;;;53573:26;;:10;:26;;53565:69;;;;-1:-1:-1::0;;;53565:69:0::1;;;;;;;:::i;:::-;53683:4;:15;;;53649:49;;53669:10;53649:4;:17;;;:30;;;;;;:::i;:::-;:49;;53641:90;;;;-1:-1:-1::0;;;53641:90:0::1;;;;;;;:::i;:::-;50912:6:::2;:11:::0;:25:::2;::::0;50926:11;;-1:-1:-1;;;;;50912:11:0::2;:25;:::i;:::-;50899:9;:38;;50891:47;;;::::0;::::2;;50945:27;50953:11;50966:5;50945:7;:27::i;:::-;-1:-1:-1::0;;1768:1:0;2722:7;:22;-1:-1:-1;50781:197:0:o;49731:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27943:208::-;28015:7;-1:-1:-1;;;;;28043:19:0;;28035:74;;;;-1:-1:-1;;;28035:74:0;;17895:2:1;28035:74:0;;;17877:21:1;17934:2;17914:18;;;17907:30;17973:34;17953:18;;;17946:62;-1:-1:-1;;;18024:18:1;;;18017:40;18074:19;;28035:74:0;17693:406:1;28035:74:0;-1:-1:-1;;;;;;28127:16:0;;;;;:9;:16;;;;;;;27943:208::o;55443:89::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55503:5:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;55503:23:0::1;-1:-1:-1::0;;;;55503:23:0;;::::1;::::0;;;::::1;::::0;;55443:89::o;7489:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;7554:30:::1;7581:1;7554:18;:30::i;57206:135::-:0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;57274:39:::1;57293:10;57305:7;57274:18;:39::i;:::-;57266:48;;;::::0;::::1;;57321:14;57327:7;57321:5;:14::i;:::-;57206:135:::0;:::o;50984:140::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;53444:303:::1;::::0;;::::1;::::0;::::1;::::0;;51066:5:::1;53444:303:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;;::::0;::::1;::::0;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;;::::0;;;;::::1;-1:-1:-1::0;;;53444:303:0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;53444:303:0;::::1;;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;53444:303:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;53444:303:0;;::::1;;;;;::::0;;;;;;;::::1;::::0;;;;;;51066:5;;53444:303;;;;;;::::1;::::0;;-1:-1:-1;53444:303:0;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;;::::0;;::::1;;::::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;;;;;;;;;;;;::::0;::::1;51073:10;53526:4;:11;;;53525:12;53517:41;;;::::0;-1:-1:-1;;;53517:41:0;;17550:2:1;53517:41:0::1;::::0;::::1;17532:21:1::0;17589:2;17569:18;;;17562:30;-1:-1:-1;;;17608:18:1;;;17601:46;17664:18;;53517:41:0::1;17348:340:1::0;53517:41:0::1;53587:4;:12;;;53573:26;;:10;:26;;53565:69;;;;-1:-1:-1::0;;;53565:69:0::1;;;;;;;:::i;:::-;53683:4;:15;;;53649:49;;53669:10;53649:4;:17;;;:30;;;;;;:::i;:::-;:49;;53641:90;;;;-1:-1:-1::0;;;53641:90:0::1;;;;;;;:::i;:::-;51092:26:::2;51100:10;51112:5;51092:7;:26::i;55159:103::-:0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55229:5:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;55229:27:0::1;-1:-1:-1::0;;55229:27:0;;::::1;::::0;;;::::1;::::0;;55159:103::o;54765:84::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;54825:5:::1;:18:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;54825:18:0::1;-1:-1:-1::0;;;;54825:18:0;;::::1;::::0;;;::::1;::::0;;54765:84::o;56612:169::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56692:9:::1;56687:89;56707:20:::0;;::::1;56687:89;;;56743:6;56755:9;;56765:1;56755:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;56743:25:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;56743:25:0;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;56743:25:0::1;-1:-1:-1::0;;;;;56743:25:0;;::::1;::::0;;;::::1;::::0;;56729:3;::::1;::::0;::::1;:::i;:::-;;;;56687:89;;28688:104:::0;28744:13;28777:7;28770:14;;;;;:::i;55050:103::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55120:5:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;55120:27:0::1;-1:-1:-1::0;;;;55120:27:0;;::::1;::::0;;;::::1;::::0;;55050:103::o;55819:85::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55880:6:::1;:18:::0;;-1:-1:-1;;55880:18:0::1;-1:-1:-1::0;;;;;55880:18:0;;;::::1;::::0;;;::::1;::::0;;55819:85::o;30371:155::-;30466:52;5642:10;30499:8;30509;30466:18;:52::i;55910:102::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55979:5:::1;:27:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;55979:27:0::1;-1:-1:-1::0;;;;55979:27:0;;::::1;::::0;;;::::1;::::0;;55910:102::o;56787:89::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56847:5:::1;:23:::0;;;::::1;;-1:-1:-1::0;;;56847:23:0::1;-1:-1:-1::0;;;;56847:23:0;;::::1;::::0;;;::::1;::::0;;56787:89::o;31494:328::-;31669:41;5642:10;31702:7;31669:18;:41::i;:::-;31661:103;;;;-1:-1:-1;;;31661:103:0;;;;;;;:::i;:::-;31775:39;31789:4;31795:2;31799:7;31808:5;31775:13;:39::i;:::-;31494:328;;;;:::o;50002:357::-;1812:1;2410:7;;:19;;2402:63;;;;-1:-1:-1;;;2402:63:0;;;;;;;:::i;:::-;1812:1;2543:7;:18;50081:6:::1;52817:621:::0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;;50081:6;52817:621;;::::1;50081:6:::0;52817:621;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;52817:621:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;52863:11;52889:10:::0;-1:-1:-1;;;52889:38:0::1;;52939:9;52934:423;52958:2;:9;52954:1;:13;:24;;;;;52972:6;52971:7;52954:24;52934:423;;;52994:10;53014:2;53017:1;53014:5;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;53033:26:::1;::::0;-1:-1:-1;;;53033:26:0;;-1:-1:-1;;;;;;13941:33:1;;53033:26:0::1;::::0;::::1;13923:52:1::0;53014:5:0;;-1:-1:-1;;;;;;53033:21:0;::::1;::::0;::::1;::::0;13896:18:1;;53033:26:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53029:321;;;53076:25;::::0;-1:-1:-1;;;53076:25:0;;53090:10:::1;53076:25;::::0;::::1;1770:51:1::0;-1:-1:-1;;;;;53076:13:0;::::1;::::0;::::1;::::0;1743:18:1;;53076:25:0::1;;;;;;;;;;;;;;;;;;-1:-1:-1::0;53076:25:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;53076:25:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;53072:269;;;::::0;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53285:44;53317:3;53323:5;53285:44;;;;;;;:::i;:::-;;;;;;;;53170:171;53072:269;;;53148:9:::0;;;-1:-1:-1;53072:269:0::1;-1:-1:-1::0;52980:3:0;::::1;::::0;::::1;:::i;:::-;;;;52934:423;;;;53371:6;53363:59;;;;-1:-1:-1::0;;;53363:59:0::1;;;;;;;:::i;:::-;50105:5:::2;:14:::0;-1:-1:-1;;;50105:14:0;::::2;;;50104:15;50096:48;;;::::0;-1:-1:-1;;;50096:48:0;;15356:2:1;50096:48:0::2;::::0;::::2;15338:21:1::0;15395:2;15375:18;;;15368:30;-1:-1:-1;;;15414:18:1;;;15407:50;15474:18;;50096:48:0::2;15154:344:1::0;50096:48:0::2;50173:5;:13:::0;-1:-1:-1;;;50173:13:0;::::2;;;50159:27:::0;::::2;;50151:70;;;;-1:-1:-1::0;;;50151:70:0::2;;;;;;;:::i;:::-;50271:5;:16:::0;::::2;-1:-1:-1::0;;;50271:16:0;::::2;::::0;::::2;::::0;50236:31:::2;::::0;50257:10;;-1:-1:-1;;;50236:18:0;::::2;;:31;:::i;:::-;:51;;50228:92;;;;-1:-1:-1::0;;;50228:92:0::2;;;;;;;:::i;:::-;50327:26;50335:10;50347:5;50327:7;:26::i;55685:100::-:0;55742:16;;:::i;:::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;55767:12:::1;::::0;;::::1;::::0;::::1;::::0;;55774:5:::1;55767:12:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;55767:12:0;::::1;::::0;::::1;;::::0;;::::1;::::0;;;;-1:-1:-1;;;55767:12:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55767:12:0;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;55767:12:0;::::1;::::0;::::1;::::0;;;;::::1;-1:-1:-1::0;;;55767:12:0;::::1;;::::0;;;;-1:-1:-1;;;55767:12:0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55767:12:0;::::1;::::0;::::1;;;::::0;;;;-1:-1:-1;;;55767:12:0;;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;;;;;;;;;::::1;::::0;;;;55774:5;;55767:12;;;;;;;::::1;::::0;;;;;;;::::1;::::0;;::::1;;;;;;;;;;;;::::0;::::1;;;55685:100:::0;:::o;49757:37::-;;;;;;;:::i;28863:334::-;33397:4;33421:16;;;:7;:16;;;;;;28936:13;;-1:-1:-1;;;;;33421:16:0;28962:76;;;;-1:-1:-1;;;28962:76:0;;18306:2:1;28962:76:0;;;18288:21:1;18345:2;18325:18;;;18318:30;18384:34;18364:18;;;18357:62;-1:-1:-1;;;18435:18:1;;;18428:45;18490:19;;28962:76:0;18104:411:1;28962:76:0;29051:21;29075:10;:8;:10::i;:::-;29051:34;;29127:1;29109:7;29103:21;:25;:86;;;;;;;;;;;;;;;;;29155:7;29164:18;:7;:16;:18::i;:::-;29138:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29103:86;29096:93;28863:334;-1:-1:-1;;;28863:334:0:o;56309:87::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56370:5:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;56370:20:0::1;-1:-1:-1::0;;;;56370:20:0;;::::1;::::0;;;::::1;::::0;;56309:87::o;56209:94::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56277:5:::1;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;56277:20:0::1;-1:-1:-1::0;;;;56277:20:0;;::::1;::::0;;;::::1;::::0;;56209:94::o;56119:84::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;56179:5:::1;:18:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;56179:18:0::1;-1:-1:-1::0;;;;56179:18:0;;::::1;::::0;;;::::1;::::0;;56119:84::o;57104:96::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;57175:19;;::::1;::::0;:13:::1;::::0;:19:::1;::::0;::::1;::::0;::::1;:::i;54855:94::-:0;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;54923:5:::1;:20:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;54923:20:0::1;-1:-1:-1::0;;;;54923:20:0;;::::1;::::0;;;::::1;::::0;;54855:94::o;7747:201::-;6911:6;;-1:-1:-1;;;;;6911:6:0;5642:10;7058:23;7050:68;;;;-1:-1:-1;;;7050:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7836:22:0;::::1;7828:73;;;::::0;-1:-1:-1;;;7828:73:0;;19197:2:1;7828:73:0::1;::::0;::::1;19179:21:1::0;19236:2;19216:18;;;19209:30;19275:34;19255:18;;;19248:62;-1:-1:-1;;;19326:18:1;;;19319:36;19372:19;;7828:73:0::1;18995:402:1::0;7828:73:0::1;7912:28;7931:8;7912:18;:28::i;27574:305::-:0;27676:4;-1:-1:-1;;;;;;27713:40:0;;-1:-1:-1;;;27713:40:0;;:105;;-1:-1:-1;;;;;;;27770:48:0;;-1:-1:-1;;;27770:48:0;27713:105;:158;;;-1:-1:-1;;;;;;;;;;19379:40:0;;;27835:36;19270:157;37314:174;37389:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;37389:29:0;-1:-1:-1;;;;;37389:29:0;;;;;;;;:24;;37443:23;37389:24;37443:14;:23::i;:::-;-1:-1:-1;;;;;37434:46:0;;;;;;;;;;;37314:174;;:::o;33626:348::-;33719:4;33421:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33421:16:0;33736:73;;;;-1:-1:-1;;;33736:73:0;;19604:2:1;33736:73:0;;;19586:21:1;19643:2;19623:18;;;19616:30;19682:34;19662:18;;;19655:62;-1:-1:-1;;;19733:18:1;;;19726:42;19785:19;;33736:73:0;19402:408:1;33736:73:0;33820:13;33836:23;33851:7;33836:14;:23::i;:::-;33820:39;;33889:5;-1:-1:-1;;;;;33878:16:0;:7;-1:-1:-1;;;;;33878:16:0;;:51;;;;33922:7;-1:-1:-1;;;;;33898:31:0;:20;33910:7;33898:11;:20::i;:::-;-1:-1:-1;;;;;33898:31:0;;33878:51;:87;;;-1:-1:-1;;;;;;30718:25:0;;;30694:4;30718:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;33933:32;33870:96;33626:348;-1:-1:-1;;;;33626:348:0:o;36618:578::-;36777:4;-1:-1:-1;;;;;36750:31:0;:23;36765:7;36750:14;:23::i;:::-;-1:-1:-1;;;;;36750:31:0;;36742:85;;;;-1:-1:-1;;;36742:85:0;;20017:2:1;36742:85:0;;;19999:21:1;20056:2;20036:18;;;20029:30;20095:34;20075:18;;;20068:62;-1:-1:-1;;;20146:18:1;;;20139:39;20195:19;;36742:85:0;19815:405:1;36742:85:0;-1:-1:-1;;;;;36846:16:0;;36838:65;;;;-1:-1:-1;;;36838:65:0;;20427:2:1;36838:65:0;;;20409:21:1;20466:2;20446:18;;;20439:30;20505:34;20485:18;;;20478:62;-1:-1:-1;;;20556:18:1;;;20549:34;20600:19;;36838:65:0;20225:400:1;36838:65:0;36916:39;36937:4;36943:2;36947:7;36916:20;:39::i;:::-;37020:29;37037:1;37041:7;37020:8;:29::i;:::-;-1:-1:-1;;;;;37062:15:0;;;;;;:9;:15;;;;;:20;;37081:1;;37062:15;:20;;37081:1;;37062:20;:::i;:::-;;;;-1:-1:-1;;;;;;;37093:13:0;;;;;;:9;:13;;;;;:18;;37110:1;;37093:13;:18;;37110:1;;37093:18;:::i;:::-;;;;-1:-1:-1;;37122:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;37122:21:0;-1:-1:-1;;;;;37122:21:0;;;;;;;;;37161:27;;37122:16;;37161:27;;;;;;;36618:578;;;:::o;51130:1681::-;51268:11;;51342:12;;-1:-1:-1;;;51268:11:0;;;;;-1:-1:-1;;;51306:13:0;;;;;51342:12;51363:1049;51388:11;51383:1;:16;51363:1049;;51481:12;51505:10;:6;51514:1;51505:10;:::i;:::-;51496:20;;;;:5;:20;:::i;:::-;51481:35;;51525:12;51540:4;:9;;51550:4;51540:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51525:30;;51582:4;:9;;51592:6;51582:17;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;51564:9;;;51574:4;51564:15;;;;;;;:::i;:::-;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;51628:6;51608:4;:9;;51618:6;51608:17;;;;;;;;;:::i;:::-;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;51750:10;51801:6;51763:44;;51783:8;51794:3;51783:14;;;;:::i;:::-;51763:16;;:35;;;;;:16;;:35;:::i;:::-;:44;;;;:::i;:::-;51750:57;;;-1:-1:-1;51916:11:0;;;51912:230;;52024:2;;-1:-1:-1;52037:10:0;;;;:::i;:::-;;;;51912:230;;;52124:8;;;;:::i;:::-;;;;51912:230;52269:25;52279:10;52291:2;52269:9;:25::i;:::-;53878:146;;;53903:23;;;53878:146;;;;23496:19:1;;;;53935:15:0;23531:12:1;;;23524:28;53959:16:0;23568:12:1;;;;23561:28;;;;53984:14:0;23605:12:1;;;23598:28;54007:10:0;23661:15:1;;-1:-1:-1;;23657:53:1;23642:13;;;23635:76;53878:146:0;;;;;;;;;23727:13:1;;;;53878:146:0;;;54047:16;;;;;52377:27;;51406:1006;;;51401:3;;;;;:::i;:::-;;;;51363:1049;;;-1:-1:-1;52592:40:0;;52620:11;;52592:40;;:17;;:40;;52620:11;;-1:-1:-1;;;52592:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52666:11;52639:4;:16;;;:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;52708:11;52685:35;;:6;:12;;;:35;;;;;;;;;;-1:-1:-1;;;;;52685:35:0;;;;;:::i;:::-;;;-1:-1:-1;;;;;52685:35:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52727:24:0;;52758:20;;;;-1:-1:-1;;;52758:20:0;-1:-1:-1;;;;52727:24:0;;;;-1:-1:-1;;;52727:24:0;52758:20;;;;-1:-1:-1;;;;52758:20:0;;;;;;;;;;;52785:12;:20;-1:-1:-1;51130:1681:0:o;8108:191::-;8201:6;;;-1:-1:-1;;;;;8218:17:0;;;-1:-1:-1;;;;;;8218:17:0;;;;;;;8251:40;;8201:6;;;8218:17;8201:6;;8251:40;;8182:16;;8251:40;8171:128;8108:191;:::o;35921:360::-;35981:13;35997:23;36012:7;35997:14;:23::i;:::-;35981:39;;36033:48;36054:5;36069:1;36073:7;36033:20;:48::i;:::-;36122:29;36139:1;36143:7;36122:8;:29::i;:::-;-1:-1:-1;;;;;36164:16:0;;;;;;:9;:16;;;;;:21;;36184:1;;36164:16;:21;;36184:1;;36164:21;:::i;:::-;;;;-1:-1:-1;;36203:16:0;;;;:7;:16;;;;;;36196:23;;-1:-1:-1;;;;;;36196:23:0;;;36237:36;36211:7;;36203:16;-1:-1:-1;;;;;36237:36:0;;;;;36203:16;;36237:36;35970:311;35921:360;:::o;37630:315::-;37785:8;-1:-1:-1;;;;;37776:17:0;:5;-1:-1:-1;;;;;37776:17:0;;;37768:55;;;;-1:-1:-1;;;37768:55:0;;22559:2:1;37768:55:0;;;22541:21:1;22598:2;22578:18;;;22571:30;22637:27;22617:18;;;22610:55;22682:18;;37768:55:0;22357:349:1;37768:55:0;-1:-1:-1;;;;;37834:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;37834:46:0;;;;;;;;;;37896:41;;636::1;;;37896::0;;609:18:1;37896:41:0;;;;;;;37630:315;;;:::o;32704:::-;32861:28;32871:4;32877:2;32881:7;32861:9;:28::i;:::-;32908:48;32931:4;32937:2;32941:7;32950:5;32908:22;:48::i;:::-;32900:111;;;;-1:-1:-1;;;32900:111:0;;;;;;;:::i;56914:94::-;56966:13;56995:7;56988:14;;;;;:::i;3124:723::-;3180:13;3401:10;3397:53;;-1:-1:-1;;3428:10:0;;;;;;;;;;;;-1:-1:-1;;;3428:10:0;;;;;3124:723::o;3397:53::-;3475:5;3460:12;3516:78;3523:9;;3516:78;;3549:8;;;;:::i;:::-;;-1:-1:-1;3572:10:0;;-1:-1:-1;3580:2:0;3572:10;;:::i;:::-;;;3516:78;;;3604:19;3636:6;3626:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3626:17:0;;3604:39;;3654:154;3661:10;;3654:154;;3688:11;3698:1;3688:11;;:::i;:::-;;-1:-1:-1;3757:10:0;3765:2;3757:5;:10;:::i;:::-;3744:24;;:2;:24;:::i;:::-;3731:39;;3714:6;3721;3714:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;3714:56:0;;;;;;;;-1:-1:-1;3785:11:0;3794:2;3785:11;;:::i;:::-;;;3654:154;;42701:589;-1:-1:-1;;;;;42907:18:0;;42903:187;;42942:40;42974:7;44117:10;:17;;44090:24;;;;:15;:24;;;;;:44;;;44145:24;;;;;;;;;;;;44013:164;42942:40;42903:187;;;43012:2;-1:-1:-1;;;;;43004:10:0;:4;-1:-1:-1;;;;;43004:10:0;;43000:90;;43031:47;43064:4;43070:7;43031:32;:47::i;:::-;-1:-1:-1;;;;;43104:16:0;;43100:183;;43137:45;43174:7;43137:36;:45::i;43100:183::-;43210:4;-1:-1:-1;;;;;43204:10:0;:2;-1:-1:-1;;;;;43204:10:0;;43200:83;;43231:40;43259:2;43263:7;43231:27;:40::i;34316:110::-;34392:26;34402:2;34406:7;34392:26;;;;;;;;;;;;:9;:26::i;38510:799::-;38665:4;-1:-1:-1;;;;;38686:13:0;;9449:20;9497:8;38682:620;;38722:72;;-1:-1:-1;;;38722:72:0;;-1:-1:-1;;;;;38722:36:0;;;;;:72;;5642:10;;38773:4;;38779:7;;38788:5;;38722:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38722:72:0;;;;;;;;-1:-1:-1;;38722:72:0;;;;;;;;;;;;:::i;:::-;;;38718:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38964:13:0;;38960:272;;39007:60;;-1:-1:-1;;;39007:60:0;;;;;;;:::i;38960:272::-;39182:6;39176:13;39167:6;39163:2;39159:15;39152:38;38718:529;-1:-1:-1;;;;;;38845:51:0;-1:-1:-1;;;38845:51:0;;-1:-1:-1;38838:58:0;;38682:620;-1:-1:-1;39286:4:0;38510:799;;;;;;:::o;44804:988::-;45070:22;45120:1;45095:22;45112:4;45095:16;:22::i;:::-;:26;;;;:::i;:::-;45132:18;45153:26;;;:17;:26;;;;;;45070:51;;-1:-1:-1;45286:28:0;;;45282:328;;-1:-1:-1;;;;;45353:18:0;;45331:19;45353:18;;;:12;:18;;;;;;;;:34;;;;;;;;;45404:30;;;;;;:44;;;45521:30;;:17;:30;;;;;:43;;;45282:328;-1:-1:-1;45706:26:0;;;;:17;:26;;;;;;;;45699:33;;;-1:-1:-1;;;;;45750:18:0;;;;;:12;:18;;;;;:34;;;;;;;45743:41;44804:988::o;46087:1079::-;46365:10;:17;46340:22;;46365:21;;46385:1;;46365:21;:::i;:::-;46397:18;46418:24;;;:15;:24;;;;;;46791:10;:26;;46340:46;;-1:-1:-1;46418:24:0;;46340:46;;46791:26;;;;;;:::i;:::-;;;;;;;;;46769:48;;46855:11;46830:10;46841;46830:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;46935:28;;;:15;:28;;;;;;;:41;;;47107:24;;;;;47100:31;47142:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;46158:1008;;;46087:1079;:::o;43591:221::-;43676:14;43693:20;43710:2;43693:16;:20::i;:::-;-1:-1:-1;;;;;43724:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;43769:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;43591:221:0:o;34653:321::-;34783:18;34789:2;34793:7;34783:5;:18::i;:::-;34834:54;34865:1;34869:2;34873:7;34882:5;34834:22;:54::i;:::-;34812:154;;;;-1:-1:-1;;;34812:154:0;;;;;;;:::i;35310:382::-;-1:-1:-1;;;;;35390:16:0;;35382:61;;;;-1:-1:-1;;;35382:61:0;;24833:2:1;35382:61:0;;;24815:21:1;;;24852:18;;;24845:30;24911:34;24891:18;;;24884:62;24963:18;;35382:61:0;24631:356:1;35382:61:0;33397:4;33421:16;;;:7;:16;;;;;;-1:-1:-1;;;;;33421:16:0;:30;35454:58;;;;-1:-1:-1;;;35454:58:0;;25194:2:1;35454:58:0;;;25176:21:1;25233:2;25213:18;;;25206:30;25272;25252:18;;;25245:58;25320:18;;35454:58:0;24992:352:1;35454:58:0;35525:45;35554:1;35558:2;35562:7;35525:20;:45::i;:::-;-1:-1:-1;;;;;35583:13:0;;;;;;:9;:13;;;;;:18;;35600:1;;35583:13;:18;;35600:1;;35583:18;:::i;:::-;;;;-1:-1:-1;;35612:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;35612:21:0;-1:-1:-1;;;;;35612:21:0;;;;;;;;35651:33;;35612:16;;;35651:33;;35612:16;;35651:33;35310:382;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;688:258::-;760:1;770:113;784:6;781:1;778:13;770:113;;;860:11;;;854:18;841:11;;;834:39;806:2;799:10;770:113;;;901:6;898:1;895:13;892:48;;;-1:-1:-1;;936:1:1;918:16;;911:27;688:258::o;951:::-;993:3;1031:5;1025:12;1058:6;1053:3;1046:19;1074:63;1130:6;1123:4;1118:3;1114:14;1107:4;1100:5;1096:16;1074:63;:::i;:::-;1191:2;1170:15;-1:-1:-1;;1166:29:1;1157:39;;;;1198:4;1153:50;;951:258;-1:-1:-1;;951:258:1:o;1214:220::-;1363:2;1352:9;1345:21;1326:4;1383:45;1424:2;1413:9;1409:18;1401:6;1383:45;:::i;1439:180::-;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:52;;;1567:1;1564;1557:12;1519:52;-1:-1:-1;1590:23:1;;1439:180;-1:-1:-1;1439:180:1:o;1832:173::-;1900:20;;-1:-1:-1;;;;;1949:31:1;;1939:42;;1929:70;;1995:1;1992;1985:12;1929:70;1832:173;;;:::o;2010:254::-;2078:6;2086;2139:2;2127:9;2118:7;2114:23;2110:32;2107:52;;;2155:1;2152;2145:12;2107:52;2178:29;2197:9;2178:29;:::i;:::-;2168:39;2254:2;2239:18;;;;2226:32;;-1:-1:-1;;;2010:254:1:o;2269:276::-;2327:6;2380:2;2368:9;2359:7;2355:23;2351:32;2348:52;;;2396:1;2393;2386:12;2348:52;2435:9;2422:23;2485:10;2478:5;2474:22;2467:5;2464:33;2454:61;;2511:1;2508;2501:12;2732:328;2809:6;2817;2825;2878:2;2866:9;2857:7;2853:23;2849:32;2846:52;;;2894:1;2891;2884:12;2846:52;2917:29;2936:9;2917:29;:::i;:::-;2907:39;;2965:38;2999:2;2988:9;2984:18;2965:38;:::i;:::-;2955:48;;3050:2;3039:9;3035:18;3022:32;3012:42;;2732:328;;;;;:::o;3339:335::-;3430:5;3453:1;3463:205;3477:4;3474:1;3471:11;3463:205;;;3540:13;;3555:4;3536:24;3524:37;;3584:4;3608:12;;;;3643:15;;;;3497:1;3490:9;3463:205;;3679:1359;3899:13;;3141:10;3130:22;3118:35;;3867:4;3852:20;;3971:4;3963:6;3959:17;3953:24;3986:53;4033:4;4022:9;4018:20;4004:12;3141:10;3130:22;3118:35;;3065:94;3986:53;;4088:4;4080:6;4076:17;4070:24;4103:55;4152:4;4141:9;4137:20;4121:14;3141:10;3130:22;3118:35;;3065:94;4103:55;;4207:4;4199:6;4195:17;4189:24;4222:55;4271:4;4260:9;4256:20;4240:14;3141:10;3130:22;3118:35;;3065:94;4222:55;;4326:4;4318:6;4314:17;4308:24;4341:54;4389:4;4378:9;4374:20;4358:14;3231:4;3220:16;3208:29;;3164:75;4341:54;;4444:4;4436:6;4432:17;4426:24;4459:55;4508:4;4497:9;4493:20;4477:14;3320:6;3309:18;3297:31;;3244:90;4459:55;;4563:4;4555:6;4551:17;4545:24;4578:54;4626:4;4615:9;4611:20;4595:14;3231:4;3220:16;3208:29;;3164:75;4578:54;;4681:4;4673:6;4669:17;4663:24;4696:53;4743:4;4732:9;4728:20;4712:14;470:13;463:21;451:34;;400:91;4696:53;-1:-1:-1;4768:6:1;4811:15;;;4805:22;470:13;463:21;4868:18;;;451:34;4906:6;4949:15;;;4943:22;4974:58;5013:18;;;4943:22;4974:58;:::i;:::-;;;3679:1359;;;;:::o;5043:269::-;5100:6;5153:2;5141:9;5132:7;5128:23;5124:32;5121:52;;;5169:1;5166;5159:12;5121:52;5208:9;5195:23;5258:4;5251:5;5247:16;5240:5;5237:27;5227:55;;5278:1;5275;5268:12;5317:186;5376:6;5429:2;5417:9;5408:7;5404:23;5400:32;5397:52;;;5445:1;5442;5435:12;5397:52;5468:29;5487:9;5468:29;:::i;5508:632::-;5679:2;5731:21;;;5801:13;;5704:18;;;5823:22;;;5650:4;;5679:2;5902:15;;;;5876:2;5861:18;;;5650:4;5945:169;5959:6;5956:1;5953:13;5945:169;;;6020:13;;6008:26;;6089:15;;;;6054:12;;;;5981:1;5974:9;5945:169;;;-1:-1:-1;6131:3:1;;5508:632;-1:-1:-1;;;;;;5508:632:1:o;6145:118::-;6231:5;6224:13;6217:21;6210:5;6207:32;6197:60;;6253:1;6250;6243:12;6268:241;6324:6;6377:2;6365:9;6356:7;6352:23;6348:32;6345:52;;;6393:1;6390;6383:12;6345:52;6432:9;6419:23;6451:28;6473:5;6451:28;:::i;6514:615::-;6600:6;6608;6661:2;6649:9;6640:7;6636:23;6632:32;6629:52;;;6677:1;6674;6667:12;6629:52;6717:9;6704:23;6746:18;6787:2;6779:6;6776:14;6773:34;;;6803:1;6800;6793:12;6773:34;6841:6;6830:9;6826:22;6816:32;;6886:7;6879:4;6875:2;6871:13;6867:27;6857:55;;6908:1;6905;6898:12;6857:55;6948:2;6935:16;6974:2;6966:6;6963:14;6960:34;;;6990:1;6987;6980:12;6960:34;7043:7;7038:2;7028:6;7025:1;7021:14;7017:2;7013:23;7009:32;7006:45;7003:65;;;7064:1;7061;7054:12;7003:65;7095:2;7087:11;;;;;7117:6;;-1:-1:-1;6514:615:1;;-1:-1:-1;;;;6514:615:1:o;7134:127::-;7195:10;7190:3;7186:20;7183:1;7176:31;7226:4;7223:1;7216:15;7250:4;7247:1;7240:15;7266:632;7331:5;7361:18;7402:2;7394:6;7391:14;7388:40;;;7408:18;;:::i;:::-;7483:2;7477:9;7451:2;7537:15;;-1:-1:-1;;7533:24:1;;;7559:2;7529:33;7525:42;7513:55;;;7583:18;;;7603:22;;;7580:46;7577:72;;;7629:18;;:::i;:::-;7669:10;7665:2;7658:22;7698:6;7689:15;;7728:6;7720;7713:22;7768:3;7759:6;7754:3;7750:16;7747:25;7744:45;;;7785:1;7782;7775:12;7744:45;7835:6;7830:3;7823:4;7815:6;7811:17;7798:44;7890:1;7883:4;7874:6;7866;7862:19;7858:30;7851:41;;;;7266:632;;;;;:::o;7903:451::-;7972:6;8025:2;8013:9;8004:7;8000:23;7996:32;7993:52;;;8041:1;8038;8031:12;7993:52;8081:9;8068:23;8114:18;8106:6;8103:30;8100:50;;;8146:1;8143;8136:12;8100:50;8169:22;;8222:4;8214:13;;8210:27;-1:-1:-1;8200:55:1;;8251:1;8248;8241:12;8200:55;8274:74;8340:7;8335:2;8322:16;8317:2;8313;8309:11;8274:74;:::i;8359:301::-;8418:6;8471:2;8459:9;8450:7;8446:23;8442:32;8439:52;;;8487:1;8484;8477:12;8439:52;8526:9;8513:23;-1:-1:-1;;;;;8569:5:1;8565:46;8558:5;8555:57;8545:85;;8626:1;8623;8616:12;8665:315;8730:6;8738;8791:2;8779:9;8770:7;8766:23;8762:32;8759:52;;;8807:1;8804;8797:12;8759:52;8830:29;8849:9;8830:29;:::i;:::-;8820:39;;8909:2;8898:9;8894:18;8881:32;8922:28;8944:5;8922:28;:::i;:::-;8969:5;8959:15;;;8665:315;;;;;:::o;8985:667::-;9080:6;9088;9096;9104;9157:3;9145:9;9136:7;9132:23;9128:33;9125:53;;;9174:1;9171;9164:12;9125:53;9197:29;9216:9;9197:29;:::i;:::-;9187:39;;9245:38;9279:2;9268:9;9264:18;9245:38;:::i;:::-;9235:48;;9330:2;9319:9;9315:18;9302:32;9292:42;;9385:2;9374:9;9370:18;9357:32;9412:18;9404:6;9401:30;9398:50;;;9444:1;9441;9434:12;9398:50;9467:22;;9520:4;9512:13;;9508:27;-1:-1:-1;9498:55:1;;9549:1;9546;9539:12;9498:55;9572:74;9638:7;9633:2;9620:16;9615:2;9611;9607:11;9572:74;:::i;:::-;9562:84;;;8985:667;;;;;;;:::o;9657:272::-;9715:6;9768:2;9756:9;9747:7;9743:23;9739:32;9736:52;;;9784:1;9781;9774:12;9736:52;9823:9;9810:23;9873:6;9866:5;9862:18;9855:5;9852:29;9842:57;;9895:1;9892;9885:12;9934:260;10002:6;10010;10063:2;10051:9;10042:7;10038:23;10034:32;10031:52;;;10079:1;10076;10069:12;10031:52;10102:29;10121:9;10102:29;:::i;:::-;10092:39;;10150:38;10184:2;10173:9;10169:18;10150:38;:::i;:::-;10140:48;;9934:260;;;;;:::o;10199:380::-;10278:1;10274:12;;;;10321;;;10342:61;;10396:4;10388:6;10384:17;10374:27;;10342:61;10449:2;10441:6;10438:14;10418:18;10415:38;10412:161;;;10495:10;10490:3;10486:20;10483:1;10476:31;10530:4;10527:1;10520:15;10558:4;10555:1;10548:15;10412:161;;10199:380;;;:::o;11824:356::-;12026:2;12008:21;;;12045:18;;;12038:30;12104:34;12099:2;12084:18;;12077:62;12171:2;12156:18;;11824:356::o;12185:413::-;12387:2;12369:21;;;12426:2;12406:18;;;12399:30;12465:34;12460:2;12445:18;;12438:62;-1:-1:-1;;;12531:2:1;12516:18;;12509:47;12588:3;12573:19;;12185:413::o;13015:127::-;13076:10;13071:3;13067:20;13064:1;13057:31;13107:4;13104:1;13097:15;13131:4;13128:1;13121:15;13147:127;13208:10;13203:3;13199:20;13196:1;13189:31;13239:4;13236:1;13229:15;13263:4;13260:1;13253:15;13279:135;13318:3;-1:-1:-1;;13339:17:1;;13336:43;;;13359:18;;:::i;:::-;-1:-1:-1;13406:1:1;13395:13;;13279:135::o;13419:355::-;13621:2;13603:21;;;13660:2;13640:18;;;13633:30;13699:33;13694:2;13679:18;;13672:61;13765:2;13750:18;;13419:355::o;13986:245::-;14053:6;14106:2;14094:9;14085:7;14081:23;14077:32;14074:52;;;14122:1;14119;14112:12;14074:52;14154:9;14148:16;14173:28;14195:5;14173:28;:::i;14236:184::-;14306:6;14359:2;14347:9;14338:7;14334:23;14330:32;14327:52;;;14375:1;14372;14365:12;14327:52;-1:-1:-1;14398:16:1;;14236:184;-1:-1:-1;14236:184:1:o;14425:315::-;-1:-1:-1;;;;;14600:32:1;;14582:51;;14669:2;14664;14649:18;;14642:30;;;-1:-1:-1;;14689:45:1;;14715:18;;14707:6;14689:45;:::i;14745:404::-;14947:2;14929:21;;;14986:2;14966:18;;;14959:30;15025:34;15020:2;15005:18;;14998:62;-1:-1:-1;;;15091:2:1;15076:18;;15069:38;15139:3;15124:19;;14745:404::o;15503:354::-;15705:2;15687:21;;;15744:2;15724:18;;;15717:30;15783:32;15778:2;15763:18;;15756:60;15848:2;15833:18;;15503:354::o;15862:128::-;15902:3;15933:1;15929:6;15926:1;15923:13;15920:39;;;15939:18;;:::i;:::-;-1:-1:-1;15975:9:1;;15862:128::o;15995:352::-;16197:2;16179:21;;;16236:2;16216:18;;;16209:30;16275;16270:2;16255:18;;16248:58;16338:2;16323:18;;15995:352::o;16352:168::-;16392:7;16458:1;16454;16450:6;16446:14;16443:1;16440:21;16435:1;16428:9;16421:17;16417:45;16414:71;;;16465:18;;:::i;:::-;-1:-1:-1;16505:9:1;;16352:168::o;18520:470::-;18699:3;18737:6;18731:13;18753:53;18799:6;18794:3;18787:4;18779:6;18775:17;18753:53;:::i;:::-;18869:13;;18828:16;;;;18891:57;18869:13;18828:16;18925:4;18913:17;;18891:57;:::i;:::-;18964:20;;18520:470;-1:-1:-1;;;;18520:470:1:o;20630:125::-;20670:4;20698:1;20695;20692:8;20689:34;;;20703:18;;:::i;:::-;-1:-1:-1;20740:9:1;;20630:125::o;20760:204::-;20798:3;20834:4;20831:1;20827:12;20866:4;20863:1;20859:12;20901:3;20895:4;20891:14;20886:3;20883:23;20880:49;;;20909:18;;:::i;:::-;20945:13;;20760:204;-1:-1:-1;;;20760:204:1:o;20969:127::-;21030:10;21025:3;21021:20;21018:1;21011:31;21061:4;21058:1;21051:15;21085:4;21082:1;21075:15;21101:112;21133:1;21159;21149:35;;21164:18;;:::i;:::-;-1:-1:-1;21198:9:1;;21101:112::o;21218:258::-;21257:7;21289:6;21322:2;21319:1;21315:10;21352:2;21349:1;21345:10;21408:3;21404:2;21400:12;21395:3;21392:21;21385:3;21378:11;21371:19;21367:47;21364:73;;;21417:18;;:::i;:::-;21457:13;;21218:258;-1:-1:-1;;;;21218:258:1:o;21481:228::-;21520:3;21548:10;21585:2;21582:1;21578:10;21615:2;21612:1;21608:10;21646:3;21642:2;21638:12;21633:3;21630:21;21627:47;;;21654:18;;:::i;21714:197::-;21752:3;21780:6;21821:2;21814:5;21810:14;21848:2;21839:7;21836:15;21833:41;;;21854:18;;:::i;:::-;21903:1;21890:15;;21714:197;-1:-1:-1;;;21714:197:1:o;21916:178::-;21953:3;21997:4;21990:5;21986:16;22021:7;22011:41;;22032:18;;:::i;:::-;-1:-1:-1;;22068:20:1;;21916:178;-1:-1:-1;;21916:178:1:o;22099:253::-;22139:3;-1:-1:-1;;;;;22228:2:1;22225:1;22221:10;22258:2;22255:1;22251:10;22289:3;22285:2;22281:12;22276:3;22273:21;22270:47;;;22297:18;;:::i;22711:414::-;22913:2;22895:21;;;22952:2;22932:18;;;22925:30;22991:34;22986:2;22971:18;;22964:62;-1:-1:-1;;;23057:2:1;23042:18;;23035:48;23115:3;23100:19;;22711:414::o;23130:120::-;23170:1;23196;23186:35;;23201:18;;:::i;:::-;-1:-1:-1;23235:9:1;;23130:120::o;23751:489::-;-1:-1:-1;;;;;24020:15:1;;;24002:34;;24072:15;;24067:2;24052:18;;24045:43;24119:2;24104:18;;24097:34;;;24167:3;24162:2;24147:18;;24140:31;;;23945:4;;24188:46;;24214:19;;24206:6;24188:46;:::i;:::-;24180:54;23751:489;-1:-1:-1;;;;;;23751:489:1:o;24245:249::-;24314:6;24367:2;24355:9;24346:7;24342:23;24338:32;24335:52;;;24383:1;24380;24373:12;24335:52;24415:9;24409:16;24434:30;24458:5;24434:30;:::i;24499:127::-;24560:10;24555:3;24551:20;24548:1;24541:31;24591:4;24588:1;24581:15;24615:4;24612:1;24605:15

Swarm Source

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