ETH Price: $3,295.21 (-1.05%)

Token

Wienerz (WNRZ)
 

Overview

Max Total Supply

0 WNRZ

Holders

2,715

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
2 WNRZ
0x68150f6f55d52d3ba28290841ffed7d5f61bdd21
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Weinerz

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @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
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 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 (last updated v4.6.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 `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


// OpenZeppelin Contracts (last updated v4.6.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`.
     *
     * 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;

    /**
     * @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 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 the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


// OpenZeppelin Contracts (last updated v4.6.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 overridden 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);

        _afterTokenTransfer(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);

        _afterTokenTransfer(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 from incorrect owner");
        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);

        _afterTokenTransfer(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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

// File: wienerz.sol


/*
 ___       __   ___  _______   ________   _______   ________ ________     
|\  \     |\  \|\  \|\  ___ \ |\   ___  \|\  ___ \ |\   __  \\_____  \    
\ \  \    \ \  \ \  \ \   __/|\ \  \\ \  \ \   __/|\ \  \|\  \|___/  /|   
 \ \  \  __\ \  \ \  \ \  \_|/_\ \  \\ \  \ \  \_|/_\ \   _  _\  /  / /   
  \ \  \|\__\_\  \ \  \ \  \_|\ \ \  \\ \  \ \  \_|\ \ \  \\  \|/  /_/__  
   \ \____________\ \__\ \_______\ \__\\ \__\ \_______\ \__\\ _\\________\
    \|____________|\|__|\|_______|\|__| \|__|\|_______|\|__|\|__\|_______|
                                                                          
*/
pragma solidity 0.8.9;





// Start the contract. Include ERC721, Ownable.
contract Weinerz is ERC721, Ownable {

    using Counters for Counters.Counter;
    Counters.Counter private _nextTokenId;

    uint256 public constant TOTAL_WIENERZ = 5000;
    
    uint256 public constant MINT_PRICE = 0.00 ether;

    uint256 public MAX_MINT_PER_WALLET = 1;

    bool public saleIsActive = false;

    string private _baseTokenURI;
    string public baseExtension = ".json";

    // Constructor
    constructor(
      string memory _name,
      string memory _symbol,
      string memory _initBaseURI
    ) ERC721(_name, _symbol) {
       
      setBaseURI(_initBaseURI);
     
      _nextTokenId.increment(); // Start Token Ids at 1
    }

    // This is the new mint function leveraging the counter library
    function mint(address _to) public payable {
        require(saleIsActive, "The Weinerz are still cooking. Come back in a bit!");

        uint256 mintIndex = _nextTokenId.current(); // Get next id to mint
        require(mintIndex <= TOTAL_WIENERZ, "All the Weinerz are gone! Sorry you missed it!");
        require(msg.value >= currentPrice(), "You need more money for these Weinerz, bud.");
        require(balanceOf(_to) < MAX_MINT_PER_WALLET, "You've reached the maximum number of Wienerz you can mint..");

        // increment total minted
        _nextTokenId.increment();
        
        // mint
        _safeMint(_to, mintIndex);
    }

    // for the cooks
    function chefskiss(address chef, uint256 _totaldogs) public onlyOwner {
        uint256 totalwienerz = tokenSupply();
        require(totalwienerz + _totaldogs <= TOTAL_WIENERZ);
        for (uint256 i = 1; i <= _totaldogs; i++) {
            uint256 mintIndex = _nextTokenId.current();

            _nextTokenId.increment();
            _safeMint(chef, mintIndex);
        }
    }

    // Set the price per mint.
    function currentPrice() public pure returns (uint256) {
        return MINT_PRICE;
    }

    // Check how many weinerz are left
    function remainingSupply() public view returns (uint256) {
        uint256 numberMinted = tokenSupply();
        return TOTAL_WIENERZ - numberMinted;
    }

    // Display total weinerz left..
    function tokenSupply() public view returns (uint256) {
        return _nextTokenId.current() - 1;
    }

    // I'm all about that base, 'bout that baseURI
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    // All your base, are belong to us.
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }
    // Set Token URI for grabbing metadata URLs.
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
      require(
        _exists(tokenId),
        "ERC721Metadata: URI query for nonexistent token"
      );

      string memory currentBaseURI = _baseURI();
      return bytes(currentBaseURI).length > 0
          ? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension))
          : "";
    }
    // Enable or disable sale.
    function toggleWienerzSale() public onlyOwner {
        saleIsActive = !saleIsActive;
    }

    // update max mint per wallet
    function updateMaxMintsPerWallet(uint256 _newMax) public onlyOwner {
        MAX_MINT_PER_WALLET = _newMax;
    }

    // I'm going through withdrawals.. *shivers*
    function withdrawBalance() public onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_WIENERZ","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"chef","type":"address"},{"internalType":"uint256","name":"_totaldogs","type":"uint256"}],"name":"chefskiss","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[],"name":"toggleWienerzSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenSupply","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":[{"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":"uint256","name":"_newMax","type":"uint256"}],"name":"updateMaxMintsPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawBalance","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016008556000600960006101000a81548160ff0219169083151502179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b908051906020019062000071929190620002e5565b503480156200007f57600080fd5b506040516200406b3803806200406b8339818101604052810190620000a5919062000532565b82828160009080519060200190620000bf929190620002e5565b508060019080519060200190620000d8929190620002e5565b505050620000fb620000ef6200012c60201b60201c565b6200013460201b60201c565b6200010c81620001fa60201b60201c565b620001236007620002a560201b620015921760201c565b505050620006d3565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200020a6200012c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000230620002bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000280906200064c565b60405180910390fd5b80600a9080519060200190620002a1929190620002e5565b5050565b6001816000016000828254019250508190555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620002f3906200069d565b90600052602060002090601f01602090048101928262000317576000855562000363565b82601f106200033257805160ff191683800117855562000363565b8280016001018555821562000363579182015b828111156200036257825182559160200191906001019062000345565b5b50905062000372919062000376565b5090565b5b808211156200039157600081600090555060010162000377565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003fe82620003b3565b810181811067ffffffffffffffff8211171562000420576200041f620003c4565b5b80604052505050565b60006200043562000395565b9050620004438282620003f3565b919050565b600067ffffffffffffffff821115620004665762000465620003c4565b5b6200047182620003b3565b9050602081019050919050565b60005b838110156200049e57808201518184015260208101905062000481565b83811115620004ae576000848401525b50505050565b6000620004cb620004c58462000448565b62000429565b905082815260208101848484011115620004ea57620004e9620003ae565b5b620004f78482856200047e565b509392505050565b600082601f830112620005175762000516620003a9565b5b815162000529848260208601620004b4565b91505092915050565b6000806000606084860312156200054e576200054d6200039f565b5b600084015167ffffffffffffffff8111156200056f576200056e620003a4565b5b6200057d86828701620004ff565b935050602084015167ffffffffffffffff811115620005a157620005a0620003a4565b5b620005af86828701620004ff565b925050604084015167ffffffffffffffff811115620005d357620005d2620003a4565b5b620005e186828701620004ff565b9150509250925092565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000634602083620005eb565b91506200064182620005fc565b602082019050919050565b60006020820190508181036000830152620006678162000625565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006b657607f821691505b60208210811415620006cd57620006cc6200066e565b5b50919050565b61398880620006e36000396000f3fe6080604052600436106101cd5760003560e01c8063950ab25c116100f7578063c668286211610095578063da0239a611610064578063da0239a61461062f578063e985e9c51461065a578063eb8d244414610697578063f2fde38b146106c2576101cd565b8063c668286214610575578063c87b56dd146105a0578063ca67bf64146105dd578063d5a6c7b714610606576101cd565b8063a22cb465116100d1578063a22cb465146104cd578063b19960e6146104f6578063b88d4fde14610521578063c002d23d1461054a576101cd565b8063950ab25c1461046057806395d89b41146104775780639d1b464a146104a2576101cd565b80635fd8c7101161016f578063715018a61161013e578063715018a6146103c85780637824407f146103df5780638425ed741461040a5780638da5cb5b14610435576101cd565b80635fd8c7101461031b5780636352211e146103325780636a6278421461036f57806370a082311461038b576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806323b872dd146102a057806342842e0e146102c957806355f804b3146102f2576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061243a565b6106eb565b6040516102069190612482565b60405180910390f35b34801561021b57600080fd5b506102246107cd565b6040516102319190612536565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061258e565b61085f565b60405161026e91906125fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612643565b6108e4565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612683565b6109fc565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612683565b610a5c565b005b3480156102fe57600080fd5b506103196004803603810190610314919061280b565b610a7c565b005b34801561032757600080fd5b50610330610b12565b005b34801561033e57600080fd5b506103596004803603810190610354919061258e565b610bd7565b60405161036691906125fc565b60405180910390f35b61038960048036038101906103849190612854565b610c89565b005b34801561039757600080fd5b506103b260048036038101906103ad9190612854565b610dd9565b6040516103bf9190612890565b60405180910390f35b3480156103d457600080fd5b506103dd610e91565b005b3480156103eb57600080fd5b506103f4610f19565b6040516104019190612890565b60405180910390f35b34801561041657600080fd5b5061041f610f36565b60405161042c9190612890565b60405180910390f35b34801561044157600080fd5b5061044a610f3c565b60405161045791906125fc565b60405180910390f35b34801561046c57600080fd5b50610475610f66565b005b34801561048357600080fd5b5061048c61100e565b6040516104999190612536565b60405180910390f35b3480156104ae57600080fd5b506104b76110a0565b6040516104c49190612890565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906128d7565b6110a5565b005b34801561050257600080fd5b5061050b6110bb565b6040516105189190612890565b60405180910390f35b34801561052d57600080fd5b50610548600480360381019061054391906129b8565b6110c1565b005b34801561055657600080fd5b5061055f611123565b60405161056c9190612890565b60405180910390f35b34801561058157600080fd5b5061058a611128565b6040516105979190612536565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061258e565b6111b6565b6040516105d49190612536565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190612643565b611260565b005b34801561061257600080fd5b5061062d6004803603810190610628919061258e565b61134c565b005b34801561063b57600080fd5b506106446113d2565b6040516106519190612890565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190612a3b565b6113f3565b60405161068e9190612482565b60405180910390f35b3480156106a357600080fd5b506106ac611487565b6040516106b99190612482565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612854565b61149a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107c657506107c5826115a8565b5b9050919050565b6060600080546107dc90612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461080890612aaa565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a82611612565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090612b4e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610bd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095790612be0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f61167e565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a861167e565b6113f3565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612c72565b60405180910390fd5b6109f78383611686565b505050565b610a0d610a0761167e565b8261173f565b610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390612d04565b60405180910390fd5b610a5783838361181d565b505050565b610a77838383604051806020016040528060008152506110c1565b505050565b610a8461167e565b73ffffffffffffffffffffffffffffffffffffffff16610aa2610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90612d70565b60405180910390fd5b80600a9080519060200190610b0e92919061232b565b5050565b610b1a61167e565b73ffffffffffffffffffffffffffffffffffffffff16610b38610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612d70565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bd4573d6000803e3d6000fd5b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612e02565b60405180910390fd5b80915050919050565b600960009054906101000a900460ff16610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90612e94565b60405180910390fd5b6000610ce46007611a84565b9050611388811115610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290612f26565b60405180910390fd5b610d336110a0565b341015610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90612fb8565b60405180910390fd5b600854610d8183610dd9565b10610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061304a565b60405180910390fd5b610dcb6007611592565b610dd58282611a92565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906130dc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9961167e565b73ffffffffffffffffffffffffffffffffffffffff16610eb7610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490612d70565b60405180910390fd5b610f176000611ab0565b565b60006001610f276007611a84565b610f31919061312b565b905090565b61138881565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f6e61167e565b73ffffffffffffffffffffffffffffffffffffffff16610f8c610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612d70565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60606001805461101d90612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461104990612aaa565b80156110965780601f1061106b57610100808354040283529160200191611096565b820191906000526020600020905b81548152906001019060200180831161107957829003601f168201915b5050505050905090565b600090565b6110b76110b061167e565b8383611b76565b5050565b60085481565b6110d26110cc61167e565b8361173f565b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890612d04565b60405180910390fd5b61111d84848484611ce3565b50505050565b600081565b600b805461113590612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116190612aaa565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b505050505081565b60606111c182611612565b611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906131d1565b60405180910390fd5b600061120a611d3f565b9050600081511161122a5760405180602001604052806000815250611258565b8061123484611dd1565b600b604051602001611248939291906132c1565b6040516020818303038152906040525b915050919050565b61126861167e565b73ffffffffffffffffffffffffffffffffffffffff16611286610f3c565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390612d70565b60405180910390fd5b60006112e6610f19565b905061138882826112f791906132f2565b111561130257600080fd5b6000600190505b82811161134657600061131c6007611a84565b90506113286007611592565b6113328582611a92565b50808061133e90613348565b915050611309565b50505050565b61135461167e565b73ffffffffffffffffffffffffffffffffffffffff16611372610f3c565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90612d70565b60405180910390fd5b8060088190555050565b6000806113dd610f19565b9050806113886113ed919061312b565b91505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900460ff1681565b6114a261167e565b73ffffffffffffffffffffffffffffffffffffffff166114c0610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90612d70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90613403565b60405180910390fd5b61158f81611ab0565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116f983610bd7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174a82611612565b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090613495565b60405180910390fd5b600061179483610bd7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117d657506117d581856113f3565b5b8061181457508373ffffffffffffffffffffffffffffffffffffffff166117fc8461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661183d82610bd7565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613527565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906135b9565b60405180910390fd5b61190e838383611f32565b611919600082611686565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611969919061312b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c091906132f2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a7f838383611f37565b505050565b600081600001549050919050565b611aac828260405180602001604052806000815250611f3c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613625565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cd69190612482565b60405180910390a3505050565b611cee84848461181d565b611cfa84848484611f97565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906136b7565b60405180910390fd5b50505050565b6060600a8054611d4e90612aaa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7a90612aaa565b8015611dc75780601f10611d9c57610100808354040283529160200191611dc7565b820191906000526020600020905b815481529060010190602001808311611daa57829003601f168201915b5050505050905090565b60606000821415611e19576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f2d565b600082905060005b60008214611e4b578080611e3490613348565b915050600a82611e449190613706565b9150611e21565b60008167ffffffffffffffff811115611e6757611e666126e0565b5b6040519080825280601f01601f191660200182016040528015611e995781602001600182028036833780820191505090505b5090505b60008514611f2657600182611eb2919061312b565b9150600a85611ec19190613737565b6030611ecd91906132f2565b60f81b818381518110611ee357611ee2613768565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f1f9190613706565b9450611e9d565b8093505050505b919050565b505050565b505050565b611f46838361212e565b611f536000848484611f97565b611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f89906136b7565b60405180910390fd5b505050565b6000611fb88473ffffffffffffffffffffffffffffffffffffffff16612308565b15612121578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe161167e565b8786866040518563ffffffff1660e01b815260040161200394939291906137ec565b602060405180830381600087803b15801561201d57600080fd5b505af192505050801561204e57506040513d601f19601f8201168201806040525081019061204b919061384d565b60015b6120d1573d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b506000815114156120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c0906136b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612126565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612195906138c6565b60405180910390fd5b6121a781611612565b156121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90613932565b60405180910390fd5b6121f360008383611f32565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461224391906132f2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461230460008383611f37565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461233790612aaa565b90600052602060002090601f01602090048101928261235957600085556123a0565b82601f1061237257805160ff19168380011785556123a0565b828001600101855582156123a0579182015b8281111561239f578251825591602001919060010190612384565b5b5090506123ad91906123b1565b5090565b5b808211156123ca5760008160009055506001016123b2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612417816123e2565b811461242257600080fd5b50565b6000813590506124348161240e565b92915050565b6000602082840312156124505761244f6123d8565b5b600061245e84828501612425565b91505092915050565b60008115159050919050565b61247c81612467565b82525050565b60006020820190506124976000830184612473565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124d75780820151818401526020810190506124bc565b838111156124e6576000848401525b50505050565b6000601f19601f8301169050919050565b60006125088261249d565b61251281856124a8565b93506125228185602086016124b9565b61252b816124ec565b840191505092915050565b6000602082019050818103600083015261255081846124fd565b905092915050565b6000819050919050565b61256b81612558565b811461257657600080fd5b50565b60008135905061258881612562565b92915050565b6000602082840312156125a4576125a36123d8565b5b60006125b284828501612579565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e6826125bb565b9050919050565b6125f6816125db565b82525050565b600060208201905061261160008301846125ed565b92915050565b612620816125db565b811461262b57600080fd5b50565b60008135905061263d81612617565b92915050565b6000806040838503121561265a576126596123d8565b5b60006126688582860161262e565b925050602061267985828601612579565b9150509250929050565b60008060006060848603121561269c5761269b6123d8565b5b60006126aa8682870161262e565b93505060206126bb8682870161262e565b92505060406126cc86828701612579565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612718826124ec565b810181811067ffffffffffffffff82111715612737576127366126e0565b5b80604052505050565b600061274a6123ce565b9050612756828261270f565b919050565b600067ffffffffffffffff821115612776576127756126e0565b5b61277f826124ec565b9050602081019050919050565b82818337600083830152505050565b60006127ae6127a98461275b565b612740565b9050828152602081018484840111156127ca576127c96126db565b5b6127d584828561278c565b509392505050565b600082601f8301126127f2576127f16126d6565b5b813561280284826020860161279b565b91505092915050565b600060208284031215612821576128206123d8565b5b600082013567ffffffffffffffff81111561283f5761283e6123dd565b5b61284b848285016127dd565b91505092915050565b60006020828403121561286a576128696123d8565b5b60006128788482850161262e565b91505092915050565b61288a81612558565b82525050565b60006020820190506128a56000830184612881565b92915050565b6128b481612467565b81146128bf57600080fd5b50565b6000813590506128d1816128ab565b92915050565b600080604083850312156128ee576128ed6123d8565b5b60006128fc8582860161262e565b925050602061290d858286016128c2565b9150509250929050565b600067ffffffffffffffff821115612932576129316126e0565b5b61293b826124ec565b9050602081019050919050565b600061295b61295684612917565b612740565b905082815260208101848484011115612977576129766126db565b5b61298284828561278c565b509392505050565b600082601f83011261299f5761299e6126d6565b5b81356129af848260208601612948565b91505092915050565b600080600080608085870312156129d2576129d16123d8565b5b60006129e08782880161262e565b94505060206129f18782880161262e565b9350506040612a0287828801612579565b925050606085013567ffffffffffffffff811115612a2357612a226123dd565b5b612a2f8782880161298a565b91505092959194509250565b60008060408385031215612a5257612a516123d8565b5b6000612a608582860161262e565b9250506020612a718582860161262e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ac257607f821691505b60208210811415612ad657612ad5612a7b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b38602c836124a8565b9150612b4382612adc565b604082019050919050565b60006020820190508181036000830152612b6781612b2b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bca6021836124a8565b9150612bd582612b6e565b604082019050919050565b60006020820190508181036000830152612bf981612bbd565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c5c6038836124a8565b9150612c6782612c00565b604082019050919050565b60006020820190508181036000830152612c8b81612c4f565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612cee6031836124a8565b9150612cf982612c92565b604082019050919050565b60006020820190508181036000830152612d1d81612ce1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d5a6020836124a8565b9150612d6582612d24565b602082019050919050565b60006020820190508181036000830152612d8981612d4d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612dec6029836124a8565b9150612df782612d90565b604082019050919050565b60006020820190508181036000830152612e1b81612ddf565b9050919050565b7f546865205765696e65727a20617265207374696c6c20636f6f6b696e672e204360008201527f6f6d65206261636b20696e206120626974210000000000000000000000000000602082015250565b6000612e7e6032836124a8565b9150612e8982612e22565b604082019050919050565b60006020820190508181036000830152612ead81612e71565b9050919050565b7f416c6c20746865205765696e65727a2061726520676f6e652120536f7272792060008201527f796f75206d697373656420697421000000000000000000000000000000000000602082015250565b6000612f10602e836124a8565b9150612f1b82612eb4565b604082019050919050565b60006020820190508181036000830152612f3f81612f03565b9050919050565b7f596f75206e656564206d6f7265206d6f6e657920666f7220746865736520576560008201527f696e65727a2c206275642e000000000000000000000000000000000000000000602082015250565b6000612fa2602b836124a8565b9150612fad82612f46565b604082019050919050565b60006020820190508181036000830152612fd181612f95565b9050919050565b7f596f75277665207265616368656420746865206d6178696d756d206e756d626560008201527f72206f66205769656e65727a20796f752063616e206d696e742e2e0000000000602082015250565b6000613034603b836124a8565b915061303f82612fd8565b604082019050919050565b6000602082019050818103600083015261306381613027565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006130c6602a836124a8565b91506130d18261306a565b604082019050919050565b600060208201905081810360008301526130f5816130b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061313682612558565b915061314183612558565b925082821015613154576131536130fc565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006131bb602f836124a8565b91506131c68261315f565b604082019050919050565b600060208201905081810360008301526131ea816131ae565b9050919050565b600081905092915050565b60006132078261249d565b61321181856131f1565b93506132218185602086016124b9565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461324f81612aaa565b61325981866131f1565b945060018216600081146132745760018114613285576132b8565b60ff198316865281860193506132b8565b61328e8561322d565b60005b838110156132b057815481890152600182019150602081019050613291565b838801955050505b50505092915050565b60006132cd82866131fc565b91506132d982856131fc565b91506132e58284613242565b9150819050949350505050565b60006132fd82612558565b915061330883612558565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561333d5761333c6130fc565b5b828201905092915050565b600061335382612558565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613386576133856130fc565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133ed6026836124a8565b91506133f882613391565b604082019050919050565b6000602082019050818103600083015261341c816133e0565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061347f602c836124a8565b915061348a82613423565b604082019050919050565b600060208201905081810360008301526134ae81613472565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006135116025836124a8565b915061351c826134b5565b604082019050919050565b6000602082019050818103600083015261354081613504565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135a36024836124a8565b91506135ae82613547565b604082019050919050565b600060208201905081810360008301526135d281613596565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061360f6019836124a8565b915061361a826135d9565b602082019050919050565b6000602082019050818103600083015261363e81613602565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006136a16032836124a8565b91506136ac82613645565b604082019050919050565b600060208201905081810360008301526136d081613694565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061371182612558565b915061371c83612558565b92508261372c5761372b6136d7565b5b828204905092915050565b600061374282612558565b915061374d83612558565b92508261375d5761375c6136d7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006137be82613797565b6137c881856137a2565b93506137d88185602086016124b9565b6137e1816124ec565b840191505092915050565b600060808201905061380160008301876125ed565b61380e60208301866125ed565b61381b6040830185612881565b818103606083015261382d81846137b3565b905095945050505050565b6000815190506138478161240e565b92915050565b600060208284031215613863576138626123d8565b5b600061387184828501613838565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138b06020836124a8565b91506138bb8261387a565b602082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061391c601c836124a8565b9150613927826138e6565b602082019050919050565b6000602082019050818103600083015261394b8161390f565b905091905056fea264697066735822122022e1236f7608af7714e2801ef2d412be7eb3987006ad8d8906b64a59a1ac821a64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000075769656e65727a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574e525a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003468747470733a2f2f7769656e65727a2e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f6d657461646174612f000000000000000000000000

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c8063950ab25c116100f7578063c668286211610095578063da0239a611610064578063da0239a61461062f578063e985e9c51461065a578063eb8d244414610697578063f2fde38b146106c2576101cd565b8063c668286214610575578063c87b56dd146105a0578063ca67bf64146105dd578063d5a6c7b714610606576101cd565b8063a22cb465116100d1578063a22cb465146104cd578063b19960e6146104f6578063b88d4fde14610521578063c002d23d1461054a576101cd565b8063950ab25c1461046057806395d89b41146104775780639d1b464a146104a2576101cd565b80635fd8c7101161016f578063715018a61161013e578063715018a6146103c85780637824407f146103df5780638425ed741461040a5780638da5cb5b14610435576101cd565b80635fd8c7101461031b5780636352211e146103325780636a6278421461036f57806370a082311461038b576101cd565b8063095ea7b3116101ab578063095ea7b31461027757806323b872dd146102a057806342842e0e146102c957806355f804b3146102f2576101cd565b806301ffc9a7146101d257806306fdde031461020f578063081812fc1461023a575b600080fd5b3480156101de57600080fd5b506101f960048036038101906101f4919061243a565b6106eb565b6040516102069190612482565b60405180910390f35b34801561021b57600080fd5b506102246107cd565b6040516102319190612536565b60405180910390f35b34801561024657600080fd5b50610261600480360381019061025c919061258e565b61085f565b60405161026e91906125fc565b60405180910390f35b34801561028357600080fd5b5061029e60048036038101906102999190612643565b6108e4565b005b3480156102ac57600080fd5b506102c760048036038101906102c29190612683565b6109fc565b005b3480156102d557600080fd5b506102f060048036038101906102eb9190612683565b610a5c565b005b3480156102fe57600080fd5b506103196004803603810190610314919061280b565b610a7c565b005b34801561032757600080fd5b50610330610b12565b005b34801561033e57600080fd5b506103596004803603810190610354919061258e565b610bd7565b60405161036691906125fc565b60405180910390f35b61038960048036038101906103849190612854565b610c89565b005b34801561039757600080fd5b506103b260048036038101906103ad9190612854565b610dd9565b6040516103bf9190612890565b60405180910390f35b3480156103d457600080fd5b506103dd610e91565b005b3480156103eb57600080fd5b506103f4610f19565b6040516104019190612890565b60405180910390f35b34801561041657600080fd5b5061041f610f36565b60405161042c9190612890565b60405180910390f35b34801561044157600080fd5b5061044a610f3c565b60405161045791906125fc565b60405180910390f35b34801561046c57600080fd5b50610475610f66565b005b34801561048357600080fd5b5061048c61100e565b6040516104999190612536565b60405180910390f35b3480156104ae57600080fd5b506104b76110a0565b6040516104c49190612890565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef91906128d7565b6110a5565b005b34801561050257600080fd5b5061050b6110bb565b6040516105189190612890565b60405180910390f35b34801561052d57600080fd5b50610548600480360381019061054391906129b8565b6110c1565b005b34801561055657600080fd5b5061055f611123565b60405161056c9190612890565b60405180910390f35b34801561058157600080fd5b5061058a611128565b6040516105979190612536565b60405180910390f35b3480156105ac57600080fd5b506105c760048036038101906105c2919061258e565b6111b6565b6040516105d49190612536565b60405180910390f35b3480156105e957600080fd5b5061060460048036038101906105ff9190612643565b611260565b005b34801561061257600080fd5b5061062d6004803603810190610628919061258e565b61134c565b005b34801561063b57600080fd5b506106446113d2565b6040516106519190612890565b60405180910390f35b34801561066657600080fd5b50610681600480360381019061067c9190612a3b565b6113f3565b60405161068e9190612482565b60405180910390f35b3480156106a357600080fd5b506106ac611487565b6040516106b99190612482565b60405180910390f35b3480156106ce57600080fd5b506106e960048036038101906106e49190612854565b61149a565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107b657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107c657506107c5826115a8565b5b9050919050565b6060600080546107dc90612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461080890612aaa565b80156108555780601f1061082a57610100808354040283529160200191610855565b820191906000526020600020905b81548152906001019060200180831161083857829003601f168201915b5050505050905090565b600061086a82611612565b6108a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a090612b4e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ef82610bd7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095790612be0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661097f61167e565b73ffffffffffffffffffffffffffffffffffffffff1614806109ae57506109ad816109a861167e565b6113f3565b5b6109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612c72565b60405180910390fd5b6109f78383611686565b505050565b610a0d610a0761167e565b8261173f565b610a4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4390612d04565b60405180910390fd5b610a5783838361181d565b505050565b610a77838383604051806020016040528060008152506110c1565b505050565b610a8461167e565b73ffffffffffffffffffffffffffffffffffffffff16610aa2610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aef90612d70565b60405180910390fd5b80600a9080519060200190610b0e92919061232b565b5050565b610b1a61167e565b73ffffffffffffffffffffffffffffffffffffffff16610b38610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8590612d70565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610bd4573d6000803e3d6000fd5b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790612e02565b60405180910390fd5b80915050919050565b600960009054906101000a900460ff16610cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ccf90612e94565b60405180910390fd5b6000610ce46007611a84565b9050611388811115610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2290612f26565b60405180910390fd5b610d336110a0565b341015610d75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6c90612fb8565b60405180910390fd5b600854610d8183610dd9565b10610dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db89061304a565b60405180910390fd5b610dcb6007611592565b610dd58282611a92565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e41906130dc565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9961167e565b73ffffffffffffffffffffffffffffffffffffffff16610eb7610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0490612d70565b60405180910390fd5b610f176000611ab0565b565b60006001610f276007611a84565b610f31919061312b565b905090565b61138881565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610f6e61167e565b73ffffffffffffffffffffffffffffffffffffffff16610f8c610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990612d70565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60606001805461101d90612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461104990612aaa565b80156110965780601f1061106b57610100808354040283529160200191611096565b820191906000526020600020905b81548152906001019060200180831161107957829003601f168201915b5050505050905090565b600090565b6110b76110b061167e565b8383611b76565b5050565b60085481565b6110d26110cc61167e565b8361173f565b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890612d04565b60405180910390fd5b61111d84848484611ce3565b50505050565b600081565b600b805461113590612aaa565b80601f016020809104026020016040519081016040528092919081815260200182805461116190612aaa565b80156111ae5780601f10611183576101008083540402835291602001916111ae565b820191906000526020600020905b81548152906001019060200180831161119157829003601f168201915b505050505081565b60606111c182611612565b611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906131d1565b60405180910390fd5b600061120a611d3f565b9050600081511161122a5760405180602001604052806000815250611258565b8061123484611dd1565b600b604051602001611248939291906132c1565b6040516020818303038152906040525b915050919050565b61126861167e565b73ffffffffffffffffffffffffffffffffffffffff16611286610f3c565b73ffffffffffffffffffffffffffffffffffffffff16146112dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d390612d70565b60405180910390fd5b60006112e6610f19565b905061138882826112f791906132f2565b111561130257600080fd5b6000600190505b82811161134657600061131c6007611a84565b90506113286007611592565b6113328582611a92565b50808061133e90613348565b915050611309565b50505050565b61135461167e565b73ffffffffffffffffffffffffffffffffffffffff16611372610f3c565b73ffffffffffffffffffffffffffffffffffffffff16146113c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bf90612d70565b60405180910390fd5b8060088190555050565b6000806113dd610f19565b9050806113886113ed919061312b565b91505090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600960009054906101000a900460ff1681565b6114a261167e565b73ffffffffffffffffffffffffffffffffffffffff166114c0610f3c565b73ffffffffffffffffffffffffffffffffffffffff1614611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d90612d70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d90613403565b60405180910390fd5b61158f81611ab0565b50565b6001816000016000828254019250508190555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166116f983610bd7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061174a82611612565b611789576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178090613495565b60405180910390fd5b600061179483610bd7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806117d657506117d581856113f3565b5b8061181457508373ffffffffffffffffffffffffffffffffffffffff166117fc8461085f565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661183d82610bd7565b73ffffffffffffffffffffffffffffffffffffffff1614611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90613527565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611903576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118fa906135b9565b60405180910390fd5b61190e838383611f32565b611919600082611686565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611969919061312b565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119c091906132f2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a7f838383611f37565b505050565b600081600001549050919050565b611aac828260405180602001604052806000815250611f3c565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90613625565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cd69190612482565b60405180910390a3505050565b611cee84848461181d565b611cfa84848484611f97565b611d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d30906136b7565b60405180910390fd5b50505050565b6060600a8054611d4e90612aaa565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7a90612aaa565b8015611dc75780601f10611d9c57610100808354040283529160200191611dc7565b820191906000526020600020905b815481529060010190602001808311611daa57829003601f168201915b5050505050905090565b60606000821415611e19576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f2d565b600082905060005b60008214611e4b578080611e3490613348565b915050600a82611e449190613706565b9150611e21565b60008167ffffffffffffffff811115611e6757611e666126e0565b5b6040519080825280601f01601f191660200182016040528015611e995781602001600182028036833780820191505090505b5090505b60008514611f2657600182611eb2919061312b565b9150600a85611ec19190613737565b6030611ecd91906132f2565b60f81b818381518110611ee357611ee2613768565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f1f9190613706565b9450611e9d565b8093505050505b919050565b505050565b505050565b611f46838361212e565b611f536000848484611f97565b611f92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f89906136b7565b60405180910390fd5b505050565b6000611fb88473ffffffffffffffffffffffffffffffffffffffff16612308565b15612121578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611fe161167e565b8786866040518563ffffffff1660e01b815260040161200394939291906137ec565b602060405180830381600087803b15801561201d57600080fd5b505af192505050801561204e57506040513d601f19601f8201168201806040525081019061204b919061384d565b60015b6120d1573d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b506000815114156120c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c0906136b7565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612126565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561219e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612195906138c6565b60405180910390fd5b6121a781611612565b156121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de90613932565b60405180910390fd5b6121f360008383611f32565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461224391906132f2565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461230460008383611f37565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461233790612aaa565b90600052602060002090601f01602090048101928261235957600085556123a0565b82601f1061237257805160ff19168380011785556123a0565b828001600101855582156123a0579182015b8281111561239f578251825591602001919060010190612384565b5b5090506123ad91906123b1565b5090565b5b808211156123ca5760008160009055506001016123b2565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612417816123e2565b811461242257600080fd5b50565b6000813590506124348161240e565b92915050565b6000602082840312156124505761244f6123d8565b5b600061245e84828501612425565b91505092915050565b60008115159050919050565b61247c81612467565b82525050565b60006020820190506124976000830184612473565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156124d75780820151818401526020810190506124bc565b838111156124e6576000848401525b50505050565b6000601f19601f8301169050919050565b60006125088261249d565b61251281856124a8565b93506125228185602086016124b9565b61252b816124ec565b840191505092915050565b6000602082019050818103600083015261255081846124fd565b905092915050565b6000819050919050565b61256b81612558565b811461257657600080fd5b50565b60008135905061258881612562565b92915050565b6000602082840312156125a4576125a36123d8565b5b60006125b284828501612579565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006125e6826125bb565b9050919050565b6125f6816125db565b82525050565b600060208201905061261160008301846125ed565b92915050565b612620816125db565b811461262b57600080fd5b50565b60008135905061263d81612617565b92915050565b6000806040838503121561265a576126596123d8565b5b60006126688582860161262e565b925050602061267985828601612579565b9150509250929050565b60008060006060848603121561269c5761269b6123d8565b5b60006126aa8682870161262e565b93505060206126bb8682870161262e565b92505060406126cc86828701612579565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612718826124ec565b810181811067ffffffffffffffff82111715612737576127366126e0565b5b80604052505050565b600061274a6123ce565b9050612756828261270f565b919050565b600067ffffffffffffffff821115612776576127756126e0565b5b61277f826124ec565b9050602081019050919050565b82818337600083830152505050565b60006127ae6127a98461275b565b612740565b9050828152602081018484840111156127ca576127c96126db565b5b6127d584828561278c565b509392505050565b600082601f8301126127f2576127f16126d6565b5b813561280284826020860161279b565b91505092915050565b600060208284031215612821576128206123d8565b5b600082013567ffffffffffffffff81111561283f5761283e6123dd565b5b61284b848285016127dd565b91505092915050565b60006020828403121561286a576128696123d8565b5b60006128788482850161262e565b91505092915050565b61288a81612558565b82525050565b60006020820190506128a56000830184612881565b92915050565b6128b481612467565b81146128bf57600080fd5b50565b6000813590506128d1816128ab565b92915050565b600080604083850312156128ee576128ed6123d8565b5b60006128fc8582860161262e565b925050602061290d858286016128c2565b9150509250929050565b600067ffffffffffffffff821115612932576129316126e0565b5b61293b826124ec565b9050602081019050919050565b600061295b61295684612917565b612740565b905082815260208101848484011115612977576129766126db565b5b61298284828561278c565b509392505050565b600082601f83011261299f5761299e6126d6565b5b81356129af848260208601612948565b91505092915050565b600080600080608085870312156129d2576129d16123d8565b5b60006129e08782880161262e565b94505060206129f18782880161262e565b9350506040612a0287828801612579565b925050606085013567ffffffffffffffff811115612a2357612a226123dd565b5b612a2f8782880161298a565b91505092959194509250565b60008060408385031215612a5257612a516123d8565b5b6000612a608582860161262e565b9250506020612a718582860161262e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612ac257607f821691505b60208210811415612ad657612ad5612a7b565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000612b38602c836124a8565b9150612b4382612adc565b604082019050919050565b60006020820190508181036000830152612b6781612b2b565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000612bca6021836124a8565b9150612bd582612b6e565b604082019050919050565b60006020820190508181036000830152612bf981612bbd565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000612c5c6038836124a8565b9150612c6782612c00565b604082019050919050565b60006020820190508181036000830152612c8b81612c4f565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000612cee6031836124a8565b9150612cf982612c92565b604082019050919050565b60006020820190508181036000830152612d1d81612ce1565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612d5a6020836124a8565b9150612d6582612d24565b602082019050919050565b60006020820190508181036000830152612d8981612d4d565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000612dec6029836124a8565b9150612df782612d90565b604082019050919050565b60006020820190508181036000830152612e1b81612ddf565b9050919050565b7f546865205765696e65727a20617265207374696c6c20636f6f6b696e672e204360008201527f6f6d65206261636b20696e206120626974210000000000000000000000000000602082015250565b6000612e7e6032836124a8565b9150612e8982612e22565b604082019050919050565b60006020820190508181036000830152612ead81612e71565b9050919050565b7f416c6c20746865205765696e65727a2061726520676f6e652120536f7272792060008201527f796f75206d697373656420697421000000000000000000000000000000000000602082015250565b6000612f10602e836124a8565b9150612f1b82612eb4565b604082019050919050565b60006020820190508181036000830152612f3f81612f03565b9050919050565b7f596f75206e656564206d6f7265206d6f6e657920666f7220746865736520576560008201527f696e65727a2c206275642e000000000000000000000000000000000000000000602082015250565b6000612fa2602b836124a8565b9150612fad82612f46565b604082019050919050565b60006020820190508181036000830152612fd181612f95565b9050919050565b7f596f75277665207265616368656420746865206d6178696d756d206e756d626560008201527f72206f66205769656e65727a20796f752063616e206d696e742e2e0000000000602082015250565b6000613034603b836124a8565b915061303f82612fd8565b604082019050919050565b6000602082019050818103600083015261306381613027565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006130c6602a836124a8565b91506130d18261306a565b604082019050919050565b600060208201905081810360008301526130f5816130b9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061313682612558565b915061314183612558565b925082821015613154576131536130fc565b5b828203905092915050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006131bb602f836124a8565b91506131c68261315f565b604082019050919050565b600060208201905081810360008301526131ea816131ae565b9050919050565b600081905092915050565b60006132078261249d565b61321181856131f1565b93506132218185602086016124b9565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461324f81612aaa565b61325981866131f1565b945060018216600081146132745760018114613285576132b8565b60ff198316865281860193506132b8565b61328e8561322d565b60005b838110156132b057815481890152600182019150602081019050613291565b838801955050505b50505092915050565b60006132cd82866131fc565b91506132d982856131fc565b91506132e58284613242565b9150819050949350505050565b60006132fd82612558565b915061330883612558565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561333d5761333c6130fc565b5b828201905092915050565b600061335382612558565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613386576133856130fc565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006133ed6026836124a8565b91506133f882613391565b604082019050919050565b6000602082019050818103600083015261341c816133e0565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061347f602c836124a8565b915061348a82613423565b604082019050919050565b600060208201905081810360008301526134ae81613472565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b60006135116025836124a8565b915061351c826134b5565b604082019050919050565b6000602082019050818103600083015261354081613504565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006135a36024836124a8565b91506135ae82613547565b604082019050919050565b600060208201905081810360008301526135d281613596565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061360f6019836124a8565b915061361a826135d9565b602082019050919050565b6000602082019050818103600083015261363e81613602565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006136a16032836124a8565b91506136ac82613645565b604082019050919050565b600060208201905081810360008301526136d081613694565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061371182612558565b915061371c83612558565b92508261372c5761372b6136d7565b5b828204905092915050565b600061374282612558565b915061374d83612558565b92508261375d5761375c6136d7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b60006137be82613797565b6137c881856137a2565b93506137d88185602086016124b9565b6137e1816124ec565b840191505092915050565b600060808201905061380160008301876125ed565b61380e60208301866125ed565b61381b6040830185612881565b818103606083015261382d81846137b3565b905095945050505050565b6000815190506138478161240e565b92915050565b600060208284031215613863576138626123d8565b5b600061387184828501613838565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006138b06020836124a8565b91506138bb8261387a565b602082019050919050565b600060208201905081810360008301526138df816138a3565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061391c601c836124a8565b9150613927826138e6565b602082019050919050565b6000602082019050818103600083015261394b8161390f565b905091905056fea264697066735822122022e1236f7608af7714e2801ef2d412be7eb3987006ad8d8906b64a59a1ac821a64736f6c63430008090033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000075769656e65727a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004574e525a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003468747470733a2f2f7769656e65727a2e73332e75732d656173742d322e616d617a6f6e6177732e636f6d2f6d657461646174612f000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Wienerz
Arg [1] : _symbol (string): WNRZ
Arg [2] : _initBaseURI (string): https://wienerz.s3.us-east-2.amazonaws.com/metadata/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 5769656e65727a00000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [6] : 574e525a00000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000034
Arg [8] : 68747470733a2f2f7769656e65727a2e73332e75732d656173742d322e616d61
Arg [9] : 7a6f6e6177732e636f6d2f6d657461646174612f000000000000000000000000


Deployed Bytecode Sourcemap

39452:3590:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25612:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26557:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28117:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27640:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28867:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29277:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41998:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42923:114;;;;;;;;;;;;;:::i;:::-;;26251:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40213:658;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25981:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6195:103;;;;;;;;;;;;;:::i;:::-;;41672:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39585:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5544:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42614:93;;;;;;;;;;;;;:::i;:::-;;26726:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41331:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28410:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39698:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29533:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39642:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39821:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42156:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40901:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42750:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41469:158;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28636:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39745:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6453:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25612:305;25714:4;25766:25;25751:40;;;:11;:40;;;;:105;;;;25823:33;25808:48;;;:11;:48;;;;25751:105;:158;;;;25873:36;25897:11;25873:23;:36::i;:::-;25751:158;25731:178;;25612:305;;;:::o;26557:100::-;26611:13;26644:5;26637:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26557:100;:::o;28117:221::-;28193:7;28221:16;28229:7;28221;:16::i;:::-;28213:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28306:15;:24;28322:7;28306:24;;;;;;;;;;;;;;;;;;;;;28299:31;;28117:221;;;:::o;27640:411::-;27721:13;27737:23;27752:7;27737:14;:23::i;:::-;27721:39;;27785:5;27779:11;;:2;:11;;;;27771:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27879:5;27863:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27888:37;27905:5;27912:12;:10;:12::i;:::-;27888:16;:37::i;:::-;27863:62;27841:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;28022:21;28031:2;28035:7;28022:8;:21::i;:::-;27710:341;27640:411;;:::o;28867:339::-;29062:41;29081:12;:10;:12::i;:::-;29095:7;29062:18;:41::i;:::-;29054:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29170:28;29180:4;29186:2;29190:7;29170:9;:28::i;:::-;28867:339;;;:::o;29277:185::-;29415:39;29432:4;29438:2;29442:7;29415:39;;;;;;;;;;;;:16;:39::i;:::-;29277:185;;;:::o;41998:102::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42085:7:::1;42069:13;:23;;;;;;;;;;;;:::i;:::-;;41998:102:::0;:::o;42923:114::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42986:10:::1;42978:28;;:51;43007:21;42978:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42923:114::o:0;26251:239::-;26323:7;26343:13;26359:7;:16;26367:7;26359:16;;;;;;;;;;;;;;;;;;;;;26343:32;;26411:1;26394:19;;:5;:19;;;;26386:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26477:5;26470:12;;;26251:239;;;:::o;40213:658::-;40274:12;;;;;;;;;;;40266:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40354:17;40374:22;:12;:20;:22::i;:::-;40354:42;;39625:4;40438:9;:26;;40430:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40547:14;:12;:14::i;:::-;40534:9;:27;;40526:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;40645:19;;40628:14;40638:3;40628:9;:14::i;:::-;:36;40620:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;40776:24;:12;:22;:24::i;:::-;40838:25;40848:3;40853:9;40838;:25::i;:::-;40255:616;40213:658;:::o;25981:208::-;26053:7;26098:1;26081:19;;:5;:19;;;;26073:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26165:9;:16;26175:5;26165:16;;;;;;;;;;;;;;;;26158:23;;25981:208;;;:::o;6195:103::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6260:30:::1;6287:1;6260:18;:30::i;:::-;6195:103::o:0;41672:105::-;41716:7;41768:1;41743:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;41736:33;;41672:105;:::o;39585:44::-;39625:4;39585:44;:::o;5544:87::-;5590:7;5617:6;;;;;;;;;;;5610:13;;5544:87;:::o;42614:93::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42687:12:::1;;;;;;;;;;;42686:13;42671:12;;:28;;;;;;;;;;;;;;;;;;42614:93::o:0;26726:104::-;26782:13;26815:7;26808:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26726:104;:::o;41331:90::-;41376:7;41331:90;:::o;28410:155::-;28505:52;28524:12;:10;:12::i;:::-;28538:8;28548;28505:18;:52::i;:::-;28410:155;;:::o;39698:38::-;;;;:::o;29533:328::-;29708:41;29727:12;:10;:12::i;:::-;29741:7;29708:18;:41::i;:::-;29700:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29814:39;29828:4;29834:2;29838:7;29847:5;29814:13;:39::i;:::-;29533:328;;;;:::o;39642:47::-;39679:10;39642:47;:::o;39821:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42156:420::-;42229:13;42271:16;42279:7;42271;:16::i;:::-;42253:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;42367:28;42398:10;:8;:10::i;:::-;42367:41;;42455:1;42430:14;42424:28;:32;:144;;;;;;;;;;;;;;;;;42494:14;42510:25;42527:7;42510:16;:25::i;:::-;42537:13;42477:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42424:144;42417:151;;;42156:420;;;:::o;40901:390::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40982:20:::1;41005:13;:11;:13::i;:::-;40982:36;;39625:4;41052:10;41037:12;:25;;;;:::i;:::-;:42;;41029:51;;;::::0;::::1;;41096:9;41108:1;41096:13;;41091:193;41116:10;41111:1;:15;41091:193;;41148:17;41168:22;:12;:20;:22::i;:::-;41148:42;;41207:24;:12;:22;:24::i;:::-;41246:26;41256:4;41262:9;41246;:26::i;:::-;41133:151;41128:3;;;;;:::i;:::-;;;;41091:193;;;;40971:320;40901:390:::0;;:::o;42750:115::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42850:7:::1;42828:19;:29;;;;42750:115:::0;:::o;41469:158::-;41517:7;41537:20;41560:13;:11;:13::i;:::-;41537:36;;41607:12;39625:4;41591:28;;;;:::i;:::-;41584:35;;;41469:158;:::o;28636:164::-;28733:4;28757:18;:25;28776:5;28757:25;;;;;;;;;;;;;;;:35;28783:8;28757:35;;;;;;;;;;;;;;;;;;;;;;;;;28750:42;;28636:164;;;;:::o;39745:32::-;;;;;;;;;;;;;:::o;6453:201::-;5775:12;:10;:12::i;:::-;5764:23;;:7;:5;:7::i;:::-;:23;;;5756:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6562:1:::1;6542:22;;:8;:22;;;;6534:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6618:28;6637:8;6618:18;:28::i;:::-;6453:201:::0;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;18351:157::-;18436:4;18475:25;18460:40;;;:11;:40;;;;18453:47;;18351:157;;;:::o;31371:127::-;31436:4;31488:1;31460:30;;:7;:16;31468:7;31460:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31453:37;;31371:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;35517:174::-;35619:2;35592:15;:24;35608:7;35592:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35675:7;35671:2;35637:46;;35646:23;35661:7;35646:14;:23::i;:::-;35637:46;;;;;;;;;;;;35517:174;;:::o;31665:348::-;31758:4;31783:16;31791:7;31783;:16::i;:::-;31775:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31859:13;31875:23;31890:7;31875:14;:23::i;:::-;31859:39;;31928:5;31917:16;;:7;:16;;;:52;;;;31937:32;31954:5;31961:7;31937:16;:32::i;:::-;31917:52;:87;;;;31997:7;31973:31;;:20;31985:7;31973:11;:20::i;:::-;:31;;;31917:87;31909:96;;;31665:348;;;;:::o;34774:625::-;34933:4;34906:31;;:23;34921:7;34906:14;:23::i;:::-;:31;;;34898:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35012:1;34998:16;;:2;:16;;;;34990:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35068:39;35089:4;35095:2;35099:7;35068:20;:39::i;:::-;35172:29;35189:1;35193:7;35172:8;:29::i;:::-;35233:1;35214:9;:15;35224:4;35214:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35262:1;35245:9;:13;35255:2;35245:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35293:2;35274:7;:16;35282:7;35274:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35332:7;35328:2;35313:27;;35322:4;35313:27;;;;;;;;;;;;35353:38;35373:4;35379:2;35383:7;35353:19;:38::i;:::-;34774:625;;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;32355:110::-;32431:26;32441:2;32445:7;32431:26;;;;;;;;;;;;:9;:26::i;:::-;32355:110;;:::o;6814:191::-;6888:16;6907:6;;;;;;;;;;;6888:25;;6933:8;6924:6;;:17;;;;;;;;;;;;;;;;;;6988:8;6957:40;;6978:8;6957:40;;;;;;;;;;;;6877:128;6814:191;:::o;35833:315::-;35988:8;35979:17;;:5;:17;;;;35971:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;36075:8;36037:18;:25;36056:5;36037:25;;;;;;;;;;;;;;;:35;36063:8;36037:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36121:8;36099:41;;36114:5;36099:41;;;36131:8;36099:41;;;;;;:::i;:::-;;;;;;;;35833:315;;;:::o;30743:::-;30900:28;30910:4;30916:2;30920:7;30900:9;:28::i;:::-;30947:48;30970:4;30976:2;30980:7;30989:5;30947:22;:48::i;:::-;30939:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30743:315;;;;:::o;41837:114::-;41897:13;41930;41923:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41837:114;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;38084:126::-;;;;:::o;38595:125::-;;;;:::o;32692:321::-;32822:18;32828:2;32832:7;32822:5;:18::i;:::-;32873:54;32904:1;32908:2;32912:7;32921:5;32873:22;:54::i;:::-;32851:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32692:321;;;:::o;36713:799::-;36868:4;36889:15;:2;:13;;;:15::i;:::-;36885:620;;;36941:2;36925:36;;;36962:12;:10;:12::i;:::-;36976:4;36982:7;36991:5;36925:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36921:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37184:1;37167:6;:13;:18;37163:272;;;37210:60;;;;;;;;;;:::i;:::-;;;;;;;;37163:272;37385:6;37379:13;37370:6;37366:2;37362:15;37355:38;36921:529;37058:41;;;37048:51;;;:6;:51;;;;37041:58;;;;;36885:620;37489:4;37482:11;;36713:799;;;;;;;:::o;33349:439::-;33443:1;33429:16;;:2;:16;;;;33421:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33502:16;33510:7;33502;:16::i;:::-;33501:17;33493:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:45;33593:1;33597:2;33601:7;33564:20;:45::i;:::-;33639:1;33622:9;:13;33632:2;33622:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33670:2;33651:7;:16;33659:7;33651:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33715:7;33711:2;33690:33;;33707:1;33690:33;;;;;;;;;;;;33736:44;33764:1;33768:2;33772:7;33736:19;:44::i;:::-;33349:439;;:::o;8245:326::-;8305:4;8562:1;8540:7;:19;;;:23;8533:30;;8245:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:117::-;5672:1;5669;5662:12;5686:117;5795:1;5792;5785:12;5809:180;5857:77;5854:1;5847:88;5954:4;5951:1;5944:15;5978:4;5975:1;5968:15;5995:281;6078:27;6100:4;6078:27;:::i;:::-;6070:6;6066:40;6208:6;6196:10;6193:22;6172:18;6160:10;6157:34;6154:62;6151:88;;;6219:18;;:::i;:::-;6151:88;6259:10;6255:2;6248:22;6038:238;5995:281;;:::o;6282:129::-;6316:6;6343:20;;:::i;:::-;6333:30;;6372:33;6400:4;6392:6;6372:33;:::i;:::-;6282:129;;;:::o;6417:308::-;6479:4;6569:18;6561:6;6558:30;6555:56;;;6591:18;;:::i;:::-;6555:56;6629:29;6651:6;6629:29;:::i;:::-;6621:37;;6713:4;6707;6703:15;6695:23;;6417:308;;;:::o;6731:154::-;6815:6;6810:3;6805;6792:30;6877:1;6868:6;6863:3;6859:16;6852:27;6731:154;;;:::o;6891:412::-;6969:5;6994:66;7010:49;7052:6;7010:49;:::i;:::-;6994:66;:::i;:::-;6985:75;;7083:6;7076:5;7069:21;7121:4;7114:5;7110:16;7159:3;7150:6;7145:3;7141:16;7138:25;7135:112;;;7166:79;;:::i;:::-;7135:112;7256:41;7290:6;7285:3;7280;7256:41;:::i;:::-;6975:328;6891:412;;;;;:::o;7323:340::-;7379:5;7428:3;7421:4;7413:6;7409:17;7405:27;7395:122;;7436:79;;:::i;:::-;7395:122;7553:6;7540:20;7578:79;7653:3;7645:6;7638:4;7630:6;7626:17;7578:79;:::i;:::-;7569:88;;7385:278;7323:340;;;;:::o;7669:509::-;7738:6;7787:2;7775:9;7766:7;7762:23;7758:32;7755:119;;;7793:79;;:::i;:::-;7755:119;7941:1;7930:9;7926:17;7913:31;7971:18;7963:6;7960:30;7957:117;;;7993:79;;:::i;:::-;7957:117;8098:63;8153:7;8144:6;8133:9;8129:22;8098:63;:::i;:::-;8088:73;;7884:287;7669:509;;;;:::o;8184:329::-;8243:6;8292:2;8280:9;8271:7;8267:23;8263:32;8260:119;;;8298:79;;:::i;:::-;8260:119;8418:1;8443:53;8488:7;8479:6;8468:9;8464:22;8443:53;:::i;:::-;8433:63;;8389:117;8184:329;;;;:::o;8519:118::-;8606:24;8624:5;8606:24;:::i;:::-;8601:3;8594:37;8519:118;;:::o;8643:222::-;8736:4;8774:2;8763:9;8759:18;8751:26;;8787:71;8855:1;8844:9;8840:17;8831:6;8787:71;:::i;:::-;8643:222;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:468::-;9197:6;9205;9254:2;9242:9;9233:7;9229:23;9225:32;9222:119;;;9260:79;;:::i;:::-;9222:119;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:50;9575:7;9566:6;9555:9;9551:22;9533:50;:::i;:::-;9523:60;;9478:115;9132:468;;;;;:::o;9606:307::-;9667:4;9757:18;9749:6;9746:30;9743:56;;;9779:18;;:::i;:::-;9743:56;9817:29;9839:6;9817:29;:::i;:::-;9809:37;;9901:4;9895;9891:15;9883:23;;9606:307;;;:::o;9919:410::-;9996:5;10021:65;10037:48;10078:6;10037:48;:::i;:::-;10021:65;:::i;:::-;10012:74;;10109:6;10102:5;10095:21;10147:4;10140:5;10136:16;10185:3;10176:6;10171:3;10167:16;10164:25;10161:112;;;10192:79;;:::i;:::-;10161:112;10282:41;10316:6;10311:3;10306;10282:41;:::i;:::-;10002:327;9919:410;;;;;:::o;10348:338::-;10403:5;10452:3;10445:4;10437:6;10433:17;10429:27;10419:122;;10460:79;;:::i;:::-;10419:122;10577:6;10564:20;10602:78;10676:3;10668:6;10661:4;10653:6;10649:17;10602:78;:::i;:::-;10593:87;;10409:277;10348:338;;;;:::o;10692:943::-;10787:6;10795;10803;10811;10860:3;10848:9;10839:7;10835:23;10831:33;10828:120;;;10867:79;;:::i;:::-;10828:120;10987:1;11012:53;11057:7;11048:6;11037:9;11033:22;11012:53;:::i;:::-;11002:63;;10958:117;11114:2;11140:53;11185:7;11176:6;11165:9;11161:22;11140:53;:::i;:::-;11130:63;;11085:118;11242:2;11268:53;11313:7;11304:6;11293:9;11289:22;11268:53;:::i;:::-;11258:63;;11213:118;11398:2;11387:9;11383:18;11370:32;11429:18;11421:6;11418:30;11415:117;;;11451:79;;:::i;:::-;11415:117;11556:62;11610:7;11601:6;11590:9;11586:22;11556:62;:::i;:::-;11546:72;;11341:287;10692:943;;;;;;;:::o;11641:474::-;11709:6;11717;11766:2;11754:9;11745:7;11741:23;11737:32;11734:119;;;11772:79;;:::i;:::-;11734:119;11892:1;11917:53;11962:7;11953:6;11942:9;11938:22;11917:53;:::i;:::-;11907:63;;11863:117;12019:2;12045:53;12090:7;12081:6;12070:9;12066:22;12045:53;:::i;:::-;12035:63;;11990:118;11641:474;;;;;:::o;12121:180::-;12169:77;12166:1;12159:88;12266:4;12263:1;12256:15;12290:4;12287:1;12280:15;12307:320;12351:6;12388:1;12382:4;12378:12;12368:22;;12435:1;12429:4;12425:12;12456:18;12446:81;;12512:4;12504:6;12500:17;12490:27;;12446:81;12574:2;12566:6;12563:14;12543:18;12540:38;12537:84;;;12593:18;;:::i;:::-;12537:84;12358:269;12307:320;;;:::o;12633:231::-;12773:34;12769:1;12761:6;12757:14;12750:58;12842:14;12837:2;12829:6;12825:15;12818:39;12633:231;:::o;12870:366::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:419::-;13408:4;13446:2;13435:9;13431:18;13423:26;;13495:9;13489:4;13485:20;13481:1;13470:9;13466:17;13459:47;13523:131;13649:4;13523:131;:::i;:::-;13515:139;;13242:419;;;:::o;13667:220::-;13807:34;13803:1;13795:6;13791:14;13784:58;13876:3;13871:2;13863:6;13859:15;13852:28;13667:220;:::o;13893:366::-;14035:3;14056:67;14120:2;14115:3;14056:67;:::i;:::-;14049:74;;14132:93;14221:3;14132:93;:::i;:::-;14250:2;14245:3;14241:12;14234:19;;13893:366;;;:::o;14265:419::-;14431:4;14469:2;14458:9;14454:18;14446:26;;14518:9;14512:4;14508:20;14504:1;14493:9;14489:17;14482:47;14546:131;14672:4;14546:131;:::i;:::-;14538:139;;14265:419;;;:::o;14690:243::-;14830:34;14826:1;14818:6;14814:14;14807:58;14899:26;14894:2;14886:6;14882:15;14875:51;14690:243;:::o;14939:366::-;15081:3;15102:67;15166:2;15161:3;15102:67;:::i;:::-;15095:74;;15178:93;15267:3;15178:93;:::i;:::-;15296:2;15291:3;15287:12;15280:19;;14939:366;;;:::o;15311:419::-;15477:4;15515:2;15504:9;15500:18;15492:26;;15564:9;15558:4;15554:20;15550:1;15539:9;15535:17;15528:47;15592:131;15718:4;15592:131;:::i;:::-;15584:139;;15311:419;;;:::o;15736:236::-;15876:34;15872:1;15864:6;15860:14;15853:58;15945:19;15940:2;15932:6;15928:15;15921:44;15736:236;:::o;15978:366::-;16120:3;16141:67;16205:2;16200:3;16141:67;:::i;:::-;16134:74;;16217:93;16306:3;16217:93;:::i;:::-;16335:2;16330:3;16326:12;16319:19;;15978:366;;;:::o;16350:419::-;16516:4;16554:2;16543:9;16539:18;16531:26;;16603:9;16597:4;16593:20;16589:1;16578:9;16574:17;16567:47;16631:131;16757:4;16631:131;:::i;:::-;16623:139;;16350:419;;;:::o;16775:182::-;16915:34;16911:1;16903:6;16899:14;16892:58;16775:182;:::o;16963:366::-;17105:3;17126:67;17190:2;17185:3;17126:67;:::i;:::-;17119:74;;17202:93;17291:3;17202:93;:::i;:::-;17320:2;17315:3;17311:12;17304:19;;16963:366;;;:::o;17335:419::-;17501:4;17539:2;17528:9;17524:18;17516:26;;17588:9;17582:4;17578:20;17574:1;17563:9;17559:17;17552:47;17616:131;17742:4;17616:131;:::i;:::-;17608:139;;17335:419;;;:::o;17760:228::-;17900:34;17896:1;17888:6;17884:14;17877:58;17969:11;17964:2;17956:6;17952:15;17945:36;17760:228;:::o;17994:366::-;18136:3;18157:67;18221:2;18216:3;18157:67;:::i;:::-;18150:74;;18233:93;18322:3;18233:93;:::i;:::-;18351:2;18346:3;18342:12;18335:19;;17994:366;;;:::o;18366:419::-;18532:4;18570:2;18559:9;18555:18;18547:26;;18619:9;18613:4;18609:20;18605:1;18594:9;18590:17;18583:47;18647:131;18773:4;18647:131;:::i;:::-;18639:139;;18366:419;;;:::o;18791:237::-;18931:34;18927:1;18919:6;18915:14;18908:58;19000:20;18995:2;18987:6;18983:15;18976:45;18791:237;:::o;19034:366::-;19176:3;19197:67;19261:2;19256:3;19197:67;:::i;:::-;19190:74;;19273:93;19362:3;19273:93;:::i;:::-;19391:2;19386:3;19382:12;19375:19;;19034:366;;;:::o;19406:419::-;19572:4;19610:2;19599:9;19595:18;19587:26;;19659:9;19653:4;19649:20;19645:1;19634:9;19630:17;19623:47;19687:131;19813:4;19687:131;:::i;:::-;19679:139;;19406:419;;;:::o;19831:233::-;19971:34;19967:1;19959:6;19955:14;19948:58;20040:16;20035:2;20027:6;20023:15;20016:41;19831:233;:::o;20070:366::-;20212:3;20233:67;20297:2;20292:3;20233:67;:::i;:::-;20226:74;;20309:93;20398:3;20309:93;:::i;:::-;20427:2;20422:3;20418:12;20411:19;;20070:366;;;:::o;20442:419::-;20608:4;20646:2;20635:9;20631:18;20623:26;;20695:9;20689:4;20685:20;20681:1;20670:9;20666:17;20659:47;20723:131;20849:4;20723:131;:::i;:::-;20715:139;;20442:419;;;:::o;20867:230::-;21007:34;21003:1;20995:6;20991:14;20984:58;21076:13;21071:2;21063:6;21059:15;21052:38;20867:230;:::o;21103:366::-;21245:3;21266:67;21330:2;21325:3;21266:67;:::i;:::-;21259:74;;21342:93;21431:3;21342:93;:::i;:::-;21460:2;21455:3;21451:12;21444:19;;21103:366;;;:::o;21475:419::-;21641:4;21679:2;21668:9;21664:18;21656:26;;21728:9;21722:4;21718:20;21714:1;21703:9;21699:17;21692:47;21756:131;21882:4;21756:131;:::i;:::-;21748:139;;21475:419;;;:::o;21900:246::-;22040:34;22036:1;22028:6;22024:14;22017:58;22109:29;22104:2;22096:6;22092:15;22085:54;21900:246;:::o;22152:366::-;22294:3;22315:67;22379:2;22374:3;22315:67;:::i;:::-;22308:74;;22391:93;22480:3;22391:93;:::i;:::-;22509:2;22504:3;22500:12;22493:19;;22152:366;;;:::o;22524:419::-;22690:4;22728:2;22717:9;22713:18;22705:26;;22777:9;22771:4;22767:20;22763:1;22752:9;22748:17;22741:47;22805:131;22931:4;22805:131;:::i;:::-;22797:139;;22524:419;;;:::o;22949:229::-;23089:34;23085:1;23077:6;23073:14;23066:58;23158:12;23153:2;23145:6;23141:15;23134:37;22949:229;:::o;23184:366::-;23326:3;23347:67;23411:2;23406:3;23347:67;:::i;:::-;23340:74;;23423:93;23512:3;23423:93;:::i;:::-;23541:2;23536:3;23532:12;23525:19;;23184:366;;;:::o;23556:419::-;23722:4;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23556:419;;;:::o;23981:180::-;24029:77;24026:1;24019:88;24126:4;24123:1;24116:15;24150:4;24147:1;24140:15;24167:191;24207:4;24227:20;24245:1;24227:20;:::i;:::-;24222:25;;24261:20;24279:1;24261:20;:::i;:::-;24256:25;;24300:1;24297;24294:8;24291:34;;;24305:18;;:::i;:::-;24291:34;24350:1;24347;24343:9;24335:17;;24167:191;;;;:::o;24364:234::-;24504:34;24500:1;24492:6;24488:14;24481:58;24573:17;24568:2;24560:6;24556:15;24549:42;24364:234;:::o;24604:366::-;24746:3;24767:67;24831:2;24826:3;24767:67;:::i;:::-;24760:74;;24843:93;24932:3;24843:93;:::i;:::-;24961:2;24956:3;24952:12;24945:19;;24604:366;;;:::o;24976:419::-;25142:4;25180:2;25169:9;25165:18;25157:26;;25229:9;25223:4;25219:20;25215:1;25204:9;25200:17;25193:47;25257:131;25383:4;25257:131;:::i;:::-;25249:139;;24976:419;;;:::o;25401:148::-;25503:11;25540:3;25525:18;;25401:148;;;;:::o;25555:377::-;25661:3;25689:39;25722:5;25689:39;:::i;:::-;25744:89;25826:6;25821:3;25744:89;:::i;:::-;25737:96;;25842:52;25887:6;25882:3;25875:4;25868:5;25864:16;25842:52;:::i;:::-;25919:6;25914:3;25910:16;25903:23;;25665:267;25555:377;;;;:::o;25938:141::-;25987:4;26010:3;26002:11;;26033:3;26030:1;26023:14;26067:4;26064:1;26054:18;26046:26;;25938:141;;;:::o;26109:845::-;26212:3;26249:5;26243:12;26278:36;26304:9;26278:36;:::i;:::-;26330:89;26412:6;26407:3;26330:89;:::i;:::-;26323:96;;26450:1;26439:9;26435:17;26466:1;26461:137;;;;26612:1;26607:341;;;;26428:520;;26461:137;26545:4;26541:9;26530;26526:25;26521:3;26514:38;26581:6;26576:3;26572:16;26565:23;;26461:137;;26607:341;26674:38;26706:5;26674:38;:::i;:::-;26734:1;26748:154;26762:6;26759:1;26756:13;26748:154;;;26836:7;26830:14;26826:1;26821:3;26817:11;26810:35;26886:1;26877:7;26873:15;26862:26;;26784:4;26781:1;26777:12;26772:17;;26748:154;;;26931:6;26926:3;26922:16;26915:23;;26614:334;;26428:520;;26216:738;;26109:845;;;;:::o;26960:589::-;27185:3;27207:95;27298:3;27289:6;27207:95;:::i;:::-;27200:102;;27319:95;27410:3;27401:6;27319:95;:::i;:::-;27312:102;;27431:92;27519:3;27510:6;27431:92;:::i;:::-;27424:99;;27540:3;27533:10;;26960:589;;;;;;:::o;27555:305::-;27595:3;27614:20;27632:1;27614:20;:::i;:::-;27609:25;;27648:20;27666:1;27648:20;:::i;:::-;27643:25;;27802:1;27734:66;27730:74;27727:1;27724:81;27721:107;;;27808:18;;:::i;:::-;27721:107;27852:1;27849;27845:9;27838:16;;27555:305;;;;:::o;27866:233::-;27905:3;27928:24;27946:5;27928:24;:::i;:::-;27919:33;;27974:66;27967:5;27964:77;27961:103;;;28044:18;;:::i;:::-;27961:103;28091:1;28084:5;28080:13;28073:20;;27866:233;;;:::o;28105:225::-;28245:34;28241:1;28233:6;28229:14;28222:58;28314:8;28309:2;28301:6;28297:15;28290:33;28105:225;:::o;28336:366::-;28478:3;28499:67;28563:2;28558:3;28499:67;:::i;:::-;28492:74;;28575:93;28664:3;28575:93;:::i;:::-;28693:2;28688:3;28684:12;28677:19;;28336:366;;;:::o;28708:419::-;28874:4;28912:2;28901:9;28897:18;28889:26;;28961:9;28955:4;28951:20;28947:1;28936:9;28932:17;28925:47;28989:131;29115:4;28989:131;:::i;:::-;28981:139;;28708:419;;;:::o;29133:231::-;29273:34;29269:1;29261:6;29257:14;29250:58;29342:14;29337:2;29329:6;29325:15;29318:39;29133:231;:::o;29370:366::-;29512:3;29533:67;29597:2;29592:3;29533:67;:::i;:::-;29526:74;;29609:93;29698:3;29609:93;:::i;:::-;29727:2;29722:3;29718:12;29711:19;;29370:366;;;:::o;29742:419::-;29908:4;29946:2;29935:9;29931:18;29923:26;;29995:9;29989:4;29985:20;29981:1;29970:9;29966:17;29959:47;30023:131;30149:4;30023:131;:::i;:::-;30015:139;;29742:419;;;:::o;30167:224::-;30307:34;30303:1;30295:6;30291:14;30284:58;30376:7;30371:2;30363:6;30359:15;30352:32;30167:224;:::o;30397:366::-;30539:3;30560:67;30624:2;30619:3;30560:67;:::i;:::-;30553:74;;30636:93;30725:3;30636:93;:::i;:::-;30754:2;30749:3;30745:12;30738:19;;30397:366;;;:::o;30769:419::-;30935:4;30973:2;30962:9;30958:18;30950:26;;31022:9;31016:4;31012:20;31008:1;30997:9;30993:17;30986:47;31050:131;31176:4;31050:131;:::i;:::-;31042:139;;30769:419;;;:::o;31194:223::-;31334:34;31330:1;31322:6;31318:14;31311:58;31403:6;31398:2;31390:6;31386:15;31379:31;31194:223;:::o;31423:366::-;31565:3;31586:67;31650:2;31645:3;31586:67;:::i;:::-;31579:74;;31662:93;31751:3;31662:93;:::i;:::-;31780:2;31775:3;31771:12;31764:19;;31423:366;;;:::o;31795:419::-;31961:4;31999:2;31988:9;31984:18;31976:26;;32048:9;32042:4;32038:20;32034:1;32023:9;32019:17;32012:47;32076:131;32202:4;32076:131;:::i;:::-;32068:139;;31795:419;;;:::o;32220:175::-;32360:27;32356:1;32348:6;32344:14;32337:51;32220:175;:::o;32401:366::-;32543:3;32564:67;32628:2;32623:3;32564:67;:::i;:::-;32557:74;;32640:93;32729:3;32640:93;:::i;:::-;32758:2;32753:3;32749:12;32742:19;;32401:366;;;:::o;32773:419::-;32939:4;32977:2;32966:9;32962:18;32954:26;;33026:9;33020:4;33016:20;33012:1;33001:9;32997:17;32990:47;33054:131;33180:4;33054:131;:::i;:::-;33046:139;;32773:419;;;:::o;33198:237::-;33338:34;33334:1;33326:6;33322:14;33315:58;33407:20;33402:2;33394:6;33390:15;33383:45;33198:237;:::o;33441:366::-;33583:3;33604:67;33668:2;33663:3;33604:67;:::i;:::-;33597:74;;33680:93;33769:3;33680:93;:::i;:::-;33798:2;33793:3;33789:12;33782:19;;33441:366;;;:::o;33813:419::-;33979:4;34017:2;34006:9;34002:18;33994:26;;34066:9;34060:4;34056:20;34052:1;34041:9;34037:17;34030:47;34094:131;34220:4;34094:131;:::i;:::-;34086:139;;33813:419;;;:::o;34238:180::-;34286:77;34283:1;34276:88;34383:4;34380:1;34373:15;34407:4;34404:1;34397:15;34424:185;34464:1;34481:20;34499:1;34481:20;:::i;:::-;34476:25;;34515:20;34533:1;34515:20;:::i;:::-;34510:25;;34554:1;34544:35;;34559:18;;:::i;:::-;34544:35;34601:1;34598;34594:9;34589:14;;34424:185;;;;:::o;34615:176::-;34647:1;34664:20;34682:1;34664:20;:::i;:::-;34659:25;;34698:20;34716:1;34698:20;:::i;:::-;34693:25;;34737:1;34727:35;;34742:18;;:::i;:::-;34727:35;34783:1;34780;34776:9;34771:14;;34615:176;;;;:::o;34797:180::-;34845:77;34842:1;34835:88;34942:4;34939:1;34932:15;34966:4;34963:1;34956:15;34983:98;35034:6;35068:5;35062:12;35052:22;;34983:98;;;:::o;35087:168::-;35170:11;35204:6;35199:3;35192:19;35244:4;35239:3;35235:14;35220:29;;35087:168;;;;:::o;35261:360::-;35347:3;35375:38;35407:5;35375:38;:::i;:::-;35429:70;35492:6;35487:3;35429:70;:::i;:::-;35422:77;;35508:52;35553:6;35548:3;35541:4;35534:5;35530:16;35508:52;:::i;:::-;35585:29;35607:6;35585:29;:::i;:::-;35580:3;35576:39;35569:46;;35351:270;35261:360;;;;:::o;35627:640::-;35822:4;35860:3;35849:9;35845:19;35837:27;;35874:71;35942:1;35931:9;35927:17;35918:6;35874:71;:::i;:::-;35955:72;36023:2;36012:9;36008:18;35999:6;35955:72;:::i;:::-;36037;36105:2;36094:9;36090:18;36081:6;36037:72;:::i;:::-;36156:9;36150:4;36146:20;36141:2;36130:9;36126:18;36119:48;36184:76;36255:4;36246:6;36184:76;:::i;:::-;36176:84;;35627:640;;;;;;;:::o;36273:141::-;36329:5;36360:6;36354:13;36345:22;;36376:32;36402:5;36376:32;:::i;:::-;36273:141;;;;:::o;36420:349::-;36489:6;36538:2;36526:9;36517:7;36513:23;36509:32;36506:119;;;36544:79;;:::i;:::-;36506:119;36664:1;36689:63;36744:7;36735:6;36724:9;36720:22;36689:63;:::i;:::-;36679:73;;36635:127;36420:349;;;;:::o;36775:182::-;36915:34;36911:1;36903:6;36899:14;36892:58;36775:182;:::o;36963:366::-;37105:3;37126:67;37190:2;37185:3;37126:67;:::i;:::-;37119:74;;37202:93;37291:3;37202:93;:::i;:::-;37320:2;37315:3;37311:12;37304:19;;36963:366;;;:::o;37335:419::-;37501:4;37539:2;37528:9;37524:18;37516:26;;37588:9;37582:4;37578:20;37574:1;37563:9;37559:17;37552:47;37616:131;37742:4;37616:131;:::i;:::-;37608:139;;37335:419;;;:::o;37760:178::-;37900:30;37896:1;37888:6;37884:14;37877:54;37760:178;:::o;37944:366::-;38086:3;38107:67;38171:2;38166:3;38107:67;:::i;:::-;38100:74;;38183:93;38272:3;38183:93;:::i;:::-;38301:2;38296:3;38292:12;38285:19;;37944:366;;;:::o;38316:419::-;38482:4;38520:2;38509:9;38505:18;38497:26;;38569:9;38563:4;38559:20;38555:1;38544:9;38540:17;38533:47;38597:131;38723:4;38597:131;:::i;:::-;38589:139;;38316:419;;;:::o

Swarm Source

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